0.png (363.89 KB, 下載次數: 72)
下載附件
2016-9-4 19:50 上傳
東西貨真價實,有代碼有注釋,真給力
寫了一個測溫的程序,測溫的是主機測溫,在從機的1602顯示出來,并且有限溫的調節。里面有比較詳細的講說,適合與我一樣的菜鳥借鑒借鑒!
有需要的同學可以看看吧
0.png (70.86 KB, 下載次數: 80)
下載附件
2016-9-4 19:51 上傳
DS18B20 RES485 液晶1602 顯示(帶限溫).rar
(131.96 KB, 下載次數: 85)
2016-9-4 19:52 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
主機程序:
從機程序:
- #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]; //存儲數值
- }
- }
復制代碼
|