|
弄了個(gè)簡(jiǎn)單的19264液晶時(shí)鐘,采用大數(shù)字顯示,用DS1302和ds12cr887時(shí)鐘芯片,分別兩個(gè)對(duì)應(yīng)程序。只有時(shí)、分、秒和溫度顯示。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
1302.JPG.thumb.jpg (123.69 KB, 下載次數(shù): 115)
下載附件
2019-6-27 15:37 上傳
Snap1.jpg.thumb.jpg (137.55 KB, 下載次數(shù): 110)
下載附件
2019-6-27 15:37 上傳
0.png (12.53 KB, 下載次數(shù): 108)
下載附件
2019-6-27 18:03 上傳
單片機(jī)源程序如下:
- /*系統(tǒng)頭文件--------------------------------------------------------------------*/
- #include <reg52.h>
- #include <absacc.h>
- /*包含的文件--------------------------------------------------------------------*/
- #include "MODEL.h"
- #include "LCD19264.h"
- #include "DS12CR887.h"
- #include "DS18B20.h"
- /*定義變量名--------------------------------------------------------------------*/
- #define uchar unsigned char
- #define uint unsigned int
- /*定義變量----------------------------------------------------------------------*/
- bit q=0,w=0; //調(diào)時(shí)標(biāo)志位
- /*定義時(shí)間變量——————————————————————————————————————————————————————————————————*/
- uchar sec,min,hour;
- /*定義按鍵----------------------------------------------------------------------*/
- sbit K1 = P1^7; //按鍵K1-設(shè)置
- sbit K2 = P1^4; //按鍵K2-確認(rèn)、返回
- sbit K3 = P1^6; //按鍵K3-加
- sbit K4 = P1^5; //按鍵K4-減
- sbit K5 = P1^3; //液晶背光控制按鍵,按一下亮,再按一下滅
- sbit BEEP= P1^2; //蜂鳴器
- sbit BLA = P1^0; //液晶背光控制輸出,低電平有效,PNP三極管控制。
- /*顯示時(shí)、分、秒————————————————————————————————————————————————————————————————*/
- void displaytime(void)
- {
- //往液晶屏填寫"小時(shí)"數(shù)據(jù)-----------------------------------------------
- hour=ds_read(4); //讀取DS12CR887的小時(shí)數(shù)據(jù)
- if((hour/10)==0){Show3264(0,0,11);}
- else {Show3264(0,0,(hour/10));} //小時(shí)十位
- Show3264(0,1,(hour%10)); //小時(shí)個(gè)位
- Show3264(0,2,10); //時(shí)鐘分隔符":"
- //往液晶屏填寫"分鐘"數(shù)據(jù)-----------------------------------------------
- min=ds_read(2); //讀取DS12CR887的分?jǐn)?shù)據(jù)
- Show3264(0,3,(min/10)); //分鐘十位
- Show3264(0,4,(min%10)); //分鐘個(gè)位
- //往液晶屏填寫"秒"數(shù)據(jù)-------------------------------------------------
- sec=ds_read(0); //讀取DS12CR887的秒數(shù)據(jù)
- Show1632(2,10,(sec/10)); //秒鐘十位
- Show1632(2,11,(sec%10)); //秒鐘個(gè)位
- }
- /*設(shè)置日期、時(shí)間函數(shù)------------------------------------------------------------*/
- void Set_time(uchar sel)
- {
- signed char address,item;
- signed char max,mini;
- ds_write(0x0a,0x00); //開始調(diào)時(shí),DS12CR887關(guān)閉時(shí)鐘振蕩器
- ShowHZ(0,10,0); //顯示"設(shè)"
- ShowHZ(0,11,1); //顯示"置"
- if(sel==2) {ShowHZ(1,10,6);ShowHZ(1,11,3);address=0; max=59;mini=0;}//秒鐘
- if(sel==1) {ShowHZ(1,10,2);ShowHZ(1,11,3);address=2; max=59;mini=0;}//分鐘
- if(sel==0) {ShowHZ(1,10,4);ShowHZ(1,11,5);address=4; max=23;mini=0;}//小時(shí)
- item=ds_read(address); //讀取DS12CR887某地址上的數(shù)值賦給item
- if(K3 == 0) {item++;} //K3-加數(shù):1
- if(K4 == 0) {item--;} //K4-減數(shù):1
- if(item>max) item=mini; //限制數(shù)值最大有效范圍
- if(item<mini) item=max; //限制數(shù)值最小有效范圍
- ds_write(address,item); //將調(diào)整好的item值寫入DS12CR887
- displaytime(); //顯示時(shí)間
- }
- /*主函數(shù)------------------------------------------------------------------------*/
- void main()
- {
- uchar e=0;
- K1=1;K2=1;K3=1;K4=1;K5=1; //按健復(fù)位
- BLA=0; //打開液晶、按鍵背光
- BEEP=0; //蜂鳴器響50毫秒
- DelayM(50);
- BEEP=1;
- ds_int(); //DS12CR887初始化
- InitLCD(); //液晶屏初始化
- while(1)
- {
- if(w==0)
- {
- displaytime();
- read_temp(); //讀取溫度
- ds1820disp(); //顯示溫度
- } //正常走時(shí)
- else {} //否則啟動(dòng)調(diào)時(shí)
- //設(shè)置鍵------------------------------------------------------------------------
- if (K1 == 0) // 設(shè)置時(shí)間
- {
- DelayM(20); //按鍵消抖
- if(K1 == 0 && w == 1) //當(dāng)是調(diào)時(shí)狀態(tài) 本鍵用于調(diào)整下一項(xiàng)
- {
- e++;
- if (e >= 3 ){e = 0;}
- Set_time(e); //調(diào)整
- }
- if(K1 == 0 && w == 0) //當(dāng)是正常狀態(tài)時(shí)就進(jìn)入調(diào)時(shí)狀態(tài)
- {
- ClearScreen(0);
- ClearScreen(1);
- ClearScreen(2); //清除左中右屏顯示
- w=1; //進(jìn)入調(diào)時(shí)
- Set_time(e); //調(diào)整
- }
- while(K1 == 0); //等待鍵松開
- }
- //確認(rèn),返回鍵-------------------------------------------------------------------
- if (K2 == 0) //在調(diào)時(shí)狀態(tài)時(shí)就退出調(diào)時(shí)
- {
- DelayM(20); //按鍵消抖
- if(K2 == 0 && w == 1)
- {
- w = 0; //退出調(diào)時(shí)
- e = 0; //"下一項(xiàng)"計(jì)數(shù)器清0
- }
- if(K2 == 0 && w == 0)
- {
- ClearScreen(0);
- ClearScreen(1);
- ClearScreen(2); //清除左中右屏顯示
- while(K2 == 0);
- }
- ClearScreen(0);
- ClearScreen(1);
- ClearScreen(2); //清除左中右屏顯示
- ds_write(0x0a,0x20); //調(diào)時(shí)完成,DS12CR887開啟時(shí)鐘振蕩器
- displaytime(); //顯示時(shí)間
- read_temp(); //讀取溫度
- ds1820disp(); //顯示溫度
- while(K2 == 0);
- }
- //加調(diào)整------------------------------------------------------------------------
- if (K3 == 0 && w == 1)
- {
- DelayM(20);
- if(K3 == 0 && w == 1) { Set_time(e); }
- while(K3 == 0);
- }
- //減調(diào)整------------------------------------------------------------------------
- if (K4 == 0 && w == 1)
- {
- DelayM(20);
- if(K4 == 0 && w == 1) { Set_time(e); }
- while(K4 == 0);
- }
- //液晶背光控制,按一下亮,再按一下滅--------------------------------------------
- if(K5 == 0)
- {
- DelayM(20); q = ~q; //標(biāo)志位取反
- if(q){BLA = BLA | 1;}
- else {BLA = BLA & 0;}
- while(K5 == 0);
- }
- }
- ……………………
- …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
51hei.gif (108.14 KB, 下載次數(shù): 63)
下載附件
2022-10-9 04:23 上傳
所有資料51hei下載:
1302的版本(只能用Proteus7.5 不然屏幕會(huì)顯示空白 需要自行安裝幾個(gè)庫):
LCM19264_DS1302.rar
(243.19 KB, 下載次數(shù): 202)
2019-6-27 15:38 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
887版本 同上只能用Proteus7.5打開 其他版本測(cè)試是空白顯示:
19264液晶時(shí)鐘.rar
(259.69 KB, 下載次數(shù): 208)
2019-6-27 15:38 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|