DS1302可調(diào)電子時(shí)鐘1602顯示proteus仿真_第1頁
DS1302可調(diào)電子時(shí)鐘1602顯示proteus仿真_第2頁
DS1302可調(diào)電子時(shí)鐘1602顯示proteus仿真_第3頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、總電路圖:單片機(jī)電路圖:RESPACKSAr - o' w Ur 匚j r- i:d e>XTAL1XTAL2PSENALE eT30IL-P1I 葉Hid31P1 0 pi 1 p-1 2P1.3P1.4P1.5P-16P1.723ridn.1 *4KI,5SCLPRS1< rRSTPQJO/AM) P0.1/ACH P0J2/AD2 PO 3/AD3 PO 4/AD4 P0.5/AD5 PO 6/AD6 PO 7/AD7P2.0/A6PNhASP2.2/A10P2.3ZA11P2.4/A12P2/A13P2JB1A14P2.7/A15P3.0JRXD P3.1 jTKD

2、 PS.aNTO" P3.3/1NFTP34/TQP3.5/T1P3.BAP3.7iRC33383736353435322312JLLJL21602接線圖:AT69C51f> RS £> RWO EASAWY OEAD2D3D4D5D6D7151302接線圖:I/O接單片機(jī)3.5腳按鍵接線圖:程序清單:#include<reg52.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned int sbit ACCO = ACCA0;sbit ACC7 = A

3、CCA7;sbit t=P1AO;/ 進(jìn)入調(diào)時(shí)按鍵sbit jia=P1A1;/ 加一按鍵sbit jian=P1A2;/ 減一按鍵sbit m=P1A3;/ 退出調(diào)時(shí)按鍵sbit BEEP=P2AO;/ 蜂鳴器sbit jtod=P1A4;/ 矩陣按鍵轉(zhuǎn)獨(dú)立按鍵,該腳置 Osbit T_CLK = P1A6; /* 實(shí)時(shí)時(shí)鐘時(shí)鐘線引腳 */sbit T_IO = P3A5; /* 實(shí)時(shí)時(shí)鐘數(shù)據(jù)線引腳 */sbit T_RST = P1A7; /* 實(shí)時(shí)時(shí)鐘復(fù)位線引腳 */sbit E=P2A7;/16O2 使能引腳sbit RW=P2A6;/16O2 讀寫引腳sbit RS=P2A5;/16

4、O2 數(shù)據(jù) /命令選擇引腳codeucharhanzi8=OxO4,OxOf,Ox12,OxOf,OxOa,Ox1f,OxO2,OxO2,OxOf,OxO9,OxOf,OxO9,OxOf,OxO9,Ox13, Ox11,Ox1f,Ox11,Ox11,Ox1f,Ox11,Ox11,Ox1f,OxOO;void v_W13O2(uchar ucAddr, uchar ucDa); uchar uc_R13O2(uchar);uchar dectobcd(uchar bcd);uchar bcdtodec(uchar);void beep();void delay(uchar x)uchar i;w

5、hile(x-)for(i=O;i<11O;i+);/* 名稱 : enable(uchar del)* 功能 : 16O2 命令函數(shù)* 輸入 : 輸入的命令值* 輸出 : 無* void enable(uchar del)RS = 0;RW = 0;P0 = del;E = 1;delay(3);E=0;/* 名稱 : write(uchar del)* 功能 : 1602 寫數(shù)據(jù)函數(shù)* 輸入 : 需要寫入 1602 的數(shù)據(jù)* 輸出 : 無*void write(uchar del)RS = 1;RW = 0;P0 = del;E = 1;delay(3);E=0;/* 名稱: L16

6、02_init()* 功能: 1602 初始化,請參考 1602 的資料* 輸入: 無* 輸出: 無*void L1602_init(void)enable(0x01);enable(0x38);enable(0x06);enable(0x0c);E=0;/裝入自定義字符漢字void writch()uchar i,j;enable(0x40);for(i=0;i<8;i+)for(j=0;j<8;j+)write(hanziij);/* 名稱 : L1602_char(uchar hang,uchar lie,char sign)* 功能 : 改變液晶中某位的值,如果要讓第一行,

7、第五個(gè)字符顯示 "b" L1602_char(1,5,'b')* 輸入 : 行,列,需要輸入 1602 的數(shù)據(jù)* 輸出 : 無*/void L1602_char(uchar hang,uchar lie,char sign)uchar a;if(hang = 1) a = 0x80;if(hang = 2) a = 0xc0; a = a + lie - 1; enable(a); write(sign);/* 名稱 : L1602_string(uchar hang,uchar lie,uchar *p)* 功能 : 改變液晶中某位的值,如果要讓第一行,第

8、五個(gè)字符開場顯示 函數(shù)如下L1602_string(1,5,"ab cd ef;")* 輸入 : 行,列,需要輸入 1602 的數(shù)據(jù)* 輸出 : 無*/void L1602_string(uchar hang,uchar lie,uchar *p)uchar a;if(hang = 1) a = 0x80;if(hang = 2) a = 0xc0;a = a + lie - 1;enable(a);while(1)if(*p = '0') break;write(*p);,調(diào)用該函數(shù)如下"ab cd ef" ,調(diào)用該p+;/時(shí)鐘調(diào)節(jié) /

9、 void timechange()uchar a,num=1;uchar year,mon,day,hour,min,sec; /進(jìn)入調(diào)時(shí)循環(huán)while(num)if(t=0) delay(5);if(t=0) num+; beep(); while(!t); /退出調(diào)時(shí)按鍵 mif(m=0) delay(5);if(m=0) num=0;enable(0x0f); a=uc_R1302(0x81)|0x80; v_W1302(0x8e,0); v_W1302(0x80,a);/調(diào)時(shí)到年以后退出調(diào)時(shí) if(num=7) num=0;/num=1 調(diào)秒 if(num=1) enable(0xc

10、0+12);if(jia=0)delay(5);if(jia=0)/秒加一while(!jia); sec=bcdtodec(uc_R1302(0x81)&0x7f); sec+;if(sec>59)sec=0;L1602_char(2, 12, sec/10%10+48);L1602_char(2, 13, sec%10 + 48);v_W1302(0x80,dectobcd(sec)|0x80); if(jian=0) / 秒減一 delay(5);if(jian=0)while(!jian);sec=bcdtodec(uc_R1302(0x81); sec-;if(sec=

11、-1)sec=59;L1602_char(2, 12, sec/10%10+48);L1602_char(2, 13, sec%10 + 48); v_W1302(0x80,dectobcd(sec)|0x80); if(num=2)/調(diào)分鐘enable(0xc0+9);if(jia=0)delay(5);if(jia=0)min = bcdtodec(uc_R1302(0x83); min+;while(!jia);if(min>59)min=0;L1602_char(2, 9, min / 10 % 10 + 48);L1602_char(2, 10, min % 10 + 48);

12、 v_W1302(0x82,dectobcd(min); if(jian=0) delay(5); if(jian=0) min = bcdtodec(uc_R1302(0x83);min-;while(!jian);if(min=-1)min=59;L1602_char(2, 9, min / 10 % 10 + 48);L1602_char(2, 10, min % 10 + 48);v_W1302(0x82,dectobcd(min);if(num=3)/ 調(diào)小時(shí)enable(0xc0+6);if(jia=0)delay(5);if(jia=0)hour = bcdtodec(uc_R1

13、302(0x85); hour+;while(!jia); if(hour>23) hour=0;L1602_char(2, 6, hour / 10 % 10 + 48);L1602_char(2, 7, hour % 10 + 48); v_W1302(0x84,dectobcd(hour);if(jian=0) delay(5); if(jian=0)while(!jian);hour = bcdtodec(uc_R1302(0x85); hour-;if(hour=-1) hour=23;L1602_char(2, 6, hour / 10 % 10 + 48);L1602_ch

14、ar(2, 7, hour % 10 + 48); v_W1302(0x84,dectobcd(hour);if(num=4)/ 調(diào)日期enable(0x80+13);if(jia=0) delay(5); if(jia=0)hour = bcdtodec(uc_R1302(0x87); day+;while(!jia); if(day>31)day=0;L1602_char(1, 13, day / 10 % 10 + 48);L1602_char(1, 14, day % 10 + 48); v_W1302(0x86,dectobcd(day); if(jian=0) delay(5

15、); if(jian=0) while(!jian); day=bcdtodec(uc_R1302(0x87); day-;if(day=-1) day=31;L1602_char(1,13,day/10%10+48);L1602_char(1,14,day%10+48); v_W1302(0x86,dectobcd(day);if(num=5)/ 調(diào)月份enable(0x80+10);if(jia=0)delay(5);if(jia=0)mon = bcdtodec(uc_R1302(0x89); mon+;while(!jia); if(mon>12) mon=0;L1602_cha

16、r(1, 10, mon / 10 % 10 + 48);L1602_char(1, 11, mon % 10 + 48); v_W1302(0x88,dectobcd(mon);if(jian=0) delay(5); if(jian=0) while(!jian); mon = bcdtodec(uc_R1302(0x89); mon-;if(mon=-1) mon=12;L1602_char(1, 10, mon / 10 % 10 + 48);L1602_char(1, 11, mon % 10 + 48); v_W1302(0x88,dectobcd(mon);if(num=6) /

17、 調(diào)年份enable(0x80+7);if(jia=0)delay(5);if(jia=0)year = bcdtodec(uc_R1302(0x8d);year+;while(!jia);if(year>20)year=0;L1602_char(1, 7, year / 10 % 10 + 48);L1602_char(1, 8, year % 10 + 48); v_W1302(0x8c,dectobcd(year);if(jian=0)delay(5);if(jian=0)while(!jian);year = bcdtodec(uc_R1302(0x8d);year-;if(ye

18、ar=-1)year=20;L1602_char(1, 7, year / 10 % 10 + 48);L1602_char(1, 8, year % 10 + 48); v_W1302(0x8c,dectobcd(year);if(num=0) / 關(guān)閉光標(biāo)閃爍enable(0x0c);v_W1302(0x80,uc_R1302(0x81)&0x7f); /開啟 1302 記時(shí) /* 名稱 : v_RTInputByte * 功能 :往 DS1302 寫入 1Byte 數(shù)據(jù)* 輸入 :ucDa 寫入的數(shù)據(jù)* 輸出 :無*void v_RTInputByte(uchar ucDa)uc

19、har i;ACC = ucDa;T_RST = 1;for(i=8; i>0; i-)T_IO = ACC0;T_CLK = 1;T_CLK = 0;ACC = ACC >> 1;/* 名稱 : uc_RTOutputByte * 功能 : 從 DS1302 讀取 1Byte 數(shù)據(jù)* 輸入 : 無* 返回值 : ACC* uchar uc_RTOutputByte(void)uchar i;T_RST = 1; for(i=8; i>0; i-)ACC = ACC >>1;ACC7 = T_IO;T_CLK = 1;T_CLK = 0; return(AC

20、C);* * 名稱 : v_W1302(uchar ucAddr, uchar ucDa)* 功能 : 往 DS1302 寫入數(shù)據(jù)* 輸入 : ucAddr: DS1302 地址 , ucDa: 要寫的數(shù)據(jù)* 返回值 : 無*void v_W1302(uchar ucAddr, uchar ucDa)T_RST = 0;T_CLK = 0;T_RST = 1; v_RTInputByte(ucAddr); / 寫地址_nop_();_nop_(); v_RTInputByte(ucDa); / 寫 1Byte 數(shù)據(jù)T_CLK = 1;T_RST = 0; /* 名稱: uc_R1302(uch

21、ar ucAddr)* 功能: 讀取 DS1302 某地址的數(shù)據(jù)* 輸入 : ucAddr: DS1302 地址* 返回值 : ucDa : 讀取的數(shù)據(jù) */ uchar uc_R1302(uchar ucAddr)uchar ucDa;T_RST = 0;T_CLK = 0;T_RST = 1; v_RTInputByte(ucAddr);/ 寫地址,命令_nop_();_nop_();ucDa = uc_RTOutputByte(); / 讀 1Byte 數(shù)據(jù) T_CLK = 1;T_RST = 0; return(ucDa);/* 名稱 : bcdtodec(uchar bcd)為數(shù)值*

22、 功 能 : BCD 碼 轉(zhuǎn) 換 為 DEC 碼 (DEC 碼 為 十 進(jìn) 制 數(shù) 據(jù) : BCD:0x11->DEC 11(HEX:0x0b)* 輸入 : bcd 碼* 輸出 : dec 碼*/ uchar bcdtodec(uchar bcd)uchar data1; data1=(bcd&0x70)>>4)*10+(bcd&0x0f);return data1;uchar dectobcd(uchar dec)uchar dat; dat=(dec/10)<<4|(dec%10);return dat;/* 名稱 : Write_DS1302

23、Init()* 功能 : 往 DS1302 中寫入數(shù)據(jù)。最開場顯示的數(shù)據(jù)就是在這里設(shè)置的。* 輸入 : 無* 輸出 : 無*/void Write_DS1302Init(void)v_W1302(0x8e,0);v_W1302(0x80,0x00); /寫入秒 v_W1302(0x8e,0);v_W1302(0x82,0x00); /寫入分 v_W1302(0x8e,0);v_W1302(0x84,0x00); /寫入小時(shí) v_W1302(0x8e,0);v_W1302(0x86,0x00); /寫入日 v_W1302(0x8e,0);v_W1302(0x88,0x00); /寫入月 v_W1

24、302(0x8e,0);v_W1302(0x8a,0x00); /寫入星期 v_W1302(0x8e,0);v_W1302(0x8c,0x00); /寫入年 v_W1302(0x90,0xa6);/ 單二極管, 2K 電阻充電/* 名稱 : Run_DS1302(void)* 功能 : 讀出 DS1302 中的數(shù)據(jù),并在液晶 1602 上進(jìn)展顯示* 輸入 : 無* 輸出 : 無*/void Run_DS1302(void)uchar sec, min, hour, day, month, year; v_W1302(0x8f, 0);sec = bcdtodec(uc_R1302(0x81);

25、/讀出 DS1302 中的秒 v_W1302(0x8f, 0);min = bcdtodec(uc_R1302(0x83);/讀出 DS1302 中的分v_W1302(0x8f, 0);hour = bcdtodec(uc_R1302(0x85); / 讀出 DS1302 中的小時(shí) v_W1302(0x8f, 0);day = bcdtodec(uc_R1302(0x87);/讀出 DS1302 中的日v_W1302(0x8f, 0);month = bcdtodec(uc_R1302(0x89); /讀出 DS1302 中的月 v_W1302(0x8f, 0);year = bcdtodec(uc_R1302(0x8d);/讀出 DS1302 中的年L1602_char(2, 6, hour / 10 % 10 + 48); / 字符 ASIIC 碼顯示, 0 的 ASIIC=48 L1602_char(2, 7

溫馨提示

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

最新文檔

評論

0/150

提交評論