完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
#include #include #include "hanshu.h" #define Line_one 0x80 #define Line_two 0x80+0x40 bit ReadRTC_Flag;//定义读DS1302标志 bit Read_18b20_flag; //定义读ds18b20 标志 unsigned char h_tmpdisplay[10]={0}, l_tmpdisplay[8]={0}; //时间显示数组 unsigned char t_tmpdisplay[4]={0x20,0x20,0xdf,0x43}; //温度显示数组,分别为‘ ’ ‘ ’ ‘摄氏度’ unsigned char *weekdisplay[7]={"MON","TUE","WED","THU","FRI","SAT","SUN"}; void Init (); /******************************************************************/ /* 主函数 */ /******************************************************************/ void main(void) { Init (); //初始化定时器0和1602 // Set_RTC(); //写入时钟值,如果使用备用电池时候,不需要每次上电写入,此程序应该屏蔽 t_tmpdisplay[2]=0xdf; t_tmpdisplay[3]='C'; //摄氏度的符号 while(1) { if(ReadRTC_Flag) { ReadRTC_Flag=0; Read_RTC(); h_tmpdisplay[0]='0'+2; //2 h_tmpdisplay[1]='0'; //0 h_tmpdisplay[2]='0'+l_tmpdate[6]/16; h_tmpdisplay[3]='0'+l_tmpdate[6]%16; h_tmpdisplay[4]=0x2d; //0x2f+0x30就是‘-’ h_tmpdisplay[5]='0'+l_tmpdate[4]/16; h_tmpdisplay[6]='0'+l_tmpdate[4]%16; h_tmpdisplay[7]=0x2d; h_tmpdisplay[8]='0'+l_tmpdate[3]/16; h_tmpdisplay[9]='0'+l_tmpdate[3]%16; l_tmpdisplay[0]='0'+l_tmpdate[2]/16; //数据的转换,因我们采用数码管0~9的显示,将数据分开 l_tmpdisplay[1]='0'+l_tmpdate[2]%16; l_tmpdisplay[2]=0x3a; //加入":" l_tmpdisplay[3]='0'+l_tmpdate[1]/16; l_tmpdisplay[4]='0'+l_tmpdate[1]%16; l_tmpdisplay[5]=0x3a; l_tmpdisplay[6]='0'+l_tmpdate[0]/16; l_tmpdisplay[7]='0'+l_tmpdate[0]%16; } if (Read_18b20_flag==1) { Read_18b20_flag=0; EA=0; temperatureResult(); EA=1; t_tmpdisplay[0]='0'+ temperature%100/10; t_tmpdisplay[1]='0'+ temperature%10; } } } /*初始化子程序 */ void Init () { delayms (10); writeOrder (0x38); //设置16*2显示,5*7显示,8位接收数据 delayms (1); writeOrder (0x0c); //开显示,不显示光标 delayms (1); writeOrder (0x06); //写一字符后地址指针加1 delayms (1); writeOrder (0x01); delayms (1); TMOD=0x01; //定义定时器T0为工作方式1 TH0=0xef; //对T0定时器装值 TL0=0xf0; EA=1; //打开总中断 ET0=1; //打开T0中断 TR0=1; //启动T0定时器 } /******************************************************************/ /* 定时器中断函数 */ /******************************************************************/ void time(void) interrupt 1 using 1 //中断,用于LCD1602扫描 { int i, j, k; unsigned char *p=weekdisplay[l_tmpdate[5]-1]; static unsigned char num_1, num_2; TH0=(65536-50000)/256; //对T0定时器装值 TL0=(65536-50000)%256; /************** 时间的显示 *************/ for (i=0; i<10; i++) { writeOrder(Line_one+1+i); writeData(h_tmpdisplay[i]); } writeOrder(Line_one+0x0c); while(*p != ' |