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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

VFD熒光屏顯示時鐘制作 單片機匯編語言程序

[復制鏈接]
跳轉到指定樓層
樓主
    此程序是本人2006年正月初一在家中閑來無事,想起有好幾臺廢舊的VCD,因解碼板壞了,用不上,但上面的顯示板與外觀都很新,按鍵也是好的,當廢品賣又不值錢。查看顯示芯片為日本的NEC的upd16312,于是就上網查出此芯片的資料,用AT89C2051做了一個時鐘,采用MCS51 ASM匯編程序,可使用顯示屏電路板上自帶的按鍵來設置時間,電路很簡單,只要從顯示板上引出STB,CLK ,DOUT三根線到單片機的引腳即可。     程序注釋很詳細,是學習匯編的好例子,下面附ASM程序:
;vfd電子鐘,cpu采用89c2051
;顯示驅動芯片采upd16312
;晶振頻率為11.0592Mhz
        VFD_STB  BIT  P1.4         ;P1.4為upd16312 STB信號
        VFD_CLK  BIT  P1.5         ;P1.5為upd16312 CLK信號
        VFD_DOUT BIT  P1.6      ;P1.6為upd16312 DOUT信號
        KEY_BUF1 EQU  50H      ;upd16312按鍵1數據暫儲
        KEY_BUF2 EQU  51H       ;upd16312按鍵2數據暫儲
        KEY_BUF3 EQU  52H       ;upd16312按鍵3數據暫儲
         ORG    0000H
         AJMP   RESET                ;轉到復位
         ORG    000BH                ;定時器0中斷入口
         LJMP   CTCO                 ;定時器0中斷服務子程序
         ORG    0030H                  ;復位程序入口
RESET:   MOV    58H,#80H      ;顯示冒號
             MOV    55H,#00H      ;定時器中斷次數,0F次中斷為1秒種
             MOV    5FH,#00H      ;秒十位
             MOV    5EH,#00H      ;秒個位
             MOV    5BH,#00H      ;分十位
             MOV    5AH,#00H      ;分個位
             MOV    5DH,#01H      ;時十位
             MOV    5CH,#02H      ;時個位
             MOV    SP,#1F           ;堆棧指針設為1FH
             MOV    R0,#20H
             MOV    R1,#60H
             MOV    A,#00H
RES1:    MOV    @R1,A            ;清空upd16312顯示緩沖區
            INC    R1
            DJNZ   R0,RES1
            LCALL  INI_VFD           ;調用upd16312VFD初始程序
            LCALL  UPDATA
            LCALL  WR_VFD
            MOV    TMOD,#01H     ;設定時器模式為16位定時模式
            MOV    TH0,#10H         ;設定時器0高位初值
            MOV    TL0,#10H         ;設定時器0低位初值
            MOV    IE,#82H           ;設置定時器0中斷
            SETB   TR0                   ;啟動定時器0中斷
            AJMP   START
START:   MOV    A,55H             ;主程序開始
             CJNE   A,#0FH,KEY      ;55H的值不是0F時轉到KEY鍵處理程序
             MOV    55H,#00H       ;定時器0中斷了0F次時為1秒,
               INC    5EH                  ;秒個位加1
               LCALL  TIME              ;調用時間計算程序
KEY:        LCALL  RD_KEY            ;調用讀取鍵值程序
               MOV    A,50H             ;鍵值1送A
               JNZ    XSK                   ;不為0有鍵按下轉到XSK
               MOV    A,51H             ;鍵值2送A
               JNZ    XSK                  ;不為0有鍵按下轉到XSK
               MOV    A,52H            ;鍵值2送A
               JZ     START     ;為0無鍵按下轉到START
XSK:        LCALL  KEYBD             ;調用按鍵處理程序
              AJMP   START      
              ORG    0100H              ;定時器0中斷處理程序入口
CTCO:    CLR    TR0                    ;暫停定時器0
             MOV    TH0,#10H      ;重置定時器0高位初值
             MOV    TL0,#10H      ;重置定時器0低位初值
             INC    55H                     ;中斷次數加1
             SETB   TR0                      ;重啟定時器0
             RETI                      ;定時器0中斷返回
             ORG    110H
INI_VFD: CLR    VFD_STB            ;初始化顯示
              MOV    A,#39H            ;upd16312
              LCALL  OUTDATA
              SETB   VFD_STB           ;顯示模式設
              NOP                           ;置命令字:
              RET                            ;5位,16 段
         ORG    120H
WR_VFD:  CLR    VFD_STB        ;寫顯示數據
                MOV    A,#70H        ;至upd16312   
                LCALL  OUTDATA    ;數據設置
                SETB   VFD_STB       ;命令字:
                NOP                        ;正常工作、
               CLR    VFD_STB         ;地址加1方式、
               MOV    A,#0C4H       ;寫顯示數據
               LCALL  OUTDATA      ;地址設置命
               MOV    R2,#06H        ;令字:從地
               MOV    R1,#7AH       ;址0開始顯示
WR_VFD1: MOV    A,@R1           ;數據放在單
                 LCALL  OUTDATA      ;片機的RAM
                 INC    R1                  ;5FH~7FH
                 DJNZ   R2,WR_VFD1
                 SETB   VFD_STB
                 NOP
                CLR    VFD_STB
                MOV    A,#0BFH
                LCALL  OUTDATA     ;顯示控制
                SETB   VFD_STB        ;命令字:顯
                 RET                         ;示開、脈沖
                ORG    150H                    ;寬度14/16
RD_KEY:  CLR    VFD_STB          ;讀upd16312 鍵值
               MOV    A,#76H            ;鍵盤數
               LCALL  OUTDATA         ;據(17鍵)
               LCALL  INDATA            ;鍵值數據存
               MOV    KEY_BUF1,A      ;儲器的第
               LCALL  INDATA             ;一字節給
               MOV    KEY_BUF2,A       ;KEY_BUF1
               LCALL  INDATA             ;鍵值數據
               MOV    KEY_BUF3,A       ;存儲器的
               SETB   VFD_STB             ;第二字節
               CLR    VFD_STB              ;給KEY_BUF2
               RET                              ;鍵值數據存
                  ORG    170H             ;儲器的第三
OUTDATA: MOV    R0,#08             ;字節給
                 SETB   VFD_DOUT           ;KEY_BUF3
OUTDT1:   CLR    VFD_CLK             ;傳送一
                 RRC    A                        ;個字節
                 MOV    VFD_DOUT,C
                 SETB   VFD_CLK
                 DJNZ   R0,OUTDT1
                 RET
                ORG    180H
INDATA:   MOV    R0,#08             ;讀入一
                SETB   VFD_DOUT        ;個字節
INDATA1: SETB   VFD_CLK
                CLR    VFD_CLK
                MOV    C,VFD_DOUT
                RRC    A
                DJNZ   R0,INDATA1
                RET
               ORG    190H                ;時間計算程序
TIME:      MOV    A,5EH
               CJNE   A,#0AH,EX
               MOV    5EH,#00H
               INC    5FH                    ;秒十位加1
               MOV    A,5FH
               CJNE   A,#06H,EX
               MOV    5FH,#00H
STM:       INC    5AH                   ;分個位加1
              MOV    A,5AH
              CJNE   A,#0AH,EX
              MOV    5AH,#00H
              INC    5BH                     ;分十位加1
              MOV    A,5BH
              CJNE   A,#06H,EX
              MOV    5BH,#00H
              INC    5CH                     ;時個位加1
              MOV    A,5DH
              CJNE   A,#02H,HH
              MOV    A,5CH
              CJNE   A,#04H,EX
              MOV    5CH,#00H
              MOV    5DH,#10H
              AJMP   EX
HH:        MOV    A,5CH
           CJNE   A,#0AH,EX
           MOV    5CH,#00H
           MOV    A,5DH
           CJNE   A,#10H,DE
           MOV    5DH,#01H
           LJMP   EX
DE:      INC    5DH                    ;時十位加1
EX:      XRL    58H,#80H
           LCALL  UPDATA
           MOV    A,58H
           XRL    7AH,A  
           LCALL  WR_VFD
           RET
           ORG    220H                 ;按鍵處理程序入口
KEYBD:   CLR    TR0                  ;暫停定時器0
              MOV    A,51H            ;鍵2內容送A
              CJNE   A,#40H,DD     ;鍵2不等于40H轉到DD減鍵子程序
              LCALL  STM               ;鍵2等于40H調用加鍵子程序
              MOV    66H,#30H
WAIT1:   MOV    67H,#30H
WAIT2:   LCALL  RD_KEY
              MOV    A,51H
              CJNE    A,#40H,EXI
              DJNZ   67H, WAIT2
              DJNZ   66H,WAIT1
SADD:    LCALL  RD_KEY
              MOV    A,51H
              CJNE   A,#40H,EXI
              LCALL  STM
              LCALL  DELAY
              AJMP   SADD
DD:        MOV    A,50H              ;鍵1內容送A
              CJNE   A,#40H,EXI        ;鍵1不等于40H轉到EXI退出子程序
              LCALL  DEE                  ;鍵1等于40H調用減鍵子程序
              LCALL  UPDATA
              LCALL  WR_VFD
              MOV    66H,#30H
WAIT4:   MOV    67H,#30H
WAIT3:   LCALL  RD_KEY
             MOV    A,50H
             CJNE   A,#40H,EXI
             DJNZ   67H,WAIT3
             DJNZ   66H,WAIT4
SDD:      LCALL  DEE
             LCALL  UPDATA
             LCALL  WR_VFD
             LCALL  RD_KEY
             LCALL  DELAY
             MOV    A,50H
             CJNE   A,#40H,EXI
             AJMP   SDD
EXI:       MOV    TH0,#10H
             MOV    TL0,#10H
             MOV    5FH,#00H
             MOV    5EH,#00H
             LCALL  UPDATA
             LCALL  WR_VFD
             SETB   TR0
              RET
             ORG    2A0H             ;減鍵程序
DEE:      MOV    A,5AH          ;檢查分個位是否為0
             JNZ    DEE3              ;不為0轉到DEE3
             MOV    5AH,#09H    ;為0則分個位寫入9
              AJMP   DEH2          ;轉到DEH2
DEE3:    DEC    5AH              ;分個位減1
             AJMP   EXTT            ;子程序返回
DEH2:    MOV    A,5BH
             JNZ    DE1
             MOV    5BH,#05H
             MOV    A,5CH
             JNZ    DE2
             MOV    5CH,#09H
             MOV    A,5DH
             JNZ    DE3
             MOV    5DH,#02H
             MOV    5CH,#03H
DE1:     DEC    5BH                    ;分十位減1
            AJMP   EXTT
DE2:     DEC    5CH                 ;時個位減1
            AJMP   EXTT
DE3:     CJNE   A,#10H,DE4
            MOV    5DH,#02H
            MOV    5CH,#03H
            AJMP   EXTT
DE4:     DEC    5DH                  ;時十位減1
EXTT:    RET
            ORG    0600H              ;更新顯示數據
UPDATA:  MOV    R0,#5AH
                MOV    R1,#7AH
                MOV    R4,#00AH
UPDLOP:  MOV    A,@R0
                ADD     A,#06H
                MOVC   A,@A+PC
                MOV    @R1,A
                INC    R0
                INC    R1
                DJNZ   R4,UPDLOP
                RET
         ORG    610H
VFDCODE: DB     77H,24H,6BH,6DH    ;VFD顯示代碼
                 DB     3CH,5DH,5FH,64H
                 DB     7FH,7DH,7EH,1FH
                 DB     53H,2FH,5BH,5AH
                 DB     00H
         ORG    750H
DELAY:   MOV    R7,#090H       ;延時程序
LOOP1:   MOV    R6,#0A0H
LOOP2:   NOP
              DJNZ   R6,LOOP2
              DJNZ   R7,LOOP1
              RET                           ;子程序返回
             END

Snipaste_2021-05-15_09-05-26.png (41.9 KB, 下載次數: 95)

電路圖

電路圖

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏3 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:126422 發表于 2021-5-23 20:15 來自手機 | 只看該作者
不錯學習,現在vfd屏價格高,但顯示就是漂亮。
回復

使用道具 舉報

板凳
ID:477512 發表于 2021-9-14 18:39 | 只看該作者
編譯不成功,不知道怎樣改?
回復

使用道具 舉報

地板
ID:72088 發表于 2021-9-15 21:43 | 只看該作者
沒有專用時鐘芯片,斷電就要重新調整時間,沒實際用途,學習學習還是可以的
回復

使用道具 舉報

5#
ID:920755 發表于 2021-10-7 17:28 | 只看該作者

RE: VFD熒光屏顯示時鐘制作 單片機匯編語言程序

wbwcf13e 發表于 2021-9-14 18:39
編譯不成功,不知道怎樣改?

不知道你是用哪個編譯器的,我用Keil uVision3沒問題

vfd.png (97.92 KB, 下載次數: 77)

vfd.png
回復

使用道具 舉報

6#
ID:452662 發表于 2021-10-21 11:26 | 只看該作者
軟件是哪個呀?
回復

使用道具 舉報

7#
ID:920755 發表于 2021-10-24 05:22 | 只看該作者

Keil 各版本都可以
回復

使用道具 舉報

8#
ID:972853 發表于 2021-10-24 19:16 | 只看該作者
程序看起來有點暈,這也是匯編名聲不好的原因,變量就不能定義個有意義的名字嗎?除了中斷向量地址用ORG指定之外其他程序讓Keil來分配地址它不香嗎?這樣寫程序幾K的程序已經很考驗腦力了,大型程序是不用想的,別說他人看不懂自己就能把自己寫糊涂了。建議樓主多學習一些匯編和C的偽指令,建立自己的程序框架,這樣可以像C一樣寫匯編,我也不算高手也不是故意找樓主毛病,只是良心建議。
    比如用data關鍵字命名字節變量程序里就可以用變量名而不是5XH這樣的絕對地址了,即容易理解又便于修改,比如將來變量位置要調整時只要更改定義即可,而現在這樣寫你要找出程序里所有用到該變量的地方一一修改。
    又比如你查表的方式,完全可以用DPTR裝入表地址(用標號而不是絕對地址),A裝入偏移量,然后用MOVC  A,@A+DPTR來查表,好處就是查表指令和表地址都可以在任意位置。
    還有很多東西樓主自己慢慢去研究吧?芍囟ㄎ坏腃ODE段,多個程序文件的使用和相互間的調用等等
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 伦理二区| 欧美一区二区三区日韩 | 午夜影院在线观看 | 亚洲精彩免费视频 | 狠狠综合久久av一区二区老牛 | 中文字幕av亚洲精品一部二部 | 成人在线免费视频 | 欧美在线 | 久久久一二三区 | 99久久精品免费看国产高清 | 久久夜色精品国产 | 久久亚洲一区 | 99热精品6 | 精品三级在线观看 | 欧美美女被c | 婷婷丁香在线视频 | 日韩中文字幕在线观看视频 | 日韩1区| 盗摄精品av一区二区三区 | 久久久亚洲成人 | 羞羞网站在线免费观看 | 日本黄色片免费在线观看 | 亚洲国产精品久久久 | 男女下面一进一出网站 | 国产精品一区二区在线 | 99久久久久久久久 | 一区二区三区四区国产 | 亚洲黄色在线免费观看 | 狠狠做深爱婷婷综合一区 | 午夜a级理论片915影院 | 一级黄a视频 | 亚洲一区视频在线 | 国产中文字幕亚洲 | 中文字幕视频在线观看 | 日韩高清黄色 | 日韩av免费在线观看 | www.888www看片 | 天天宗合网 | 久久久国产精品入口麻豆 | 久草福利 | 天天欧美 |