1602液晶顯示DS1302實時時鐘程序_第1頁
1602液晶顯示DS1302實時時鐘程序_第2頁
1602液晶顯示DS1302實時時鐘程序_第3頁
1602液晶顯示DS1302實時時鐘程序_第4頁
1602液晶顯示DS1302實時時鐘程序_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、#include #include unsigned unsigned 期月參變數(shù) unsigned unsigned 區(qū) unsigned unsigned unsignedcharcharchar charcharcharcharcodecodedatadatadatadatadatadisweek = z,SUN,MON, TUE, WED, THU, FRI, SAT;para_month 13 = 0, 0, 3, 3, 6, 1, 4, 6, 2, 5, 0, 3, 5; 星dis_buf116; dis_buf216;/led上排顯示緩沖區(qū)/led下排顯示緩沖year, mont

2、h, date, week; /年、月、日、星期 armhour, armmin, armsec;/鬧鐘時、分、秒 hour, min, sec, seclOO; /時、分、秒、白分之一秒unsigned char data flag, vkey, skey;/設置狀態(tài)計數(shù)標志、按鍵先前值、按鍵bit lcd_busy ();void lcd_wcmd(char emd); void lcdwdat(char dat); void lcd_pos(char pos): void lcd_init(): void pro_timedate();void pro_display(); void p

3、rokey();void time_alarm(); unsigned char scan_key(): unsigned char week_proc(); bit leap_year ();void lcd_sef_chr();測試LCD忙碌狀態(tài)程序寫入指令到LCD程序寫入數(shù)據(jù)到LCD程序/LCD數(shù)據(jù)指針位置程序/LCD初始化設定程序時間日期處理程序/顯示處理程序/按鍵處理程序/定時報警功能(鬧鐘)/按鍵掃描程序星期自動計算與顯示函數(shù)判斷是否為閏年/LCD自定義字符程序sbitrs = P20;/LCD數(shù)據(jù)/命令選擇端(H/L)sbitrw=P2l;/LCD讀/寫選擇端(H/L)sbite

4、p=P22;/LCD使能控制sbitPRE=P16/調整鍵(k3)sbitSET=pr7;/調整鍵(k4)sbitSPK=P37;voiddelayms(unsigned char ms);延時程序當前值 bit alarm;/標識是否啟用鬧鐘,i-啟用,0-關閉void update_disbuf(unsigned char tl, unsigned char t2, unsigned char dis_h, unsigned char dis_m, unsigned char dis_s);更新顯示緩沖區(qū)函 數(shù)/延時程序void delay(unsigned char ms)while(m

5、s一一)/執(zhí)行一條_nop_()指令 unsigned char i; for(i = 0; i 250; i+) _nop_();為一個機器周期_nop_();_nop_(); _nop_();測試LCD忙碌狀態(tài)bit lcd_busy ()bit result;rs = 0;rw = 1;ep = 1;_nop_();_nop_();_nop_();_nop_();result =(bit) (P0&0 x80); /LCD 的 DOD7 中,D7=l 為忙碌,D7二0 為空 閑ep = 0;return result;寫入指令到LCDvoid lcd_wcmd(char cmd)whil

6、e (lcd.busyO); 當 lcd_busy 為 1 時,再次檢測 LCD 忙碌狀 態(tài),lcd-busy為0時,開始寫指令rs = 0;rw = 0;ep = 0;_nop_();_nop_();P0 = cmd;_nop_();_nop_();_nop_();_nop_();ep = 1;_nop_();_nop_();_nop_();_nop_();ep = 0;寫入數(shù)據(jù)到LCDvoid lcdwdat(char dat)while (lcd_busy(); 當 lcd.busy 為 1 時,再次檢測 LCD 忙碌狀態(tài),lcd-busy為0時,開始寫數(shù)據(jù)rs = 1;rw = 0;e

7、p = 0;P0 = dat;_nop_();_nop_();_nop_();_nop_();ep 二 1;_nop_();_nop_();_nop_();_nop_();ep = 0;/LCD數(shù)據(jù)指針位置程序void lcd_pos(char pos)lcd.wcmd (pos i 0 x80) ; /數(shù)據(jù)指針二80+地址碼(00H、27H, 40H、67H)設定二個自定義字符,(注意:LCD1602中自定義字符的地址為0 x000 x07,即 可定義8個字符)這里我們設定把一個自定義字符放在0 x00位置(000),另一個放在0 x01位子(001)void lcd_sef_chr()宙一

8、個自定義字符lcd_wcmd(0 x40) ; /01 000 000 第1行地址(D7D6為地址設定命令 形式 D5D4D3為字符存放位置(0-7), D2D1D0為字符行地址(0-7)lcd_wdat(Oxlf) ; /“XXX 11111 第 1 行數(shù)據(jù)(D7D6D5 為 XXX,表示為任意數(shù)(一般用000), lcd_wcmd(0 x41); lcd_wdat(0 x11); lcd_wcmd(0 x42); lcd_wdat(0 x15); lcd_wcmd(0 x43); lcd_wdat(0 x11); lcd_wcmd(0 x44); lcd_wdat(Oxlf); lcd_w

9、cmd(0 x45); lcd_wdat(0 x0a); lcd_wcmd(0 x46); lcd_wdat(Oxlf); lcd_wcmd(0 x47); lcd_wdat(0 x00);D4D3D2D1D0為字符行數(shù)據(jù)(1-點殼,0-熄滅)/廠01 000 001/XXX 1000101 000 010/“XXX 10101/01 000 011/“XXX 10001/01 000 100/XXX 1111101 000 101/XXX 01010/01 000 110/XXX 1111101 000 111/XXX 00000第2行地址第2行數(shù)據(jù)第3行地址第3行數(shù)據(jù)第4行地址第4行數(shù)據(jù)第

10、5行地址第5行數(shù)據(jù)第6行地址第6行數(shù)據(jù)第7行地址第7行數(shù)據(jù)第8行地址第8行數(shù)據(jù)第二個自定義字符lcd_wcmd(0 x48) lcd_wdat(0 x01) lcd_wcmd(0 x49) lcd_wdat(Oxlb) lcd_wcmd(0 x4a) lcd_wdat(Oxld) lcd_wcmd(0 x4b) lcd.wdat(0 x19) lcd_wcmd(0 x4c) lcd_wdat(Oxld) lcd_wcmd(0 x4d) lcd_wdat(Oxlb) lcd_wcmd(0 x4e) lcd_wdat(0 x01) lcd_wcmd(0 x4f) lcd_wdat(0 x00)/0

11、1 001 000/“XXX 0000101 001 001/“XXX 11011/01 001 010/XXX 11101/roi ooi oil”/XXX 11001/01 001 100/XXX 11101/01 001 101/XXX 11011/01 001 110/XXX 0000101 001 111/,ZXXX 000001122334455667788 第笫笫笫笫笫笫笫笫笫笫笫第第笫笫行行行行行行行行行行行行行行行行/LCD初始化設定 void lcd_init ()lcd_wcmd(0 x38);設置LCD為16X2顯示,3X7點陣,八位數(shù)據(jù)借/LCD開顯示及光標設置(光標

12、不閃爍,不顯示/LCD顯示光標移動設置(光標地址指針加1,整清除LCD的顯示內容delay(l): lcd_wcmd(OxOc);delay(l); lcd_wcmd(0 x06);屏顯示不帝動)delay(l); lcd_wcmd(0 x01); delay(l); 閏年的計算bit leap_year ()bit leap;if (year%4=0&year%100!=0) i year%400=0) / 閏年的條件 leap二1;elseleap=O;return leap;星期的自動運算和處理unsigned char week_proc() unsigned char num_lea

13、p;unsigned char c;num_leap=year/4-year/100+year/400;/自 00 年起到 year 所經(jīng)歷的閏年 數(shù)if ( leap_year()& month=2 )/既是閏年且是 1 月和 2 月C 二5;elseC二6;week= (year+para_month Lmonth +date+num_leap+c) %7 ;/il算對應的星 期return week;更新顯示緩沖區(qū)void update_disbuf(unsigned char tl, unsigned char t2, unsigned char dis_h, unsigned cha

14、r dis_m, unsigned char dis_s)dis_bufl0=tl;dis_bufll=0 x20; dis_bufl2=50; dis_bufl3=48;/空格/r 2,/r odis dis dis dis dis dis dis dis dis dis dis disbuf14=year/10+48;bufl5=year%10+48;buf16二0 x2d;bufl二month/10+48;bufl81=month%10+48;bufl9=0 x2d;bufl10二date/10+48;buflll=date%10+48;bufl12二0 x20;dis_buf20=t2

15、0;dis_buf2l=t2l;dis_buf22=t22;dis_buf23=t23;dis_buf24=t24;dis_buf25=t25; dis_buf26=0 x20;if (alarm)dis_buf27=0 x01;二個自定義字符)elsedis_buf27=0 x20; 致dis_buf28=dis_h/10+48; dis_buf29=dis_h%10+48; dis_buf210Z=0 x3a;dis_buf2ll=dis_m/10+48; dis_buf212=dis_m%10+48; dis_buf213=0 x3a;dis_buf214二d i s_s/10+4 8;

16、 dis_buf215=dis_s%10+48;/空格/alarml,顯示鬧鐘啟用標致(第/alarm=0,不顯示鬧鐘啟用標/:,bufl13=dis_week4*weekJ; buf114=dis_week4*week+l: bufl15=dis_week4*week+2;/時間和日期處理程序 void pro_timedate() sec+;辻(sec 59) sec = 0;min+;if(min59)min二0;hour+;辻(hour23)hour二0;date+;if(month=l month=3 month=5; month=7 month=8 month=10 month=

17、date二1:month+;辻(date31)/大月31天if(month=4month=6 month二二9 month=ll) if (date30)小月30天date二1;month+;date二1:month+;date二1;month+;if (month=2)if ( leap-year ()閏年的條件辻(date29) 閏年2月為29天 elseif (date28) /平年2月為28天 if (month12) month=l;year+; 辻(year99) yearO: week_proc (); if (sec=armsec hour=armhour)& min=armm

18、in &if (alarm) TRI二1; 時間到,啟動Timerl/鬧鐘啟用時,報警顯示處理程序 void pro_display() unsigned char i:lcdpos(0 x00);for (i=0;i=15;i+)lcdwdat(dis_buf1 Li);lcdpos(0 x40);for (i=0;i=15;i+)lcd_wdat (dis_buf2i) ;/TimerO中斷處理程序,秒的產(chǎn)生void timerO() interrupt 1THO二Oxdc;/TimerO 置 10ms 定時初值dc00H(216=65536D, dcOOH二56320D)TLO二0 x0

19、0;定時時間= (65536-56320)*(1/11. 0592)*12二10ms (f0=ll. 0592Mhz)secl00+;if(secl00 = 100)/I 秒時間(10010ms二 1000ms二Is)seclOO = 0;Pro_timedate (); 調用時間和日期處理程序if(sec&OxOl)/willar”閃一秒,停一秒update_disbuf(0 x00, 、hour, min, sec);0表示顯示00位置的自定義字符elseupdate_disbuf(0 x00, willar, hour, min, sec);pro.displayQ ;調用顯示處理函數(shù)/

20、按鍵掃描程序 unsigned char scan_key() skey二0 x00;給變量vkey置初值skey|二PRE;讀取PRE鍵的狀態(tài) skey=skeyl;PRE鍵的狀態(tài)存于skey的Bl位 skey|二SET;讀取SET鍵的狀態(tài),并存于skey的B0位 return skey;/0 x0/將/返回skey的鍵值(即PRE, SET的狀態(tài))case 1: lcd_pos(0 x49);break;光標置小時報警設置位置case 2: lcd_pos(0 x4c);break;光標置分鐘報警設置位置case 3: lcd_pos(0 x4f):break;光標置秒時報警設置位置cas

21、e 4: update_disbuf (0 x50, /ztime: z,, hour, min, sec):pro_display();lcd_pos(0 x05):break;光標置年調整位置case 5: lcd_pos(0 x08):break;光標置月調整位置case 6: lcd_pos(0 x0b);break;光標置日調整位置cas7: lcd_pos(0 x49);break;光標置時調整位置cas8: lcd_pos(0 x4c);break;光標置分調整位置cas9: lcd_pos(0 x4f):break;光標置秒調整位置default:break;(skey二二0

22、x02)/SET鍵按下/轉設置按鍵處理程序lcd_wcmd(OxOc);置LCD開顯示及晃標不閃爍,不顯示lcd_wcmd(0 x01):除LCD的顯示內容IE=0 x8f;/CPU開中斷,INTO, IXT1,開中斷TRO=1;/Timer0 啟動/主程序,初始化及初值設定void main()lcd_init ();LCDlcd_sef_chr();號hour二0;min二0;sec=0;顯示armhour=0;armmin=0;armsec=0;初值year= 5; month=l;date=l;期顯示week_proc ();alarm=l;用鬧鐘IE = 0 x8f;斷,INTO,

23、INTI, TimerO, Timer 1 開中斷IP = 0 x04;斷最高優(yōu)先級ITO=O;IT1=O;INTO, INT1設置為電平觸發(fā)方式(注意,TMOD = 0 x11;匸作于模式1, 16位定時方式THO = Oxdc;TLO = 0 x00;初值TH1 = Oxff;TLl = 0 x00;值TRO = 1;設清/初始化寫入自定義字符開機時的時,分,秒開機時的時,分,秒報警開機時的年,月,日,星初始開機,啟/CPU開中設置INTO為中外部觸發(fā)不要選邊沿方式,易誤動)/TimerO, Timer 1 /TimerO 置 10ms 定時 /Timer 1 置初/TimerO 啟TR1

24、 = 0;while;設置按鍵處理程序void pro_key()switch (flag)case 0: alarm=! alarm;/啟用或關閉鬧鐘(alarm=l:啟用,alarm=0:關閉)update_disbuf (0 x50, alarm:armhour, armmin, ar msec) ; /更新顯示數(shù)據(jù)pro_display();/調用顯示處理lcd_pos(0 x47);break;/光標回到原調整位置case 1:armhour+;if (armhour23) armhour=0;update_disbuf (0 x50, alarm:,z, armhour, armm

25、in, ar msec) : /更新顯示數(shù)據(jù)pro.displayO :/調用顯示處理lcd_pos(0 x49) :break;/光標回到原調整位置case 2:armmin+;if (armmin59) armminO;update_disbuf (0 x50, alarm:armhour, armmin, ar msec);pro.display ():lcd_pos(0 x4c):break;case 3:armsec+;if (armsec59) armsecO:update_disbuf (0 x50, alarm:,z, armhour, armmin, ar msec);pro

26、_display();lcd_pos(0 x4f);break;case 4:year+;辻 (year 99) year= 0;week_proc ();/星期自動運算update_disbuf(0 x50, time:, hour, min, sec);pro_display();pro_display();lcd_pos(0 x4c);break; case 9:sec+;辻(sec59) sec=0; update_disbuf(0 x50, time: 、hour, min, sec);pro_display():lcd_pos(0 x4f);break;default:break

27、;/Timerl中斷處理程序,產(chǎn)生報警的聲音void timerl() interrupt 3TH1二Oxff;TLl二0 x00;SPK二SPK;外部中斷INTI中斷處理程序,停止報警聲音void inti () interrupt 2if (TRI)TR1=O;/DS1302時鐘程序iiinclude #include #define uchar unsigned char#define uint unsigned int少占魚制作 河北正定歡迎您長沙航空職業(yè)技術學院/2010 年 QQ:4U656434/版權所有:www. 51hei. comtidefine LCD1602_RS P2

28、_5 定義引腳define LCD1602_RW P2_6ttdefine LCD1602_EP2_7itdefine LCD1602.I0 PO#define Busy0 x80 /用于檢測LCD1602狀態(tài)字中的Busy標識const uchar num二 3456789+;uchar code a二 E N v;void WriteData(uchar DAT);void WriteCommand(uchar command, BuysC):uchar ReadData(void):void Readbusy(void);void LCD1602_Init(void):void Disp

29、layOneChar(uchar X, uchar Y, uchar DData); void Displaystring(uchar X, uchar Y, uchar *DData): void Delay5Ms(void);void Delay400Ms(void);void delayms(uint);void delays(uint m);void delayus(uchar x);sbit DS1302_CLK 二P2”0; P0;sb辻 DS1302.I0 二P2l;/ Pl;sbit DS1302_RST 二P22; P2;uchar shuju;unsigned char t

30、ime = Oxll, 0 x03, 0 x28, 0 x01, 0 x12, 0 x39, 0 x00;/ 初始化時 間年月日星期時分秒uchar Display_Buffer12二12:25:00 ;/時、分、秒 的格式uchar riq訂 12 = 11-03-28;/年、月、日的格式uchar xingqi 二week;/星期unsigned char second, minute, hour, week, day, month,year;/It I ItWw gwW gwI fill /I - V AW W W *AW W W *AW W W *AW W wf I I I I I I

31、 I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I void delays(uint m)uint i, j;for (i二0;im;i+)for(j=0;j1000;j+);void Delay(void)unsigned char i; unsigned int j;for(i=0;i0;j); I I I I I I I I I I I I I I I I I I I I I I I I I

32、I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I 1 I I 函數(shù)功能:向DS1302送一字節(jié)數(shù)據(jù)子程序入口參數(shù):出口參數(shù): I| 1 | a *!* a 1 | a | i A i | a i | *0;i) 前面在read_dsl302()函數(shù)里已經(jīng)把CLK清0 了DS1302_CLK=0;/這里再清0次,看著清楚。呵呵_nop_();DS1302_I0二(bit) (BYTE&OxOl) ;/取出低位數(shù)據(jù)給數(shù)據(jù)引腳_nop_();_nop_()

33、;DS1302_CLK=l;/置1,時鐘上升沿,引腳上的數(shù)據(jù)傳入1302寄存器中_nop_();_nop_();BYTE=1;/因為這里移位的BYTE不是最后要的結果,雖然最后循環(huán)完會多移一位,但沒影響。_nop_();循環(huán)最后一次后,時鐘狀態(tài)是高電平。_nop_();_nop_(); I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I 1 I I 函數(shù)

34、功能:讀DS1302 一個字節(jié)子程序,讀數(shù)據(jù)是下降沿讀入口參數(shù):出口參數(shù): | j | 4 1 4 unsigned char OutputByte(void)unsigned char i;unsigned char ucdat=0;for(i=8;i0;i) 前面時鐘狀態(tài)是高電平。ucdat=l; 移位注意,移位不能放在循環(huán)語句末,否則最后循環(huán)完會多 移一位。得到結果就錯了。DS1302_I0二1;/單片機端置高防止破壞1302傳來的數(shù)據(jù),開始接收1302端 的高低數(shù)據(jù)對數(shù)據(jù)線的改變。DS1302_CLK=0;緊接著時鐘變低,下降沿數(shù)據(jù)輸出。if (DS1302_IO)/數(shù)據(jù)已經(jīng)輸出,判斷

35、是1還是0.ucdat 1=0 x80;/如果引腳是高則此位保存1。低不保存,右移的時候自然補0 To_nop_();DS1302_CLK=l;/讀完一位數(shù)據(jù),再置高時鐘,準備讀下一個。_nop_() ;/延時一下。讀完數(shù)據(jù)還是把時鐘清0,下次好直接用。DS1302_CLK=0;/讀完數(shù)據(jù)還是把時鐘清0,下次好直接用。_nop_();_nop_();DS1302_RST二0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();DS1302_CLK二0;_nop_();_nop_();_nop_();_nop_();DS1302_RST二0;_nop_

36、();_nop_();_nop_();_nop_();_nop_();return(ucdat); I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I 函數(shù)功能:向DS1302某地址寫一字節(jié)數(shù)據(jù)子程序 入 口參數(shù):addr, TDat岀口參數(shù): I I I I I I I I I I I I I I I I I I I I I I I I I

37、 I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I void write_dsl302(unsigned char addr, unsigned char TDat)DS1302_RST二0;_nop_();_nop_();DS1302_CLK二0;_nop_();_nop_();DS1302_RST二1;_nop_();_nop_();_nop_();_nop_();InputByte (addr) ;/先寫地址_nop_();_nop

38、_();InputByte (TDat) ;/再寫數(shù)據(jù)DS1302_I0二1;/單片機端置高防止破壞1302傳來的數(shù)據(jù),開始接收1302端的 高低數(shù)據(jù)對數(shù)據(jù)線的改變。DS1302_RST二0;delayus (10);DS1302_CLK二0;delayus(10); I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I j | j j 4 | 1 j 函數(shù)功能:讀DS 1302

39、地址子程序入口參數(shù):add岀 口參數(shù):timedata 1 | 1 | | | 1 1 unsigned char read_dsl302(unsigned char addr)unsigned char timedata;DS1302_RST二0;_nop_();DS1302_CLK二0;_nop_();DS1302_RST二1;InputByte (addr) ;/先寫入讀命令timedata=OutputByte () ;/再讀出數(shù)據(jù)DS1302_I0二1;/單片機端置高防止破壞1302傳來的數(shù)據(jù),開始接收1302端的 高低數(shù)據(jù)對數(shù)據(jù)線的改變。DS1302_RST二0;delayus (

40、10);DS1302_CLK二0;delayus (10);return(t imedata); * I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I j | j j 4 | 1 j 函數(shù)功能:初始化DS1302子程序入口參數(shù):time(全局變量)出口參數(shù): I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I

41、 I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I JI I I I I I 1 I void initial_dsl302()DS1302_I0二1;/單片機端置高防止破壞1302傳來的數(shù)據(jù),開始接收1302端的 高低數(shù)據(jù)對數(shù)據(jù)線的改變。DS1302_RST二0;delayms(100);DS1302_CLK二0;delayms(100);write_dsl302(0 x8e, 0 x00) ;/寫保護寄存器,在對時鐘或RAM寫前WP 定要為0 TOC o 1-5 h z write_d

42、sl302(0 x8c, time0Z);/年write_dsl302 (0 x8&timel);/月write_dsl302(0 x86, time2) ;/日write_dsl302 (0 x8A, time3j);星期write_dsl302 (0 x84, time4);時write_dsl302(0 x82, time5);/分write_dsl302(0 x80, time61) :/秒write_dsl302 (0 x8e, 0 x80) ;/寫保護寄存器 I 1 I I I I I I I 1 I I I I I I I 1 I I I I I I I 1 I I I I I

43、I I 1 I I I I I I I 1 I I I I I I I 1 I I I I I I I 1 I I I I I I I 1 I I | j j |j 4 | 函數(shù)功能:讀DS1302時間子程序入口參數(shù):岀 n 參數(shù):全局變量(second, minute, hour, week, day, month, year) I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I I

44、 I I j | j j 4 | void read_time()second二read_ds 1302 (0 x81) ;/秒寄存器_nop_();minute=read_dsl302 (0 x83) ;/讀分_nop_();hour=read_ds 1302 (0 x85) ;/讀時_nop_();week=read_dsl302(0 x8B) :/讀星期_nop_(); TOC o 1-5 h z day=read_ds1302(0 x87);/日_nop_();month=read_ds1302(0 x89);/月_nop_();year=read_dsl302(0 x8d);/年_n

45、op_();void main(void)uchar shuju;delayms(2);Delay400Ms(); /啟動等待,等LCM講入工作狀態(tài) delays (1);LCD1602_Init () ; /LCM 初始化DelayoMsO ; /延時片刻(可不要)DS1302_RST二0;delayms(1000);DS1302_CLK二0;delayms(1000);shuju=ReadData();Displaystring(2, 0, a):Delay () ; Delay ();delayms(2000);Displaystring (3,0,riqi);Displaystring

46、(12, 0, xingqi);delayms(4000);/ initial_dsl302() :/初始化 DS1302delayms(1200);while (1)read_time () ; /讀取時間Disp 1 ay_Buffer0 =hour/16+J O ;/存儲下時的高位進數(shù)組Disp 1 ay_Buffer 1 =hour%l6+J O ;/存儲下時的低位進數(shù)組Display_Buf f er 3j =minute/16+,O ;/注意+ O后存儲的是 ASCI Io 用于下 面液晶顯示。Display_Buffer 4j=minute%16+,O ;/注意+ O后存儲的是

47、ASCI Io 用于下 面液晶顯示。DisplayBuffer6=second/16+, O;Display_Buffer7=second%16+, O;riqi 0Z=year/16+,0?;riqi Lll=year%16+,O;riqi 3二month/16+ O;riqi 4=month%16+, O;riqi 16Z=day/16+,O;riqi7二day%16+ O;Displaystring (3, 0, riqi);delayms (1);DisplayOneChar (14, 1, week+J O);Displaystring(3, 1, Display_Buffer);/寫數(shù)據(jù)void WriteData(uchar DAT)Readbusy ();LCD1602_RS = 1;LCD1602.RW = 0;LCD1602_I0 = DAT;LCD1602_E = 0; 若晶振速度太高可以在這后加小的延時LCD1602_E = 0; 延時LCD1602_E = 1;LCD1602_E二1;LCD1602_E二0;/寫指令void WriteCommand (uchar command, BuysC) /BuysC 為 0 時忽略忙檢測LCD1602_IO=0 x00;if (B

溫馨提示

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

評論

0/150

提交評論