以AT89C51單片機為核心,制作一個LCD顯示的智能電子鐘.doc_第1頁
以AT89C51單片機為核心,制作一個LCD顯示的智能電子鐘.doc_第2頁
以AT89C51單片機為核心,制作一個LCD顯示的智能電子鐘.doc_第3頁
以AT89C51單片機為核心,制作一個LCD顯示的智能電子鐘.doc_第4頁
以AT89C51單片機為核心,制作一個LCD顯示的智能電子鐘.doc_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

第6章智能電子鐘的設計6.1 功能要求1. 設計要求 以AT89C51單片機為核心,制作一個LCD顯示的智能電子鐘: (1) 計時:秒、分、時、天、周、月、年。 (2) 閏年自動判別。 (3) 五路定時輸出,可任意關斷(最大可到16路)。 (4) 時間、月、日交替顯示。 (5) 自定任意時刻自動開/關屏。 (6) 計時精度:誤差1秒/月(具有微調(diào)設置)。 (7) 鍵盤采用動態(tài)掃描方式查詢。所有的查詢、設置功能均由功能鍵K1、K2完成。2. 工作原理本設計采用市場上流行的時鐘芯片DS1302進行制作。DS1302是DALLAS公司推出的涓流充電時鐘芯片,內(nèi)含一個實時時鐘/日歷和31字節(jié)靜態(tài)RAM,可以通過串行接口與計算機進行通信,使得管腳數(shù)量減少。實時時鐘/日歷電路能夠計算2100年之前的秒、分、時、日、星期、月、年的,具有閏年調(diào)整的能力。DS1302時鐘芯片的主要功能特性:(1) 能計算2100年之前的年、月、日、星期、時、分、秒的信息;每月的天數(shù)和閏年的天數(shù)可自動調(diào)整;時鐘可設置為24或12小時格式。(2) 31B的8位暫存數(shù)據(jù)存儲RAM。(3) 串行I/O口方式使得引腳數(shù)量最少。(4) DS1302與單片機之間能簡單地采用同步串行的方式進行 通信,僅需3根線。(5) 寬范圍工作電壓2.0-5.5V。(6) 工作電流為2.0A時,小于300nA。(7) 功耗很低,保持數(shù)據(jù)和時鐘信息時功率小于1mW。6.2 方案論證6.3 系統(tǒng)硬件電路的設計6.4 系統(tǒng)程序的設計#include#include#include#define uchar unsigned char#define uint unsigned intsbit key1=P30;/設置鍵sbit key2=P33;/調(diào)節(jié)鍵加sbit key3=P36;/設置鍵減uchar second,minute,hour; uchar day,week,month,year;uchar pos_flag=0;uchar keyflag=0;/按鍵標志位/函數(shù)聲明uchar read1302(uchar add); /讀地址、數(shù)據(jù)void write1302(uchar add,uchar date); /寫入地址、數(shù)據(jù)void write_com_date(uchar add,uchar date);void init_lcd();void init_ds1302();void delay(uchar time);void Disp_1602(uchar x,uchar y,uchar *p);void keyscan();void settime();void settime() write1302(0x8e,0x00); /關閉寫保護write1302(0x80,second/10*16+second%10); /秒write1302(0x82,minute/10*16+minute%10); /分write1302(0x84,hour/10*16+hour%10); /時write1302(0x86,day/10*16+day%10); /日write1302(0x88,month/10*16+month%10); /月write1302(0x8a,week/10*16+week%10); /星期write1302(0x8c,year/10*16+year%10); /年write1302(0x8e,0x80); void display() second=read1302(0x81); write_com_date(0xca,0x30+second%10); write_com_date(0xc9,0x30+second/10); minute=read1302(0x83); write_com_date(0xc7,0x30+minute%10);write_com_date(0xc6,0x30+minute/10); hour=read1302(0x85);write_com_date(0xc4,0x30+hour%10);write_com_date(0xc3,0x30+hour/10); day=read1302(0x87);write_com_date(0x8a,0x30+day%10);write_com_date(0x89,0x30+day/10); week=read1302(0x8b);write_com_date(0xcd,0x30+week%10); month=read1302(0x89);write_com_date(0x87,0x30+month%10);write_com_date(0x86,0x30+month/10); year=read1302(0x8d);write_com_date(0x84,0x30+year%10);write_com_date(0x83,0x30+year/10);void keyscan() /修改調(diào)整時間日期 if(key1=0) delay(10); if(key1=0) pos_flag+; while(!key1);keyflag=1; switch(pos_flag)case 1: write_com(0x80+4); /年 write_com(0x0f); /光標閃爍 break;case 2: write_com(0x80+7); /月 break;case 3: write_com(0x80+10);/日 break;case 4: write_com(0x80+0x40+0x0d); /星期 break;case 5: write_com(0x80+0x40+4); /時鐘 break;case 6: write_com(0x80+0x40+7);/分鐘 break;case 7: write_com(0x80+0x40+10);/秒鐘 break;default:break; if(pos_flag=8) /pos_flag=8則退出調(diào)整 pos_flag=0; keyflag=0; /按鍵標識清零 delay(5); settime(); write_com(0x0c); / 關光標 if(key2=0) /調(diào)節(jié)加鍵,按下(低電平)就加 delay(15); if(key2=0) while(!key2);switch(pos_flag)case 1: year+; if(year=99) year=0; write_com_date(0x84,0x30+year%10); write_com_date(0x83,0x30+year/10); break;case 2: month+; if(month=13) month=1; write_com_date(0x87,0x30+month%10); write_com_date(0x86,0x30+month/10); break;case 3: day+; if(year%4=0)&(month=2) /閏年 二月 29天 if(day=30) day=1; if(year%4!=0)&(month=2) /平年 二月 28天 if(day=29) day=1; if(month=1|month=3|month=5|month=7|month=8|month=10|month=12) /大月31天 if(day=32) day=1; if(month=4|month=6|month=9|month=11) /小月30天 if(day=31) day=1;write_com_date(0x8a,0x30+day%10); write_com_date(0x89,0x30+day/10); break;case 4: week+; if(week=8) week=1; write_com_date(0xcd,0x30+week); break;case 5: hour+; if(hour=24) hour=0; write_com_date(0xc4,0x30+hour%10); write_com_date(0xc3,0x30+hour/10); break;case 6: minute+; if(minute=60) minute=0; write_com_date(0xc7,0x30+minute%10); write_com_date(0xc6,0x30+minute/10); break;case 7: second+; if(second=60) second=0; write_com_date(0xca,0x30+second%10); write_com_date(0xc9,0x30+second/10); break; default:break; if(key3=0) delay(15); if(key3=0) while(!key3);switch(pos_flag)case 1: year-; if(year=0) year=99; write_com_date(0x84,0x30+year%10); write_com_date(0x83,0x30+year/10); break;case 2: month-; if(month=0) month=12; write_com_date(0x87,0x30+month%10); write_com_date(0x86,0x30+month/10); break;case 3: day-; if(year%4=0)&(month=2) /閏年 二月 29天 if(day=0) day=29; if(year%4!=0)&(month=2) /平年 二月 28天 if(day=0) day=28; if(month=1|month=3|month=5|month=7|month=8|month=10|month=12) /大月31天 if(day=0) day=31; if(month=4|month=6|month=9|month=11) /小月30天 if(day=0) day=30; write_com_date(0x8a,0x30+day%10); write_com_date(0x89,0x30+day/10); break;case 4: week-; if(week=0) week=7; write_com_date(0xcd,0x30+week); break;case 5: hour-; if(hour=0) hour=24; write_com_date(0xc4,0x30+hour%10); write_com_date(0xc3,0x30+hour/10); break;case 6: minute-; if(minute=0) minute=59; write_com_date(0xc7,0x30+minute%10); write_com_date(0xc6,0x30+minute/10); break;case 7: second-; if(second=0) second=59; write_com_date(0xca,0x30+second%10); write_com_date(0xc9,0x30+second/10); break; default:break; void main() init_lcd(); delay(2); init_ds1302(); delay(2); Disp_1602(1,0,20 - - week) ; Disp_1602(5,1,: :) ; while(1) if(keyflag=0) display(); keyscan(); #ifndef _lcd_h_#define _lcd_h_#include #define uchar unsigned char#define uint unsigned int sbit lcdrs=P20;sbit lcdrw=P21;sbit lcden=P22;void delay(uchar ms) uchar i; for(;ms0;ms-) for(i=110;i0;i-);void write_com(uchar com) /寫指令 lcden=0; lcdrs=0; lcdrw=0; P0=com; delay(1); lcden=1; delay(1); lcden=0;void write_data(uchar date) /寫數(shù)據(jù) lcden=0; lcdrs=1; lcdrw=0; P0=date; delay(1); lcden=1; delay(1); lcden=0;void write_com_date(uchar add,uchar date)write_com(add);delay(1);write_data(date);void Disp_1602(uchar x,uchar y,uchar *p) while(*p) if(y=0) x|=0x80; else x|=0xc0; write_com(x); delay(5); write_data(*p); x+; p+; void init_lcd() delay(15); write_com(0x38); delay(15); write_com(0x38); delay(5); write_com(0x38); write_com(0x0c

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論