原理圖如下
QQ圖片20190611101147.png (189.84 KB, 下載次數: 117)
下載附件
2019-6-11 10:12 上傳
部分程序如下
QQ圖片20190611101259.png (285.28 KB, 下載次數: 112)
下載附件
2019-6-11 10:13 上傳
單片機源程序如下:
- #include <reg51.h>
- #include "DS18B20.h"
- #include "DS1302.h"
- #include "LCD12864.h"
- char a;
- sbit KEY1=P3^4;
- sbit KEY2=P3^5;
- sbit KEY3=P3^6;
- bit flag=1; //進入/退出設置標志
- uchar choose=0x01; //切換標志
- void delay10(void) //延時10ms
- {
- unsigned char i,j;
- for(i=0;i<255;i++)
- for(j=0;j<200;j++);
- }
- void delay5ms(void) //誤差 0us
- {
- unsigned char a,b;
- for(b=19;b>0;b--)
- for(a=130;a>0;a--);
- }
- //設置時ds1302寄存器值循環 如秒寄存器59時加一變為00
- 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;
- }
- void digplay() {
- //時間
- ShowNumber16_32(2,0,TIME[2]>>4&0x03); //時 十位
- ShowNumber16_32(2,16, TIME[2]&0x0f);//時 個位
- ShowNumber16_32(2,48,TIME[1]>>4&0x07);//分 十位
- ShowNumber16_32(2,64, TIME[1]&0x0f);//分 個位
- ShowNumber16_32(2,96,TIME[0]>>4&0x07);//秒 十位
- ShowNumber16_32(2,112, TIME[0]&0x0f);//秒 個位
-
-
- //日期
- ShowNumber(0,0,2);
- ShowNumber(0,8,0);
- ShowNumber(0,16,TIME[6]>>4&0x0f);
- ShowNumber(0,24, TIME[6]&0x0f);//年
-
- ShowNumber(0,40,TIME[4]>>4&0x01);
- ShowNumber(0,48, TIME[4]&0x0f);//月
-
- ShowNumber(0,64,TIME[3]>>4&0x03);
- ShowNumber(0,72, TIME[3]&0x0f);//日
- ShowChina(0,112,(TIME[5]&0x07)-1);//周
- }
- void wendu() {
- //溫度
- a=Read_Temperature(); //讀取DS18B20的溫度
- if(a<0) //處理溫度正負
- {
- a = (-1)*a; // 取補
- ShowNumber(6,88,11); //溫度計圖標—
- }
- else
- {
- ShowNumber(6,88,12);//溫度計圖標+
- }
- ShowNumber(6,96,a/10%10); //顯示溫度中位
-
- ShowNumber(6,104,a%10); //顯示溫度低位
- }
- void digplaystart() {//開機顯示
- uchar i=0;
- ShowChina(2,64-16*1.5,19);
- ShowChina(2,64-16*0.5,20);
- ShowChina(2,64+16*0.5,21);
- ShowChina(2,64+16*1.5,22);
- for (i=0;i<10;i++) {
- ShowNumber(4,32+8*i,16);
- delay5ms();
- delay5ms();
- }
- ClearScreen(0);//清屏
- }
- void main(void)
- {
- uchar i;
- InitLCD(); //初始化LCD12864
- digplaystart();
- delay5ms();
- Ds1302Init();//Ds1302初始化,并且附上設定的默認時間
- a=Read_Temperature(); //讀取DS18B20的溫度
- ShowNumber(0,32,11);//-
- ShowNumber(0,56,11);//-
- ShowChina(0,96,7);//漢字周
- ShowNumber16_32(2,32,10);//:
- ShowNumber16_32(2,80,10);//:
- ShowChina(6,112,8);//℃
- while(1)
- {
- wendu();//溫度顯示
- if(flag==1)
- Ds1302ReadTime();
- //讀取DS1302的時間
- else
- Ds1302WriteTime();
- if(KEY1==0) //按鍵1--處理設定時間和返回
- {
- delay10();
- if(KEY1==1)
- {
- delay10();
- flag=~flag;
-
- if(flag==0) {
- ShowChina(6,48,9);
- ShowChina(6,0,16);
- ShowChina(6,16,17);
- ShowNumber(6,32,10);
- }
- if(flag==1) {
- for( i=0;i<8;i++) {
- ShowNumber(6,8*i,15);
- }
- }
- }
- }
- if(KEY2==0) //按鍵2--處理選擇設定時間的項目
- {
- delay10();
- if(KEY2==1)
- {
- delay10();
- choose++;
- ShowChina(6,48,8+choose);
- if(choose==7)
- choose=0x00;
- }
- }
- if(KEY3==0) //按鍵3--處理設定時間和返回
- { delay10();
- if(KEY3==1)
- {
- delay10();
- switch(choose)
- {
- case 1: TIME[6]++; TIME[6]=conver(TIME[6],0xa0,0x00);break;//年
- case 2: TIME[5]++; TIME[5]=conver(TIME[5],0x08,0x01);break;//周
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
萬年歷 .rar
(108.45 KB, 下載次數: 619)
2019-6-11 10:14 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|