資源簡介
基于單片機DS1302+DS18B20+DHT11+LCD12864的萬年歷設計,單片機是用STC12C5A60S2,具有時鐘調節,溫度報警,按鍵翻頁功能。
代碼片段和文件信息
#include
#include
#include
#define?uint?unsigned?int
#define?uchar?unsigned?char
#define?KeyIN?(P2&0x38)
?
unsigned?char?up_limit=27;
unsigned?char?down_limit=10;
uchar?data?up_value[3]; ?//上下限溫度存放數組
uchar?data?down_value[3];
sbit?RS=P3^5; ?//12864引腳
sbit?RW=P3^4;
sbit?E=P4^0;
//sbit?shijian=P3^2;
sbit?wenshidu=P3^3;
sbit?SetKey=P2^3;?//按鍵功能:設置
sbit?PlusKey=P2^4;?//按鍵功能:加
sbit?ReduceKey=P2^5;?//按鍵功能:減
sbit?Alarm=P2^7;
//sbit?LCD_RES=P4^6;
sbit?SCLK=P3^7; ?//ds1302引腳
sbit?IO=P3^6;
sbit?RES=P2^1;
sbit?DQ=P2^2;
sbit?ACC0?=?ACC^0;
sbit?ACC7?=?ACC^7;
sbit?DHT=P2^0;
uint?tvalue;
uchar?tflag;
uchar?data?disdata[4];
uchar?data?timedata[12];
uchar?table[]=“現在溫度“;//數組形式
uchar?table1[]=“現在濕度“;
uchar?table2[]=“TH“;
uchar?table3[]=“TL“;
uchar?shiZshiXwenZwenXcheck;
uchar?tr_shiZtr_shiXtr_wenZtr_wenX;
uchar?flag;
uchar?keyvalue;
uchar?Clear_cont;
uchar?time_a;
char?read_data();
void?delay(uint?del) ?//延時xms
{
uint?ij;
for(i=del;i>0;i--)
for(j=110;j>0;j--);
}
void?delay_1ms(uint?i)
{
uint?j=88;
for(;i>0;i--)
{
while(j>0)j--;
}
}
void?delay10ms(void)???//誤差?-0.000000000001us
{
????unsigned?char?abc;
????for(c=14;c>0;c--)
????????for(b=168;b>0;b--)
????????????for(a=22;a>0;a--);
}
void?delay_10us()
{
uchar?i;
i--;
i--;
i--;
i--;
i--;
i--;
}
/*******************************************************************
12864?程序
******************************************************************/
void?writecom(uchar?com)
{
P0=com;
RS=0;
RW=0;
E=0;
delay(1);
E=1;
delay(1);
}
void?lcdwritedate(uchar?date)
{
P0=date;
RS=1;
RW=0;
E=0;
delay(1);
E=1;
delay(1);
}
void?lcdinit()
{
// PSB=1;
writecom(0x01);
delay(1);
writecom(0x30);
delay(1);
writecom(0x06);
delay(1);
writecom(0x0c);
delay(1);
}
void?clear_lcd()
{
writecom(0x34);
delay(5);
writecom(0x30);
delay(5);
writecom(0x01);
delay(5);
}
/*************************************************************************
?dh11程序
**************************************************************************/
void?read_init()
{
DHT=0; ??//主機使DHT11低電平并延時至少18ms
delay_1ms(21);
DHT=1; ??//主機置DHT11高電平20~40us并等待從機相應
delay_10us();
delay_10us();
delay_10us();
delay_10us();
DHT=1;
if(!DHT)??//從機發出響應信號
{
flag=2;
while((!DHT)&&flag++);//等待從機發高電平結束
flag=2;
while(DHT&&flag++); //開始采集數據
tr_shiZ=read_data();//采集濕度整數部分
tr_shiX=read_data();//采集濕度小數部分
tr_wenZ=read_data();//采集溫度整數部分
tr_wenX=read_data();//采集溫度小數部分
check=read_data(); //采集校驗位
}
DHT=0;
delay(20);//采集完數據后 ???
}
char?read_data()
{
uchar?inumtemp;
num=0;
for(i=0;i<8;i++)
{
flag=2;
while((!DHT)&&flag++);//等待50毫秒低電平
delay_10us();//延時判斷0還是1
delay_10us();
delay_10us();
????delay_10us();
if(DHT==1)?
{
temp=1;
flag=2;
while(DHT&&flag++);
}
- 上一篇:createpajek工具
- 下一篇:廣工操作系統課程設計-多道批處理兩級調度模擬
評論
共有 條評論