|
proteus仿真萬年歷加溫度顯示,12864顯示,DS1302和DS18B20
0.png (14.07 KB, 下載次數(shù): 38)
下載附件
2017-7-8 05:18 上傳
0.png (48.37 KB, 下載次數(shù): 44)
下載附件
2017-7-8 05:18 上傳
單片機(jī)源程序如下:
- #include <reg51.h>
- #include <DS18B20.H>
- #include <DS1302.H>
- #include <LCD12864.H>
- unsigned char j[8];
- sbit KEY1=P3^2;
- sbit KEY2=P3^3;
- sbit KEY3=P3^4;
- sbit LED1=P3^5;
- sbit LED2=P3^6;
- sbit LED3=P3^7;
- uchar time0_count; //time0計(jì)數(shù)器
- void delay10(void)
- {
- unsigned char i,j;
- for(i=0;i<255;i++)
- for(j=0;j<200;j++);
- }
- unsigned char conver(unsigned char a,unsigned char b,unsigned char c)
- {
-
- if((a&0x0f)==0x0a) a=a+6;
- if(a==b) a=c;
- return a;
- }
- main()
- {
- bit flag_2=1;
- bit flag_3=1;
- bit flag_4=1;
- int i;
- char a;
- unsigned char choose=0x01;
- InitLCD(); //初始化LCD12864
- for(i=0;i<9;i++)
- {
- ShowNumber(6,i*8+32,i+14);
- }
- Show32x32(0,0,0);
- ShowChina(4,0,7);
- ShowChina(4,16,8);
- ShowChina(4,32,9);
- ShowChina(4,48,10);
- ShowNumber(4,64,10); //顯示溫度高位
- read_serial(j); //讀取DS1302的時(shí)間
- ShowNumber(2,32,j[2]>>4&0x03);
- ShowNumber(2,40, j[2]&0x0f);
- ShowChina(2,48,3);
- ShowNumber(2,64,j[1]>>4&0x07);
- ShowNumber(2,72, j[1]&0x0f);
- ShowChina(2,80,4);
- ShowNumber(2,96,j[0]>>4&0x07);
- ShowNumber(2,104, j[0]&0x0f);
- ShowChina(2,112,5);
- ShowNumber(0,32,j[6]>>4&0x0f);
- ShowNumber(0,40, j[6]&0x0f);
- ShowChina(0,48,0);
- ShowNumber(0,64,j[4]>>4&0x01);
- ShowNumber(0,72, j[4]&0x0f);
- ShowChina(0,80,1);
- ShowNumber(0,96,j[3]>>4&0x03);
- ShowNumber(0,104, j[3]&0x0f);
- ShowChina(0,112,2);
- ShowChina(4,104,6);
- ShowNumber(4,120,j[5]-1&0x07);
-
-
-
- while(1)
- {
- //send_char_com(0x31);
- if(flag_2==1)
- read_serial(j); //讀取DS1302的時(shí)間
- else
- write_date_time(j);
- a=Read_Temperature(); //讀取DS18B20的溫度
- if(a<0) //處理溫度正負(fù)
- {
- a = (-1)*a; // 取補(bǔ)
- ShowNumber(4,72,11); //顯示溫度正負(fù)
- }
- else
- {
- ShowNumber(4,72,12); //顯示溫度正負(fù)
- }
-
- ShowNumber(4,80,a/100); //顯示溫度高位
-
- ShowNumber(4,88,a/10%10); //顯示溫度中位
-
- ShowNumber(4,96,a%10); //顯示溫度低位
- LED3=1;LED2=0;LED1=1;
- if(a>40){LED3=0;LED2=1;LED1=1;}
- if(a<30){LED3=1;LED2=1;LED1=0;}
-
- if(KEY1==0) //按鍵1--處理設(shè)定時(shí)間和返回
- {
- delay10();
- if(KEY1==1)
- {
- delay10();
- flag_2=~flag_2;
- }
- }
- if(KEY2==0) //按鍵2--處理選擇設(shè)定時(shí)間的項(xiàng)目
- {
- delay10();
- if(KEY2==1)
- {
- delay10();
- choose++;
- if(choose==8)
- choose=0x01;
- }
- }
- if(KEY3==0) //按鍵3--處理設(shè)定時(shí)間和返回
- { delay10();
- if(KEY3==1)
- {
- delay10();
- switch(choose)
- {
- case 1: j[6]++; j[6]=conver(j[6],0xa0,0x00);break;//年
- case 2: j[5]++; j[5]=conver(j[5],0x07,0x00);break;//周
- case 3: j[4]++; j[4]=conver(j[4],0x13,0x01);break;//月
- case 4: j[3]++; j[3]=conver(j[3],0x32,0x01);break;//日
- case 5: j[2]++; j[2]=conver(j[2],0x24,0x00);break;//時(shí)
- case 6: j[1]++; j[1]=conver(j[1],0x60,0x00);break;//分
- case 7: j[0]++; j[0]=conver(j[0],0x60,0x00);break;//秒
- }
- }
- }
- if(flag_2==1)
- read_serial(j); //讀取DS1302的時(shí)間
- else
- write_date_time(j);
- ShowNumber(2,32,j[2]>>4&0x03);
- ShowNumber(2,40, j[2]&0x0f);
- ShowChina(2,48,3);
- ShowNumber(2,64,j[1]>>4&0x07);
- ShowNumber(2,72, j[1]&0x0f);
- ……………………
- …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
基于單片機(jī)萬年歷 溫度 LCD12864 proteus仿真.zip
(53.89 KB, 下載次數(shù): 26)
2017-7-7 10:10 上傳
點(diǎn)擊文件名下載附件
萬年歷 下載積分: 黑幣 -5
|
|