久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2138|回復: 4
打印 上一主題 下一主題
收起左側

單片機匯編寫的時鐘,三個按鍵分別控制時秒分加一,為什么有時按下按鍵后數碼管顯示...

[復制鏈接]
跳轉到指定樓層
樓主
50黑幣

shi1        equ                41h//儲存時1號位
shi2        equ         42h//時2號位
fen1         equ                43h//分1
fen2        equ                44h//分2
miao1        equ         45h//秒1
miao2        equ                46h//秒2

pp                equ                48h//定時器        
mm                equ                49h//秒
ff                equ                4ah//分
ss                equ                4bh//時
dula        equ         p2.6//段選
wela        equ         p2.7//位選
        
org 0000h
        jmp main
org 000bh
        jmp time0interrupt1//定時器0,
org 0030h
main:
        mov shi1,#01h//初始化
        mov shi2,#02h
        mov fen1,#00h
        mov fen2,#00h
        mov miao1,#00h
        mov miao2,#00h
        mov pp,#00h
        mov ss,#0ch
        mov ff,#00h
        mov mm,#00h
        
        mov TMOD,#01h;//模式1
        mov TH0,#4ch;// 由于晶振為11.0592,故所記次數應為46080,計時器每隔50000微秒發起一次中斷。
        mov TL0,#00h;//46080的來歷,為50000*11.0592/12
        setb ET0;
        setb EA;
        setb TR0
disp:
                shijia:jnb p2.0,xiaodou1
                jmp fenjia
                xiaodou1:lcall DELAY5MS
                anxia1:jnb p2.0,anxia1        
                        inc ss
                        
        fenjia:jnb p2.1,xiaodou2
                jmp miaojia
                xiaodou2:lcall DELAY5MS
                anxia2:jnb p2.1,anxia2        
                inc ff
               
        miaojia:jnb p2.2,xiaodou3
                jmp disp2
                xiaodou3:lcall DELAY5MS
                anxia3:jnb p2.2,anxia3        
                inc mm
        
disp2:
                lcall display//數碼管驅動
                mov a,pp
                cjne a,#14h,disp//判斷pp是否加了20次,即1s
                mov pp,#00h//加到了,清零
        miao:        inc mm//秒+1
                        mov a,mm
                        cjne a,#3ch,go1//判斷秒是否到60
                        mov mm,#00h//到了,秒清零,
                        jmp fen//且分加一
        go1:        jmp disp1//沒到,直接顯示
        fen:        inc ff//分加一
                        mov a,ff
                        cjne a,#3ch,go2
                        mov ff,#00h
                        jmp shi
        go2:        jmp disp1
        shi:        inc ss
                        mov a,ss
                        cjne a,#18h,go3//是否到24
                        mov ss,#00h
        go3:        jmp disp1
        
        disp1:        mov a,ss//時給a
                        mov b,#0ah//10給b
                        div ab//除
                        mov shi1,a//商給shi1
                        mov shi2,b//余數給shi2
                        
                        mov a,ff
                        mov b,#0ah
                        div ab
                        mov fen1,a
                        mov fen2,b
                        
                        mov a,mm
                        mov b,#0ah
                        div ab
                        mov miao1,a
                        mov miao2,b
                                
        jmp disp
                                
//延時1ms
delay5:                        ;@11.0592MHz
DELAY1MS:                        ;@11.0592MHz
        PUSH 30H
        PUSH 31H
        MOV 30H,#9
        MOV 31H,#150
NEXT1MS:
        DJNZ 31H,NEXT1MS
        DJNZ 30H,NEXT1MS
        POP 31H
        POP 30H
        RET
        
DELAY5MS:                        ;@11.0592MHz
        NOP
        NOP
        PUSH 30H
        PUSH 31H
        MOV 30H,#44
        MOV 31H,#2
NEXT:
        DJNZ 31H,NEXT
        DJNZ 30H,NEXT
        POP 31H
        POP 30H
        RET
        
display://數碼管顯示若顯示的數字缺胳膊少腿或三頭六臂:我都有
                //這種現象只存在于動態掃描情況下,稱為鬼影。
                //原因是掃描過快導致上一個字符(視覺暫留結果)顯示在當前字符上產生重
                //疊
                //解決辦法:增長延時,減慢掃描
                //還有一種情況:
                //若采用同時送段碼和位碼,則注意送段碼前數據口要清零
        MOV dptr,#smg                //shi1,段選
        mov a,shi1
        MOVC A,@A+dptr
   clr dula
   mov P0,#00h;
   setb dula;
   mov P0,a;
   clr dula;

   clr wela;                        //時1位選
   mov P0,#0feh;
   setb wela;
   clr wela;
   lcall delay5;

   mov a,shi2                        //shi2
        MOVC A,@A+dptr
        mov P0,#00h;
   setb dula;
   mov P0,a;
   clr dula;

   mov P0,#0fdh;
   setb wela;
   clr wela;
   lcall delay5;

        
        mov P0,#00h;                 //-
   setb dula;
   mov P0,#01000000b;
   clr dula;

   mov P0,#0fbh;
   ;mov P0,#0ffh;
   setb wela;
   clr wela;
   lcall delay5;

   mov a,fen1                        //fen1
        MOVC A,@A+dptr
        mov P0,#00h;
   setb dula;
      mov P0,a;
   clr dula;

   mov P0,#0f7h;
   setb wela;
   clr wela;
   lcall delay5;

   mov a,fen2                        //fen2
        MOVC A,@A+dptr
    mov P0,#00h;  
   setb dula;
   mov P0,a;
   clr dula;

   mov P0,#0efh;
   setb wela;
   clr wela;
   lcall delay5;

   mov P0,#00h;;        //-
   setb dula;
   mov P0,#01000000b
   clr dula;

   mov P0,#0dfh;
   ;mov P0,#0ffh;
   setb wela;
   clr wela;
   lcall delay5;

   mov a,miao1                        //miao1
        MOVC A,@A+dptr
   mov P0,#00h;
   setb dula;
   mov P0,a;
   clr dula;

   mov P0,#0bfh;
   setb wela;
   clr wela;
   lcall delay5;


   mov a,miao2                        //miao2
        MOVC A,@A+dptr
   mov P0,#00h;
   setb dula;
   mov P0,a;
   clr dula;

   mov P0,#7fh;
   setb wela;
   clr wela;
   lcall delay5;

   RET


smg://從0到f的二進制
        db 00111111b//0
        db 00000110b//1
        db 01011011b//2
        db 01001111b//3
        db 01100110b//4
        db 01101101b//5
        db 01111101b//6
        db 00000111b//7
        db 01111111b//8
        db 01101111b//9
        db 01110111b//a//+
        db 01111100b//b//-
        db 00111001b//c//*
        db 01011110b//d//÷
        db 01111001b//e//=
        db 01110001b//f//清空
        ret

time0interrupt1:
        mov TH0,#4ch;// 由于晶振為11.0592,故所記次數應為46080,計時器每隔50000微秒發起一次中斷。
        mov TL0,#00h;//46080的來歷,為50000*11.0592/12
        inc pp

        reti
end
        

最佳答案

查看完整內容

當按鍵按下時程序死循環,影響到其他時序了。每個按鍵設立一個內存,當程序確認按鍵按下時,該內存為0 則時間加1,然后該內存設置為1 。當按鍵松開時內存設置為0。就是說只有按鍵按下,該內存為0的情況下時間加1。也可以用位尋址區
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:73992 發表于 2023-5-26 15:23 來自手機 | 只看該作者
當按鍵按下時程序死循環,影響到其他時序了。每個按鍵設立一個內存,當程序確認按鍵按下時,該內存為0 則時間加1,然后該內存設置為1 。當按鍵松開時內存設置為0。就是說只有按鍵按下,該內存為0的情況下時間加1。也可以用位尋址區
回復

使用道具 舉報

板凳
ID:123289 發表于 2023-5-26 17:06 | 只看該作者
顯示器是掃描顯示的吧。
這應要求每間隔一個時間T(如5ms),就要刷新一次,否則顯示就不正常了,是吧。
當你按鍵時,是不是掃描就顧不到了,程序【停留】鍵處理上了,顯示自然就不正常了。
仔細想想是不是這樣的呢?當你DELAY的時間內,掃描是不是顧不到了。
回復

使用道具 舉報

地板
ID:1078925 發表于 2023-5-26 17:35 | 只看該作者
有一個思路,把按鍵判斷放到定時到1秒pp清零之后,這樣不會卡
回復

使用道具 舉報

5#
ID:1078925 發表于 2023-5-27 20:49 | 只看該作者
找到問題了,當按鍵按下時,定時器還在計時,如果延時使pp計數值超過20,cjne a,#20,rel無效,需要等到pp溢出才能繼續計數
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 色综合天天综合网国产成人网 | 久久精品亚洲欧美日韩久久 | 久久的色| 亚洲欧洲视频 | 欧美日韩国产一区二区三区不卡 | 国产在线一区二区三区 | 一区二区三区网站 | 免费一级片 | 国产视频久久 | 亚洲国产精品成人久久久 | 手机av在线 | 日韩不卡三区 | 日韩毛片免费视频 | h视频在线观看免费 | 91精品国产91久久久久久最新 | 91国内外精品自在线播放 | 午夜国产 | 国产一级免费视频 | 欧美a级成人淫片免费看 | 日韩av一区二区在线观看 | 午夜无码国产理论在线 | 日日天天| 一区二区精品 | 免费观看一级黄色录像 | 国产免费xxx| 亚洲一区在线日韩在线深爱 | a看片| 国产免费一区二区三区 | 国产视频中文字幕 | 久久99精品久久久水蜜桃 | 久久久久国产一区二区三区四区 | 日韩免费福利视频 | 精品在线观看入口 | 国产一区二区视频在线 | 欧美日韩亚洲二区 | 99精品在线观看 | 天天操网| 鲁大师一区影视 | 韩国av一区二区 | 亚洲一区在线播放 | 伊人伊人 |