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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3294|回復: 6
收起左側

這個單片機匯編程序怎么改成共陰極的呀?

[復制鏈接]
ID:827883 發表于 2020-11-8 13:28 | 顯示全部樓層 |閱讀模式
;****************************************************************
;項目名稱: 數字式秒表設計;功能要求:數字式秒表上電或按鍵復位后能自動顯示系統提示符“P.”,進入準備工作狀態。該數字式秒表應具有開始、暫停、連續、清零和停止功能。
;****************************************************************
;堆棧棧底2FH;
;****************************************************************
;LED數碼管顯示器設定;
;P0.7---P0.0段控線,接LED的顯示段dp,g,f,e,d,c,b,a
;P2.0---P2.7位控線,從左至右 (LED7,LED6,LED5,LED4,LED3,LED2,LED1,LED0)
;顯示緩沖區設定從左至右依次為78H,79H,7AH,7BH,7CH,7DH,7EH,7FH
;****************************************************************
;獨立式鍵盤設定;
;8個按鍵S2至S9分別依次接在P1.0至P1.7口線;
;****************************************************************
;獨立式鍵盤設定與功能;
;8個按鍵S1至S8分別依次接在P1.0至P1.7口線;
;S1的功能為復位
;S2的功能為啟動/停止(標識符為22H.0當它為1時啟動,為0時停止)
;S3的功能為暫停/繼續(標識符為22H.1當它為1時暫停,為0時繼續)
;S4的功能為清零
;****************************************************************
;定時器/計數器資源:
;T/C0:工作模式1;功能;定時時間;查詢或中斷
;****************************************************************
;中斷系統資源;
;T/C0
;****************************************************************
;鍵功能程序;
;K1  (S2鍵鍵功能程序)
;K2  (S3鍵鍵功能程序)
;K3  (S4鍵鍵功能程序)
;********************************************************
;中斷服務程序
;********************************************************
;常數表格;
;DISBH(系統提示符P.字型代碼序號表)
;DISBI(00-00-00字符的代碼序號)
;TAB  (共陽數碼管字型代碼表)
;********************************************************
;子程序;
;DL                (1毫秒延時子程序)
;DISP           (數碼管顯示子程序)
;KEY                  (鍵掃描子程序);
;KEYCL    (P1口數據處理子程序)
;ADD01    (加1子程序)
;*********************************************************   
                        ORG                0000H
START:         LJMP          MAIN
                      ORG           000BH
                      LJMP          ZHD
                           ORG           0030H
MAIN:          MOV           PSW,                 #00H
                      MOV           SP,                 #2FH                    ;確立堆棧區
                           MOV           R0,                 #20H                    ;RAM區首地址
                               MOV              R7,            #96                        ;RAM區單元個數
                              MOV              TMOD,                #01H
                                   SETB                  EA
                                   SETB                  ET0
ML:            MOV                   @R0,                 #00H
                       INC                   R0
                                   DJNZ                  R7,                 ML
TSF:           MOV                   DPTR,                #DISBH   ;系統初始化后提示符“P.”字符代碼表首地址
                              MOV                   R5,                 #08H
                                   MOV                   R0,                 #78H
DISPTSF:                CLR                   A
                       MOVC                  A,                         @A+DPTR
                                MOV                   @R0,                 A
                                INC                   R0
                                INC                   DPTR
                        DJNZ                  R5,                 DISPTSF
KEY0:                   LCALL                 DISP
                        LCALL                 KEY
                                JB                    20H.0,         K1
                                JB                    20H.1,         K2
                                JB                    20H.2,                 K3
                                LJMP                  KEY0
KEY00:                  LCALL                 KEY
                        LCALL                 DISP
                                JB                    20H.2,         K3
                                LJMP                  KEY00
K1:                     JB                    22H.1,         KEY0
                                CPL                   22H.0
                        JB                    22H.0,         01      ;高電平則計時
                                CLR                  TR0                         ;低電平則停止
                                LCALL                 DISP
                                LJMP                 KEY00
K01:                    MOV                   7AH,                 #12H        ;從零開始計時
                        MOV                   7DH,                #12H
                                MOV                   7FH,                 #10H
                                MOV                   79H,                 #00H
                                MOV                   7BH,                 #00H
                                MOV                   7CH,                 #00H
                                MOV                   7EH,                 #00H
                        MOV                   7FH,                 #00H
                                LCALL                 DISP
                                MOV                   TH0,                 #0D8H
                                MOV                   TL0,                 #0F0H
                        SETB                  TR0                                     ;啟動定時器
                                LJMP                  KEY0
K2:                     JB                    22H.0,         K21                    ;判斷秒表是否啟動,如不是啟動狀態則此次按鍵無效
                        LJMP                 KEY0
K21:                    CPL                   22H.1
                       JB                    22H.1,         K22
                                SETB                  TR0                                    ;繼續計時
                                LJMP                  KEY0
K22:                    CLR                   TR0                                   ;暫停秒表
                                LCALL                 DISP                  
                                LJMP                  KEY0
K3:                     JB                    22H.0,         KEY0                     ;只有當停止是,清零鍵才有效
                                MOV                   R0,                 #79H                ;秒表清零
                                LCALL                 CLR0        
                                MOV                   R0,                 #7CH
                                LCALL                 CLR0        
                                MOV                   R0,            #7FH
                                LCALL                 CLR0        
                                LJMP                  KEY0
ZHD:                   PUSH                  PSW
                        PUSH                  ACC
                                MOV                   TMOD,                #01H                    ;定時器以工作方式1工作
                                SETB                  RS1                                           ;設定組號為2組
                                CLR                  RS0
                                MOV                   TH0,                 #0D8H
                                MOV                   TL0,                 #0F0H
                                MOV                   R0,                 #79H
                                LCALL                 ADD01
                                CJNE                  R2,                 #99,        RETT   ;判斷100毫秒到沒
                                MOV                   R0,                 #7CH
                                LCALL                 ADD01
                           CJNE                  R2,                        #60,         RETT    ;判斷60秒到沒
                                LCALL                 CLR0
                                MOV                   R0,                 #7FH
                                LCALL                 ADD01
                                CJNE                  R2,                         #60,        RETT    ;判斷60分到沒
                                LCALL                 CLR0
RETT:                   POP                   ACC
                        POP                   PSW
                                RETI
;*******************************************************
;常數表格區
;系統初始化后提示符“P.”字符代碼表;
DISBH:  DB 10H,10H,10H,10H,10H,10H,10H,11H;提示符“P.”字符序號顯示字符段選碼表(共陽極代碼)
TAB:    DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H;0-8
        DB 90H,88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,0BFH
;9,A,B,C,D,E,F,滅,p.,-
;*******************************************************
;子程序區;
ADD01:                MOV                   A,                 @R0
               DEC                   R0
                           SWAP                 A
                           ORL                   A,                 @R0
                           ADD                   A,                #01H
                           DA                    A
                           MOV                   R2,         A
                           ANL                   A,                 #0FH
                           MOV                   @R0,         A
                           MOV                   A,                 R2
                           ANL                   A,                 #0F0H
                           SWAP                  A
                           INC                   R0
                          MOV                   @R0,         A
                           RET
CLR0 :         MOV                   @R0,        #00H
                           DEC                   R0
                           MOV                   @R0,         #00H
                           RET
;鍵掃描子程序
KEY:           LCALL          KEYCL              ;調P1口數據處理子程序
               JZ             EXIT               ;沒有鍵按下,轉返回
                          LCALL          DISP               ;調顯示子程序去抖動
                          LCALL          DISP
                           LCALL          KEYCL                      ;調P1口數據處理子程序
                           JZ             EXIT                ;沒有鍵按下,轉返回
                           MOV            B,                 20H     ;保存取反后的鍵值
KEYSF:         LCALL          KEYCL          ;調P1口數據處理子程序
               JZ             KEY1                ;鍵釋放,轉恢復鍵值
                           LCALL          DISP
                           LCALL          DISP                ;調顯示子程序延時
                           LJMP           KEYSF                       ;等待釋放
KEY1:          MOV            20H,                 B    ;鍵值送20H保存
EXIT:          RET
;子程序返回
;P1口數據處理子程序
KEYCL:   PUSH                 PSW                 ;保護現場
         CLR                  RS1                 ;改變當前寄存器組為組1
                  SETB                 RS0
                  MOV                          P1,         #0FFH   ;先向P1口寫1
                  MOV                  A,                 P1      ;讀P1口數據
                  CPL                  A                   ;P1口數據取反
                  MOV                  20H,         A       ;保存取反后的鍵值
                  CLR                    RS1                 ;恢復當前寄存器組為組0
                  CLR                  RS0
                  POP                  PSW                 ;恢復現場
                  RET                                      ;子程序返回
;顯示子程序
;入口: 78H,79H,7AH,7BH,7CH,7DH,7EH,7FH,
DISP:   PUSH             DPH                     ;保護現場
         PUSH                  DPL
                  PUSH                 ACC
                  PUSH                 PSW
                  CLR                  RS1           ;改變當前寄存器組為組1
                  SETB         RS0
                  MOV          R1,         #78H            ;顯示緩沖存儲單元首地址
                  MOV                 R2,         #01H            ;從右至左顯示
  MOV             R5,         #08H            ;循環次數,即驅動數碼管的位數
DISP1:          MOV          A,                 @R1
                  MOV          DPTR,         #TAB
                  MOVC                A,                 @A+DPTR
                  MOV          P0,         A          ;送段控
                  MOV          P2,         R2         ;送位控
                  LCALL         DL                           ;延時1毫秒
                  MOV          A,                 R2         ;位控碼送A
                  RL           A                             ;獲得新的位控碼
                  MOV          R2,         A          ;保存新的位控碼
                  INC          R1                           ;獲得新的顯示緩沖單元地址
                  DJNZ         R5,         DISP1      ;循環沒有結束則繼續
DISP2:   POP          PSW                                           ;恢復現場
                  POP                 ACC              
                  POP          DPL
                  POP          DPH
                  RET
;延時1ms子程序(晶振頻率12MHz)DL
DL:     MOV                  R7,                #01H
DL1:    MOV                  R6,                #8EH
DL0:    MOV                  R5,                #02H
        DJNZ                 R5,                $
        DJNZ                 R6,                DL0
        DJNZ                 R7,                DL1
        RET
                END

回復

使用道具 舉報

ID:96682 發表于 2020-11-8 15:48 來自觸屏版 | 顯示全部樓層
改段碼或用反
回復

使用道具 舉報

ID:96682 發表于 2020-11-8 15:53 來自觸屏版 | 顯示全部樓層
改段碼或用反相器都可以
回復

使用道具 舉報

ID:68468 發表于 2020-11-8 20:01 | 顯示全部樓層
佩服佩服,還用匯編寫單片機程序。
段碼求反就行。
回復

使用道具 舉報

ID:827883 發表于 2020-11-8 22:09 | 顯示全部樓層
wc86110 發表于 2020-11-8 15:53
改段碼或用反相器都可以

共陰極的段碼是什么呀,網上沒找到,這個程序有什么問題嗎
回復

使用道具 舉報

ID:414556 發表于 2020-11-8 23:03 | 顯示全部樓層
共陰可以把共陽的碼段取反,前提是硬件對應的腳一致
回復

使用道具 舉報

ID:235200 發表于 2020-11-9 01:04 | 顯示全部樓層
                 MOV          R1,         #78H            ;顯示緩沖存儲單元首地址
                  MOV                 R2,         #0FEH     ;此句修改 #01H            ;從右至左顯示
  MOV             R5,         #08H            ;循環次數,即驅動數碼管的位數
DISP1:          MOV          A,                 @R1
                  MOV          DPTR,         #TAB
                  MOVC                A,                 @A+DPTR
                  CPL           A         ;加這一條
                  MOV          P0,         A          ;送段控
                  MOV          P2,         R2         ;送位控
                  LCALL         DL                           ;延時1毫秒
                  MOV          A,                 R2         ;位控碼送A
                  RL           A                             ;獲得新的位控碼
                  MOV          R2,         A          ;保存新的位控碼
                  INC          R1                           ;獲得新的顯示緩沖單元地址
                  DJNZ         R5,         DISP1      ;循環沒有結束則繼續

按以上方式改2行就可以了
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产一区二区小视频 | 在线欧美一区 | 亚洲a一区二区 | 欧洲成人午夜免费大片 | 亚洲精品一区二区三区四区高清 | 亚洲一区在线日韩在线深爱 | 国产成人精品区一区二区不卡 | 久久久国产精品一区 | 日日操视频 | 国产精品.xx视频.xxtv | 国产日韩欧美一区二区 | 国产乱码一二三区精品 | 国产亚洲精品久久午夜玫瑰园 | 男女网站在线观看 | 久艹网站 | 国产精品a免费一区久久电影 | 国产99久久久国产精品 | 精品久久一区 | 亚洲情侣视频 | 欧美一级免费看 | 少妇无套高潮一二三区 | 久久久久久亚洲国产精品 | 成人av一区二区三区 | 欧美三级电影在线播放 | 黄色一级视频免费 | 成在线人视频免费视频 | 日韩精品一区二区三区中文在线 | 国产在线精品一区二区三区 | 国产精品毛片无码 | 中文字幕日韩欧美一区二区三区 | 伊人网站在线 | 一级午夜aaa免费看三区 | 久久免费看 | 一区二区视屏 | 一区二区三区精品视频 | 亚洲综合中文字幕在线观看 | 国产激情偷乱视频一区二区三区 | 99久久精品视频免费 | 欧美日韩三级 | 国产一级视屏 | 欧洲一区二区视频 |