AT89C51數(shù)字電子鐘(已測(cè)試通過(guò))_第1頁(yè)
AT89C51數(shù)字電子鐘(已測(cè)試通過(guò))_第2頁(yè)
AT89C51數(shù)字電子鐘(已測(cè)試通過(guò))_第3頁(yè)
AT89C51數(shù)字電子鐘(已測(cè)試通過(guò))_第4頁(yè)
AT89C51數(shù)字電子鐘(已測(cè)試通過(guò))_第5頁(yè)
已閱讀5頁(yè),還剩3頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、.:.;AT89C51數(shù)字電子鐘(已測(cè)試經(jīng)過(guò))該數(shù)字鐘可實(shí)現(xiàn)精度誤差 1S/天的變精度時(shí)鐘,并能方便地調(diào)理時(shí)鐘、時(shí)間、定時(shí)時(shí)間等. led1 bit p1.0 ;LED定義 led2 bit p1.1 led3 bit p1.2 led4 bit p1.3 led5 bit p1.4 led6 bit p1.5 led7 bit p1.6 led8 bit p1.7 s1 bit p0.0 ;數(shù)碼管位數(shù)定義 s2 bit p0.1 s3 bit p0.2 s4 bit p0.3 s5 bit p0.4 s6 bit p0.5 s7 bit p0.6 s8 bit p0.7 led_data e

2、qu p2;數(shù)碼管定義 key1 bit p3.5 ;按鍵定義 key2 bit p3.6 key3 bit p3.7 key equ 56h time_h equ 57h ;定時(shí)初值高位 time_l equ 58h ;低位 t_h equ 60h;時(shí)分秒對(duì)應(yīng)的地址 t_s equ 61h t_m equ 62h time equ 63h ;時(shí)鐘計(jì)數(shù)單元 timer_h equ 64h ;定時(shí)時(shí)單元 timer_m equ 65h;定時(shí)分單元 timset bit 00h ;設(shè)置時(shí)間標(biāo)志 disstart equ 70h ;顯示單元首地址 int_data equ 45h ;中斷數(shù)據(jù)地址 c

3、ount_data equ 44h ;計(jì)數(shù)單元地址 timer_data equ 43h ;定時(shí)地址 ; * 以上為預(yù)定義部分 ; * 以下程序開(kāi)場(chǎng) org 00h;程序開(kāi)場(chǎng)地址 jmp main ;跳轉(zhuǎn)到代碼開(kāi)場(chǎng)處 org 1bh;定時(shí)器 T1 中斷效力程序入口 jmp tim1 org 030h ;主程序開(kāi)場(chǎng)的地址 30H main:MOV sp,#30h;首先定義堆棧 lcall rest ;初始化 lcall pro_set;設(shè)置定時(shí)器開(kāi)場(chǎng)任務(wù) lpp:lcall time_set ;接受用戶設(shè)置時(shí)間 lcall timer;時(shí)鐘處置 lcall time_pro ;時(shí)間格式處置,碼型

4、變化等 lcall time_display ;顯示 jmp lpp ; * 初始化程序 * rest:MOV a,#00h ;累加器清零 MOV b,#00h MOV p0,#0 ;數(shù)碼控制止顯示 MOV t_h,#0 ;時(shí)單元 MOV t_m,#0 ;分單元 MOV t_s,#0 ;秒單元 MOV time,#00h;計(jì)數(shù)溢出次數(shù),溢出20次為一秒 clr timset ;定時(shí)設(shè)置標(biāo)志位,0-添加 1 -減少 MOV timer_h,#12;定時(shí)器時(shí)單元,設(shè)置定時(shí)為 12:00 MOV timer_m,#00h ;定時(shí)器分單元 MOV p2,#255;制止顯示數(shù)碼管 clr beep ;制

5、止蜂鳴器 ret;前往 ; * 定時(shí)器 T1 中斷效力程序 * tim1:clr tr1;首先停頓定時(shí)操作 MOV th1,time_h ; MOV tl1,time_l inc time ;自增 MOV a,time ;獲得溢出次數(shù) cjne a,#20,retend ;假設(shè)滿20此表示到 1 秒 cpl p1.0 ;取反p1.0,p1.1指示秒鐘 cpl p1.1 MOV time,#00h;重新開(kāi)場(chǎng)等待1秒 inc t_s;秒單元加1 retend:setb tr1 ;定時(shí)開(kāi)場(chǎng) reti ;中斷前往 ; * 設(shè)置定時(shí)器初始化,定時(shí)時(shí)間為 50ms * pro_set:MOV dptr,#

6、0000h ;數(shù)據(jù)指針清零 MOV tmod,#10h;設(shè)置定時(shí)器1任務(wù)在方式1 MOV time_h,#3ch ;計(jì)算定時(shí)50ms需求的初值 MOV th1,time_h ;保管高位 MOV time_l,#0c1h ;低位 MOV tl1,time_l ;保管低位 setb ea;總的中斷允許 setb et1 ;定時(shí)器1允許 setb tr1 ;定時(shí)器1開(kāi)場(chǎng)運(yùn)轉(zhuǎn) ret ;前往 ; * timer 程序主要完成數(shù)據(jù)的處置 * timer:MOV a,t_s ;獲得秒單元數(shù)據(jù) cjne a,#60,tend ;秒不到60前往 MOV t_s,#00h ;去除秒單元 inc t_m ;為分單

7、元加1 MOV a,t_m ;獲得分單元數(shù)據(jù) cjne a,#60,tend ;分不等于60前往 MOV t_m,#00h;分單元清零 setb beep ;整點(diǎn)短鳴提示 lcall delay ;鳴叫延時(shí) clr beep;停頓蜂鳴器 inc t_h ;同時(shí)為時(shí)單元加1 MOV a,t_h ;獲得時(shí)單元數(shù)據(jù) cjne a,#24,timetest ;假設(shè)不等于24,查看定時(shí) MOV t_h,#00h;時(shí)單元清零 jmp tend ;前往 timetest:cjne a,timer_h,tend;不等于定時(shí)的時(shí)單元,前往 MOV a,t_m;獲得定時(shí)的分單元 cjne a,timer_m,te

8、nd;當(dāng)前分不等于定時(shí)的分單元,前往 setb beep ;定時(shí)到,蜂鳴提示 lcall delay clr beep lcall delay setb beep lcall delay clr beep ;延續(xù)發(fā)出短音提示 tend:ret;前往 ; * time_display 程序主要為顯示時(shí)間值用 * time_display: MOV r0,#disstart ;獲得顯示單元首地址 MOV r1,#01h;從第一個(gè)數(shù)碼管開(kāi)場(chǎng) MOV r2,#06h;共6個(gè)數(shù)碼管 dislp:MOV led_data,r0 ;獲得當(dāng)前單元數(shù)據(jù) inc r0 ;指向下一個(gè)單元 MOV p0,r1 ;數(shù)碼

9、顯示 MOV a,r1 ;為下一個(gè)數(shù)預(yù)備 rl a ;下一個(gè)單元 MOV r1,a ;保管 lcall delay5ms ;為了保證數(shù)碼管亮度, ;但要防止閃爍,延時(shí)5ms djnz r2,dislp;反復(fù)顯示,直到全部數(shù)據(jù)刷新過(guò) ret ;前往 ; * time_pro 時(shí)間處置,主要為 bcd碼轉(zhuǎn)換,查表 * time_pro:lcall bcd ;BCD碼轉(zhuǎn)換 MOV r0,#disstart;獲得顯示單元首地址 MOV r2,#06h ;需求轉(zhuǎn)換的個(gè)數(shù) prlp:MOV a,r0 ;獲得當(dāng)前需求轉(zhuǎn)換的數(shù)據(jù) MOV dptr,#tab_nu;獲得表頭 MOVc a,a+dptr;獲得轉(zhuǎn)換

10、后的數(shù)據(jù) MOV r0,a ;存回去 inc r0 ;指向下一個(gè) djnz r2,prlp ;反復(fù)轉(zhuǎn)換,直到6個(gè)全部完成 ret ;前往 ; * 碼型變換 * bcd:MOV r0,#disstart;獲得首地址 MOV a,t_s ;獲得待轉(zhuǎn)化的低位 MOV b,#10 ;轉(zhuǎn)化進(jìn)制,假設(shè)要進(jìn)展十進(jìn)制轉(zhuǎn)換 改為 10 div ab ;計(jì)算 A/B MOV r0,b ;第一位轉(zhuǎn)換終了,保管低位轉(zhuǎn)化后的數(shù)據(jù) inc r0 ;自增 MOV r0,a ;保管高位 inc r0;取第二個(gè)數(shù)據(jù)地址 MOV a,t_m ;獲得第二個(gè)需求轉(zhuǎn)換的數(shù)據(jù) MOV b,#10 ;十六進(jìn)制 div ab ;計(jì)算 MOV

11、 r0,b ;存低位 inc r0 MOV r0,a ;存高位 inc r0 ;第三位 MOV a,t_h ;獲得數(shù)據(jù) MOV b,#10 ;十六進(jìn)制 div ab;計(jì)算 MOV r0,b ;存低位 inc r0 MOV r0,a ;存高位 ret ;終了,前往 ;* ;* time_set 設(shè)置時(shí)間 * ; * * ; * 檢測(cè)用戶按鍵,1- 設(shè)置時(shí)單元 2- 設(shè)置分單元,3-設(shè)置增減方式* ; * 假設(shè)需求添加 時(shí),先將方式設(shè)置為 添加默以為減,即,按下 KEY3一下, * ; * 然后按 KEY1 ,假設(shè)要減少時(shí)單元,需求再次按下KEY3,然后按KEY1; * ; * 分的設(shè)置也是如此。

12、* ;* time_set:MOV p0,#00h ;制止數(shù)碼管顯示 MOV p2,#255 ;防止按鍵時(shí)閃爍 lcall pro_key ;查找用戶按鍵情況 MOV a,key ;查找鍵值 jz tsend;假設(shè)等于0,表示沒(méi)用按鍵,直接前往 cjne a,#1,tset1 ;能否等于1?沒(méi)有到下一個(gè)處置程序 MOV key,#00h;等于1,表示設(shè)置時(shí) 請(qǐng)零,否那么會(huì)引起反復(fù)設(shè)置 jb timset,tset10;時(shí)間設(shè)置標(biāo)志位,1 -減少,0-添加 MOV a,t_h ;標(biāo)志位 0 ,添加,獲得時(shí)單元 cjne a,#23,ts1;假設(shè)時(shí)單元不等于23,轉(zhuǎn)移到添加操作 jmp tsend

13、 ;等于23 直接前往 ts1:inc t_h ;時(shí)單元添加1 jmp tsend ;前往 tset10: MOV a,t_h ;這里處置為減少的情況 jz tsend ;假設(shè)時(shí)單元為0,直接前往 dec t_h ;否那么,數(shù)據(jù)減1 jmp tsend ;前往,以下關(guān)于分的設(shè)置一樣 tset1:cjne a,#2,tset2 ;假設(shè)按鍵不是 2 那么 轉(zhuǎn)移到下一個(gè)處置 MOV key,#00h;是2,表示設(shè)置 分 jb timset,tset20;其他同上 MOV a,t_m cjne a,#59, ts2 jmp tsend ts2:inc t_m jmp tsend tset20:MOV

14、a,t_m jz tsend dec t_m jmp tsend tset2:cjne a,#3,tsend ;等于 3 表示設(shè)置標(biāo)志 MOV key,#00h;清零 cpl timset;標(biāo)志取反 tsend:ret ;前往 ;* 按鍵處置 讀取鍵盤(pán) * ;參見(jiàn)有關(guān)鍵盤(pán)查詢(xún)的闡明,和前面的有關(guān)程序 pro_key:;鍵盤(pán)查詢(xún)子程序 setb key1 ;首先輸出高電平,檢測(cè)低電平的到來(lái) setb key2;不同電路,能夠檢測(cè)方式不一樣 setb key3 jb key1,ke1;假設(shè)用戶沒(méi)有按第一個(gè)鍵,到第下個(gè)處置部分, MOV key,#1;表示用戶按了第一個(gè)鍵 lcall delay20

15、ms ;軟件延時(shí),防止干擾 jmp pro_key ;重新查詢(xún),直到用戶釋放按鍵 ke1:jb key2,ke2;處置第二個(gè)按鍵,假設(shè)沒(méi)有到下一個(gè)處置部分 MOV key,#2;以下和第一個(gè)處置單元類(lèi)似。 lcall delay20ms jmp pro_key ke2:jb key3,ke3 MOV key,#3 lcall delay20ms jmp pro_key ke3:ret ;* ;* 定時(shí)器 T0 設(shè)置 * ;定時(shí)器任務(wù)在方式1,為提高精度,總定時(shí)時(shí)間為50ms, ;定時(shí)器溢出20次為1秒, pro_timer:MOV tmod,#01h ;設(shè)置定時(shí)器為定時(shí)方式1 MOV th0,

16、#0ffh ;初始化定時(shí)初值 MOV tl0,#0a1h ; setb ea ;總中斷允許 setb et0 ;定時(shí)器0 允許 setb tr0 ;開(kāi)場(chǎng)定時(shí) ret ;前往 ; * ; * 軟件延時(shí) * delay:push psw;保管原來(lái)的存放器內(nèi)容 clr psw.3 ; clr psw.4 ;設(shè)置新的存放器組 MOV r0,#2 ;延時(shí)參數(shù)1 MOV r1,#250 ;延時(shí)參數(shù)2 MOV r2,#2 ;延時(shí)參數(shù)3 dl1:djnz r0,dl1 ;延時(shí)循環(huán)1 MOV r0,#250 ; dl2:djnz r1,dl1 ;延時(shí)循環(huán)2 MOV r0,#240 ; MOV r1,#248 ;

17、 dl3:djnz r2,dl1 ;延時(shí)循環(huán)3 nop ;定時(shí)精度調(diào)整 pop psw ;恢復(fù)原來(lái)的存放器 ret ;前往 ;* ;* 鍵盤(pán)延時(shí) * delay20ms:push psw clr psw.3 clr psw.4 MOV r0,#250 MOV r1,#40 d20:djnz r0,d20 MOV r0,#250 djnz r1,d20 pop psw ret ;* ;* 延時(shí) 5ms * delay5ms:push psw clr psw.3 setb psw.4 MOV r0,#250 MOV r1,#10 d5:djnz r0,d5 MOV r0,#250 djnz r1,d5 pop psw ret ;* ;這是數(shù)字顯示表格,其中 帶小數(shù)點(diǎn)的數(shù)字比不帶小數(shù)點(diǎn)的數(shù)字大16 ; 比如 0 的顯示代碼為 0;那么 0.的顯示

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論