在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

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

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

            ——
            作者: 時(shí)間:2007-10-23 來(lái)源:中國(guó)單片機(jī)資訊網(wǎng) 收藏
            ;*********************************************************
            ;           帶有
            ;  Date :  2006.3.13     12MHZ晶振                                  
            ;  Create by :塵封往事  逸飛     
            ; P3.2設(shè)置鍵 P3.3小時(shí)調(diào)整鍵 P3.5分鐘調(diào)整鍵 P1.7定時(shí)輸出指示
            ;**************************************************************
            ;*********************************************************
            ;                 變量地址分配
            ;********************************************************* 
            SwDelay             equ  2;       設(shè)置按鍵時(shí)去抖動(dòng)時(shí)間
            DisplayBuffer       equ  30h;     設(shè)置顯示緩沖區(qū)的地址為30h-35h共6個(gè)字節(jié)
            BeepVal             equ  36h;     蜂鳴時(shí)間長(zhǎng)短存儲(chǔ)器地址 
            OneSecondCounter    equ  39h;     設(shè)置1秒計(jì)數(shù)器的地址,1秒計(jì)數(shù)器是用來(lái)計(jì)數(shù)1秒內(nèi)計(jì)時(shí)器的中斷次數(shù)
            Hour                equ  3ah;     設(shè)置小時(shí)計(jì)數(shù)器的地址
            Minute              equ  3bh;     設(shè)置分鐘計(jì)數(shù)器的地址
            Second              equ  3ch;     設(shè)置秒計(jì)數(shù)器的地址
            P1Val               equ  3dh;     設(shè)置數(shù)碼管位驅(qū)動(dòng)值的地址
            ClockMode           equ  20h.0;   模式(正常走時(shí)/鬧時(shí))設(shè)置寄存器地址,值為0時(shí)正常走時(shí),為1時(shí)鬧時(shí)設(shè)定
            AlarmOnOff          equ  20h.1;   鬧鐘開(kāi)啟/關(guān)閉標(biāo)志,為0關(guān)閉,為1開(kāi)啟
            AlarmTimeOn         equ  20h.2;   此位為1時(shí)表示鬧時(shí)時(shí)間到
            DispHour            equ  21h;     設(shè)置小時(shí)顯示寄存器的地址
            DispMinute          equ  22h;     設(shè)置分鐘顯示寄存器的地址
            DispSecond          equ  23h;     設(shè)置寄存器的地址
            AlarmHour           equ  2eh;     設(shè)置鬧時(shí)小時(shí)計(jì)數(shù)器的地址
            AlarmMinute         equ  2fh;     設(shè)置鬧時(shí)分鐘計(jì)數(shù)器的地址
            AlarmSetKey         bit  P3.2;    鬧鐘設(shè)置鍵
            MinuteKey           bit  P3.5;    定義分設(shè)置鍵
            HourKey             bit  P3.3;    定義小時(shí)設(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í)時(shí)鐘顯示的初值
                     ;
                     mov AlarmHour,#06;
                     mov AlarmMinute,#00;  設(shè)置上電時(shí)鬧時(shí)時(shí)間的初值
                     ;
                     clr AlarmOnOff;        上點(diǎn)復(fù)位后鬧時(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í)設(shè)置鍵按下了嗎?沒(méi)有則轉(zhuǎn)去檢測(cè)秒設(shè)置鍵
                      ;                      
                      call Delay;
                      jb AlarmSetKey,CheckMinuteKey;  按下的時(shí)間超過(guò)500ms嗎?
                      setb ClockMode;                 置為鬧時(shí)設(shè)置模式
                      call AlarmSet;
            CheckMinuteKey:
                      jb MinuteKey,CheckHourKey;      分設(shè)置鍵按下了嗎?沒(méi)有則轉(zhuǎn)去檢測(cè)小時(shí)設(shè)置鍵
                      ;                      如按下調(diào)用蜂鳴器發(fā)音程序
                      mov a,Minute
                      add a,#1;                       如果按下則將分鐘加一                          十進(jìn)制調(diào)整
                      mov Minute,a;
                      cjne a,#3ch,NotOver1;           到60分鐘了嗎?
                      mov Minute,#0;                  到60分鐘則將分鐘清0
            NotOver1:                                ;以下等待按鍵釋放及防抖動(dòng)
                      jnb  MinuteKey,$
            CheckHourKey:
                      jb HourKey,CheckAlarm;          小時(shí)設(shè)置鍵按下了嗎?沒(méi)有則轉(zhuǎn)去鬧時(shí)狀態(tài)檢測(cè)
                      ;                      如按下調(diào)用蜂鳴器發(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執(zhí)行一次)
            ;********************************************** {{分頁(yè)}}
            TimeInt:
                      mov th0,#0E3h;                      重新加載定時(shí)參數(shù)
                      mov tl0,#39h;
                      push acc
                      push psw;                           保護(hù)累加器及程序狀態(tài)字的內(nèi)容
                      setb rs0;                           選擇工作寄存器組1,
                      clr  rs1;                           這樣可保護(hù)原工作寄存器組(0組)的內(nèi)容
                      djnz OneSecondCounter,NotoneSecond; 中斷了125次了嗎?即夠1秒了嗎?
                      mov OneSecondCounter,#125;          如夠1秒則重新設(shè)置"OneSecondCounter"計(jì)數(shù)器
                      call Clock               ;          調(diào)用將時(shí)鐘內(nèi)容加1秒的子程序
                      call ConvertoBuffer      ;          調(diào)用將時(shí)鐘內(nèi)容轉(zhuǎn)換到顯示緩沖區(qū)子程序
            NotoneSecond:
                      call ScanDisplay         ;          調(diào)用掃描顯示子程序
                      pop  psw
                      pop  acc                 ;          恢復(fù)累加器及程序狀態(tài)字的內(nèi)容
                      reti                     ;          中斷返回
            ;*********************************************
            ;            掃描顯示子程序
            ;*********************************************
            ScanDisplay:
                               MOV   R1,#DisplayBuffer       ;指向顯示數(shù)據(jù)首址
                               MOV   R4,#11111011b      ;掃描控制字初值
                         PLAY: MOV   A,R4          ;掃描字放入A
                               MOV   P2,A          ;從P2口輸出
                               MOV   A,@R1         ;取顯示數(shù)據(jù)到A
                               MOV   DPTR,#TAB     ;取段碼表地址
                               MOVC  A,@A+DPTR     ;查顯示數(shù)據(jù)對(duì)應(yīng)段碼
                               MOV   P0,A          ;段碼放入P1口
                             
                 LCALL        Delay

                               INC   R1            ;指向下一地址
                               MOV   A,R4            ;掃描控制字放入A
                               JNB   ACC.7,ENDOUT    ;掃到第六位時(shí)結(jié)束
                               RL   A               ;A中數(shù)據(jù)循環(huán)左移
                               MOV   R4,A            ;放回R5內(nèi)
                               AJMP  PLAY            ;跳回PLAY循環(huán)
                       ENDOUT: SETB  P2.7            ;一次顯示結(jié)束,P2口復(fù)位
                               MOV    P0,#0FFH       ;P0口復(fù)位
                               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í)鐘內(nèi)容加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
            塵埃粒子計(jì)數(shù)器相關(guān)文章:塵埃粒子計(jì)數(shù)器原理
            蜂鳴器相關(guān)文章:蜂鳴器原理


            評(píng)論


            相關(guān)推薦

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

            關(guān)閉