文字温度显示器仿真原理图:
单片机源程序如下:
- #include <reg51.h>
- #include <DS18B20.H>
- #include <DS1302.H>
- #include <LCD12864.H>
- sbit LED=P3^7;
- sbit LED1=P3^6;
- sbit LED2=P3^5;
- unsigned char j[8];
- uchar time0_count; //time0计数器
- 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;
- LED=0;LED1=0;LED2=0;
- InitLCD(); //初始化LCD12864
- Show32x32(0,0,0);
- ShowChina(4,0,7);
- ShowChina(4,16,8);
- ShowChina(4,32,9);
- ShowChina(4,48,10);
- read_serial(j); //读取DS1302的时间
- while(1)
- {
- //send_char_com(0x31);
- if(flag_2==1)
- read_serial(j); //读取DS1302的时间
- else
- write_date_time(j);
- if(a>30&&a<40)
- {LED1=1;LED=0;LED2=0;}
- if(a>40)
- {LED1=0;LED=1;LED2=0;}
- if(a<30)
- {LED1=0;LED=0;LED2=1;}
- a=Read_Temperature(); //读取DS18B20的温度
- if(a<0) //处理温度正负
- {
- a = (-1)*a; // 取补
- ShowNumber(4,72,11); //显示温度正负
- }
- else
- {
- ShowNumber(4,72,12); //显示温度正负
- }
-
- ShowNumber(4,80,a/100); //显示温度高位
-
- ShowNumber(4,88,a/10%10); //显示温度中位
-
- ShowNumber(4,96,a%10); //显示温度低位
- if(flag_2==1)
- read_serial(j); //读取DS1302的时间
- 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);
- 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,10);
- ShowNumber(4,120,j[5]-1&0x07);
- }
- }
复制代码
所有资料下载(程序+Proteus仿真电路):
文字温度显示器.zip
(1.08 MB, 下载次数: 36)
|