<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 消費電子 > 帶有時(shí)間設置和秒顯示的數字鬧鐘

帶有時(shí)間設置和秒顯示的數字鬧鐘

——
作者: 時(shí)間:2007-10-23 來(lái)源:中國單片機資訊網(wǎng) 收藏
;*********************************************************
;           帶有
;  Date :  2006.3.13     12MHZ晶振                                  
;  Create by :塵封往事  逸飛     
; P3.2設置鍵 P3.3小時(shí)調整鍵 P3.5分鐘調整鍵 P1.7定時(shí)輸出指示
;**************************************************************
;*********************************************************
;                 變量地址分配
;********************************************************* 
SwDelay             equ  2;       設置按鍵時(shí)去抖動(dòng)時(shí)間
DisplayBuffer       equ  30h;     設置顯示緩沖區的地址為30h-35h共6個(gè)字節
BeepVal             equ  36h;     蜂鳴時(shí)間長(cháng)短存儲器地址 
OneSecondCounter    equ  39h;     設置1秒計數器的地址,1秒計數器是用來(lái)計數1秒內計時(shí)器的中斷次數
Hour                equ  3ah;     設置小時(shí)計數器的地址
Minute              equ  3bh;     設置分鐘計數器的地址
Second              equ  3ch;     設置秒計數器的地址
P1Val               equ  3dh;     設置數碼管位驅動(dòng)值的地址
ClockMode           equ  20h.0;   模式(正常走時(shí)/鬧時(shí))設置寄存器地址,值為0時(shí)正常走時(shí),為1時(shí)鬧時(shí)設定
AlarmOnOff          equ  20h.1;   鬧鐘開(kāi)啟/關(guān)閉標志,為0關(guān)閉,為1開(kāi)啟
AlarmTimeOn         equ  20h.2;   此位為1時(shí)表示鬧時(shí)時(shí)間到
DispHour            equ  21h;     設置小時(shí)顯示寄存器的地址
DispMinute          equ  22h;     設置分鐘顯示寄存器的地址
DispSecond          equ  23h;     設置寄存器的地址
AlarmHour           equ  2eh;     設置鬧時(shí)小時(shí)計數器的地址
AlarmMinute         equ  2fh;     設置鬧時(shí)分鐘計數器的地址
AlarmSetKey         bit  P3.2;    鬧鐘設置鍵
MinuteKey           bit  P3.5;    定義分設置鍵
HourKey             bit  P3.3;    定義小時(shí)設置鍵
RelayOut            equ  P1.7;    定義輸出引腳
;**********************************************************************
;                     程序開(kāi)始
;**********************************************************************
         org 00h
         ajmp   Reset;            程序開(kāi)始
         org 0bh     ;            Timer0中斷向量地址
         ajmp TimeInt;            跳到中斷處理程序
         org 0020h
Reset:               ;            以下為初始化程序,為各個(gè)變量賦初值
         mov sp,#70h;
         setb RelayOut 
  mov OneSecondCounter,#125
         ;
         mov Hour,#12;
         mov Minute,#00;
         mov Second,#00;       設置上電時(shí)時(shí)鐘顯示的初值
         ;
         mov AlarmHour,#06;
         mov AlarmMinute,#00;  設置上電時(shí)鬧時(shí)時(shí)間的初值
         ;
         clr AlarmOnOff;        上點(diǎn)復位后鬧時(shí)功能處于關(guān)閉狀態(tài)
         clr ClockMode;         正常走時(shí)模式
         clr AlarmTimeOn;
         setb RelayOut;          清鬧時(shí)輸出
         
;************************************
;   Use Timer 0 Mode 1
;   400us interrupt
;************************************
         mov tmod,#00000001b;
         mov th0,#0E3h;                  
          mov tl0,#39h;
         mov ie, #82h;            開(kāi)全局中斷
         setb  tr0;               開(kāi)定時(shí)中斷
;*****************************************
;         以下為主程序
;*****************************************
MainLoop:
          jb AlarmSetKey,CheckMinuteKey;  鬧時(shí)設置鍵按下了嗎?沒(méi)有則轉去檢測秒設置鍵
          ;                      
          call Delay;
          jb AlarmSetKey,CheckMinuteKey;  按下的時(shí)間超過(guò)500ms嗎?
          setb ClockMode;                 置為鬧時(shí)設置模式
          call AlarmSet;
CheckMinuteKey:
          jb MinuteKey,CheckHourKey;      分設置鍵按下了嗎?沒(méi)有則轉去檢測小時(shí)設置鍵
          ;                      如按下調用蜂鳴器發(fā)音程序
          mov a,Minute
          add a,#1;                       如果按下則將分鐘加一                          十進(jìn)制調整
          mov Minute,a;
          cjne a,#3ch,NotOver1;           到60分鐘了嗎?
          mov Minute,#0;                  到60分鐘則將分鐘清0
NotOver1:                                ;以下等待按鍵釋放及防抖動(dòng)
          jnb  MinuteKey,$
CheckHourKey:
          jb HourKey,CheckAlarm;          小時(shí)設置鍵按下了嗎?沒(méi)有則轉去鬧時(shí)狀態(tài)檢測
          ;                      如按下調用蜂鳴器發(fā)音程序
          mov a,Hour
          add a,#1;                       如果按下則將小時(shí)加1
          mov Hour,a
          cjne a,#18h,NotOver2
          mov Hour,#0;                    到24小時(shí)則將小時(shí)清0
NotOver2:                                ;以下等待按鍵釋放及防抖動(dòng)
          jnb  HourKey,$
CheckAlarm:          ;
          jnb AlarmTimeOn,ToReturn
          call AlarmProcess
ToReturn:
          ajmp MainLoop

;**********************************************
;  定時(shí)器Timer0中斷服務(wù)程序(此程序每8ms執行一次)
;********************************************** {{分頁(yè)}}
TimeInt:
          mov th0,#0E3h;                      重新加載定時(shí)參數
          mov tl0,#39h;
          push acc
          push psw;                           保護累加器及程序狀態(tài)字的內容
          setb rs0;                           選擇工作寄存器組1,
          clr  rs1;                           這樣可保護原工作寄存器組(0組)的內容
          djnz OneSecondCounter,NotoneSecond; 中斷了125次了嗎?即夠1秒了嗎?
          mov OneSecondCounter,#125;          如夠1秒則重新設置"OneSecondCounter"計數器
          call Clock               ;          調用將時(shí)鐘內容加1秒的子程序
          call ConvertoBuffer      ;          調用將時(shí)鐘內容轉換到顯示緩沖區子程序
NotoneSecond:
          call ScanDisplay         ;          調用掃描顯示子程序
          pop  psw
          pop  acc                 ;          恢復累加器及程序狀態(tài)字的內容
          reti                     ;          中斷返回
;*********************************************
;            掃描顯示子程序
;*********************************************
ScanDisplay:
                   MOV   R1,#DisplayBuffer       ;指向顯示數據首址
                   MOV   R4,#11111011b      ;掃描控制字初值
             PLAY: MOV   A,R4          ;掃描字放入A
                   MOV   P2,A          ;從P2口輸出
                   MOV   A,@R1         ;取顯示數據到A
                   MOV   DPTR,#TAB     ;取段碼表地址
                   MOVC  A,@A+DPTR     ;查顯示數據對應段碼
                   MOV   P0,A          ;段碼放入P1口
                 
     LCALL        Delay

                   INC   R1            ;指向下一地址
                   MOV   A,R4            ;掃描控制字放入A
                   JNB   ACC.7,ENDOUT    ;掃到第六位時(shí)結束
                   RL   A               ;A中數據循環(huán)左移
                   MOV   R4,A            ;放回R5內
                   AJMP  PLAY            ;跳回PLAY循環(huán)
           ENDOUT: SETB  P2.7            ;一次顯示結束,P2口復位
                   MOV    P0,#0FFH       ;P0口復位
                   RET                      ;子程序返回
             TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,7FH,0B7H,0FFH
;共陽(yáng)段碼表          "0""1""2" "3""4""5""6""7" "8""9"".""=""不亮"

;****************************************************
;            時(shí)鐘內容加1秒的子程序
;****************************************************
Clock:
          mov a,Second;                     將原秒值送入a
          add a,#1;                         加1秒
          
          mov Second,a
          cjne a,#3cH,NotOverFlow;          夠60秒了嗎?
          mov Second,#0;                    夠了則將秒值清0
          ;
          mov a,Minute
          add a,#1
          mov Minute,a;                     分鐘加1
          cjne a,#3cH,NotOverFlow;          夠60分了嗎?
  &n
塵埃粒子計數器相關(guān)文章:塵埃粒子計數器原理
蜂鳴器相關(guān)文章:蜂鳴器原理


評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>