东西货真价实,有代码有注释,真给力
写了一个测温的程序,测温的是主机测温,在从机的1602显示出来,并且有限温的调节。里面有比较详细的讲说,适合与我一样的菜鸟借鉴借鉴!
有需要的同学可以看看吧
DS18B20 RES485 液晶1602 显示(带限温).rar
(131.96 KB, 下载次数: 85)
主机程序:
从机程序:
- #include<main.h>
- #include<1602.h>
- #include<ds1302.h>
- uchar time[]={40,59,23,25,7,3,12}; //2012年7月25日 23:59: 40
- uchar code tab1[]="20 - - ";
- uchar code tab2[]="Temp: : :";
- uchar flag;
- uchar wendu;
- /****
- ******* 延时1ms函数
- *****/
- void delay(uint x)
- {
- uint m,n;
- for(m=x;m>0;m--)
- for(n=110;n>0;n--);
- }
- /****
- ******* 串口初始化函数
- *****/
- void uart_init()
- {
- TMOD=0x20; //9600bps
- SCON=0x50;
- TH1=0xFD;
- TL1=0xFD;
- TR1=1;
- ES=1;
- EA=1;
- UART_EN=0; //串口一直处于接收状态
- }
- /****
- ******* 主函数
- *****/
- void main()
- {
-
- uart_init();
- DS1302_set_time(&time); //设置时钟初值
- while(1)
- {
- if((flag==0)||(flag==1)) //正常显示时间、温度
- {
- lcd_init();
- lcd_write_str(0x84,tab1);
- lcd_write_str(0xc0,tab2);
- while((flag==0)||(flag==1))
- {
-
- DS1302_read_time(&time);
- lcd_write_time(0x86,time[6]); //年
- switch(time[5]) //星期
- {
- case 1: lcd_write_str(0x8F,"MON");break;
- case 2: lcd_write_str(0x8F,"TUE");break;
- case 3: lcd_write_str(0x8F,"WED");break;
- case 4: lcd_write_str(0x8F,"THU");break;
- case 5: lcd_write_str(0x8F,"FRI");break;
- case 6: lcd_write_str(0x8F,"SAT");break;
- case 7: lcd_write_str(0x8F,"SUN");break;
- }
- lcd_write_time(0x89,time[4]); //月
- lcd_write_time(0x8c,time[3]); //日
- lcd_write_time(0xc9,time[2]); //时
- lcd_write_time(0xcc,time[1]); //分
- lcd_write_time(0xcf,time[0]); //秒
- if(flag==1) //显示负温度
- {
- lcd_write_com(0xc5);
- lcd_write_date('-');
- lcd_wendu(0xc6,wendu);
- }
- if(flag==0) //显示正温度
- {
- lcd_wendu(0xc5,wendu);
- lcd_write_com(0xc7);
- lcd_write_date(' ');
- }
- }
- }
- if(flag==2) //显示限温最高值
- {
- lcd_init();
- lcd_write_str(0x80,"PSE SET HIGHEST TEMP");
- lcd_write_str(0xC0,"Temperatuer: C");
- while(flag==2)
- {
- lcd_wendu(0xcc,wendu);
- }
- }
- if(flag==3) //显示限温最低值
- {
- lcd_init();
- lcd_write_str(0x80,"PSE SET LOWEST TEMP");
- lcd_write_str(0xC0,"Temperatuer:- C");
- while(flag==3)
- {
- lcd_write_com(0xc5);
- lcd_write_date('-');
- lcd_wendu(0xcd,-wendu);
- }
- }
- }
- }
- /****
- ******* 串口中断服务程序函数
- *****/
- void ser() interrupt 4
- {
- static uchar string[2],i;
- if(RI)
- {
- RI=0;
- string[i++]=SBUF;
- if(i>1)
- i=0;
- if(string[0]=='-')
- {
- flag=1; //负温度
- }
- if(string[0]=='+') //正温度
- {
- flag=0;
- }
- if(string[0]=='!')
- {
- flag=2; //显示上限温度
- }
- if(string[0]=='@')
- {
- flag=3; //显示下限温度
- }
-
- wendu=string[1]; //存储数值
- }
- }
复制代码
|