基于51单片机的DS1302+LCD1602+DS18B20小综合Word格式文档下载.docx
- 文档编号:19817818
- 上传时间:2023-01-10
- 格式:DOCX
- 页数:26
- 大小:18.71KB
基于51单片机的DS1302+LCD1602+DS18B20小综合Word格式文档下载.docx
《基于51单片机的DS1302+LCD1602+DS18B20小综合Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《基于51单片机的DS1302+LCD1602+DS18B20小综合Word格式文档下载.docx(26页珍藏版)》请在冰豆网上搜索。
//用于存储DS18B20采集的整个数据
ucharDS18B20_H;
//用于存储DS18B20数据采集的整数部分
ucharDS18B20_L;
//用于存储DS18B20数据采集的小数部分
ucharinit_18B20_fail;
voiddelay_us(uintus)
{
while(us--){
//_nop_();
}
}
voiddelay_ms(uintnum)
uchari;
while(num--){
for(i=250;
i>
0;
i--){
_nop_();
bitbusy(void)
bitresult;
LCD_RS=0;
LCD_RW=1;
LCD_EN=1;
delay_us(5);
result=(bit)(P0&
0x80);
LCD_EN=0;
returnresult;
voidwrite_command(ucharcommand)
while(busy());
LCD_RW=0;
P0=command;
delay_us(50);
voidwrite_data(uchardat)
LCD_RS=1;
P0=dat;
voidwrite_time(ucharaddr,ucharnum)
//write_command(second_line+addr);
write_command(second_line+(addr-4));
delay_ms(5);
write_data(0x30+num/10);
write_data(0x30+num%10);
voidwrite_date(ucharaddr,ucharnum)
write_command(first_line+addr);
voidwrite_symbol(ucharaddr,ucharsymbol)
write_command(second_line+addr);
write_data(symbol);
voidwrite_week(ucharnum)
switch(num){
case1:
write_command(first_line+12);
delay_ms(5);
write_data('
M'
);
o'
n'
.'
break;
case2:
T'
u'
e'
case3:
W'
d'
case4:
h'
case5:
F'
r'
i'
case6:
S'
a'
t'
case7:
voidInput_1byte(ucharTD)
ACC=TD;
for(i=8;
DS_IO=ACC0;
DS_CLK=1;
DS_CLK=0;
ACC=ACC>
>
1;
ucharOutput_1byte(void)
i--)
{
ACC=ACC>
ACC7=DS_IO;
DS_CLK=1;
DS_CLK=0;
return(ACC);
voidwrite_DS1302(ucharDS_ADD,ucharDS_DATE)
DS_RST=0;
DS_RST=1;
Input_1byte(DS_ADD);
Input_1byte(DS_DATE);
ucharRead_DS1302(ucharDS_ADD)
ucharDS_INF;
DS_INF=Output_1byte();
return(DS_INF);
voidLCD_init(void)
delay_ms(15);
write_command(0x38);
write_command(0x0C);
write_command(0x06);
write_command(first_line);
for(i=0;
i<
16;
i++){
write_data(line_one[i]);
write_command(second_line);
write_data(line_two[i]);
ucharBCD_to_Dec(ucharnum)
ucharNUM_H,NUM_L,NUM;
NUM_H=num>
4;
NUM_L=num&
0x0f;
NUM=((NUM_H*10))+NUM_L;
returnNUM;
voidwrite_1602(ucharaddr,uchardat)
write_command(addr);
write_data(0x30+dat);
voidDS1302_init()
second=57;
minute=59;
hour=23;
day=30;
month=3;
week=5;
year=16;
write_DS1302(0x8E,0x00);
//NWP
write_DS1302(0x80,(second/10)<
<
4|(second%10));
write_DS1302(0x82,(minute/10)<
4|(minute%10));
write_DS1302(0x84,(hour/10)<
4|(hour%10));
write_DS1302(0x86,(day/10)<
4|(day%10));
write_DS1302(0x88,(month/10)<
4|(month%10));
write_DS1302(0x8A,(week/10)<
4|(week%10));
write_DS1302(0x8C,(year/10)<
4|(year%10));
write_DS1302(0x8E,0x01);
//WP
voidDS18B20_write_byte(ucharbyte)
uchari=0;
8;
DQ=0;
DQ=byte&
0x01;
delay_us(5);
DQ=1;
byte>
=1;
ucharDS18B20_read_byte(void)
uchari,temp=0;
temp>
if(DQ){
temp=temp|0x80;
}
delay_us(4);
returntemp;
ucharDS18B20_Init(void)
ucharinit_18B20_flag;
DQ=1;
delay_us(8);
DQ=0;
delay_us(80);
delay_us(10);
init_18B20_flag=DQ;
//while(init_fail);
returninit_18B20_flag;
uintread_temperature(void)
uchara;
uintb,t;
DS18B20_Init();
DS18B20_write_byte(0xcc);
DS18B20_write_byte(0x44);
delay_us(200);
DS18B20_write_byte(0xBE);
a=DS18B20_read_byte();
b=DS18B20_read_byte();
b<
=8;
t=a+b;
returnt;
voidwrite_temp(uchartemp_h,uchartemp_l)
write_command(second_line+11);
write_data(0x30+temp_h/10);
write_data(0x30+temp_h%10);
write_command(second_line+13);
write_data('
write_command(second_line+14);
write_data(0x30+(temp_l*10/16));
write_command(second_line+15);
C'
voidkey_scan(void)
if(key_1==0){
delay_ms(5);
if(key_1==0){
while(!
key_1);
mode_cnt++;
key_flag=1;
write_DS1302(0x8E,0x00);
write_DS1302(0x80,0x80);
write_DS1302(0x8E,0x80);
if(mode_cnt==8){
key_flag=0;
mode_cnt=0;
write_command(0x0C);
write_DS1302(0x8E,0x00);
write_DS1302(0x80,0x00);
write_DS1302(0x80,(second/10)<
write_DS1302(0x82,(minute/10)<
write_DS1302(0x84,(hour/10)<
write_DS1302(0x86,(day/10)<
write_DS1302(0x88,(month/10)<
write_DS1302(0x8A,(week/10)<
write_DS1302(0x8C,(year/10)<
//write_DS1302(0x80,0x00);
write_DS1302(0x8E,0x80);
}
switch(mode_cnt){
case7:
//write_command(second_line+11);
write_command(second_line+11-4);
delay_ms(5);
write_command(0x0F);
break;
case6:
//write_command(second_line+8);
write_command(second_line+8-4);
case5:
//write_command(second_line+5);
write_command(second_line+5-4);
case4:
write_command(first_line+15);
case3:
write_command(first_line+9);
case2:
write_command(first_line+6);
case1:
write_command(first_line+3);
if(key_2==0){
delay_ms(5);
if(key_2==0){
while(!
key_2);
second++;
if(second==60){
second=0;
}
write_time(0x0A,second);
minute++;
if(minute==60){
minute=0;
write_time(0x07,minute);
hour++;
if(hour==24){
hour=0;
write_time(0x04,hour);
week++;
if(week==8){
week=1;
write_week(week);
day++;
if(month==1||month==3||month==5||month==7||month==8||month==10||month==12){
if(day==32){
day=1;
//month++;
}
if(month==2){
if((year+2000)%4==0&
&
(year+2000)%100!
=0||(year+2000)%400==0){
if(day>
=30){
day=1;
//month++;
}
}else{
=29){
}
if(month==4||month==6||month==9||month==11){
if(day>
=31){
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 51 单片机 DS1302 LCD1602 DS18B20 综合