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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

2io5鍵盤模擬音量數碼管顯示程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:829814 發表于 2020-10-30 15:40 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
代碼如下

;*******************************************************************************
;*文件: 5key_volume_con.asm                                                    *
                                                     *
;*版本: ver1.0                                                                 *
;*功能描述: 混合鍵盤模擬音量數碼管顯示                                         *
;*          上兩鍵:左鍵音量-,右鍵音量+                                         *
;*          下三鍵:左鍵音量24級,中鍵音量32級,右鍵音量05級                      *
;*備注:                                                                        *
;*軟件仿真: PROTEUS 6                                                          *
;*******************************************************************************
    KEY_OK      BIT     00H
    VOLNUMB     EQU     22H     
    PHONE       EQU     21H
    COUNTER     EQU     23H     ;用于顯示的計數器
    KEYVAL      EQU     25H
    DISPBUF     EQU     5EH
    FIRST       BIT     P2.7    ;第一位數碼管的位控制
    SECOND      BIT     P2.6    ;第二位數碼管的位控制
    TMRVAR      EQU     60110   ;65536-5000*12/11.0592  定時器初值5毫秒
;===============================================================================        
    ORG     0000H   
    JMP     START
    ORG     0*8+3               ;INT0中斷入口
    RETI
    ORG     1*8+3               ;TIMER0中斷入口
    JMP     INT_T0              ;轉去定時器0中斷服務程序入口
    ORG     2*8+3               ;INT1中斷入口
    RETI
    ORG     3*8+3               ;TIMER1中斷入口
    RETI
    ORG     4*8+3               ;串行中斷入口
    RETI
;===============================================================================
START:
    mov     sp,#5fh
    mov     p1,#0ffh
    mov     p3,#0ffh         
    mov     volnumb,#40h
    call    init_t0
    setb    ea
;===============================================================================
LOOP:;主程
    ACALL KEY
    JB KEY_OK,KEYPROC
    ACALL DISP_VOL
    AJMP LOOP         
;===============================================================================  
disp_vol:;顯示處理
        mov a,volnumb
        swap a
        anl a,#0fh
        mov dispbuf,a;十位到DISPBUF
        mov a,volnumb
        anl a,#0fh
        mov dispbuf+1,a;個位到DISPBUF+1
        ret
;==============================================================================
keyproc:;鍵處理散轉
    mov a,keyval
    mov keyval,#00h
    rl a
    mov dptr,#tab_key
    jmp @a+dptr
tab_key:
    ajmp loop
    ajmp volup
    ajmp voldw
    ajmp volrsum
    ajmp vol24
    ajmp vol05
;===============================================================================
KEY:;鍵盤程序
         clr key_ok;清鍵按下標志
         orl p3,#11000000b;下面三鍵判斷
         clr key_ok
         mov a,p3
         orl a,#00111111b
         cpl a
         jz key_1
         acall delay
         acall delay
         mov a,p3
         orl a,#00111111b
         jz key_1
         nop
         jnb acc.7,keydw1
         nop
         jb acc.6,key_ret
         setb key_ok
         mov keyval,#3
key_ret1:mov a,p3
         orl a,#00111111b
         cpl a
         jnz key_ret1;鍵松開否
         ajmp key_ret
key_ret:ret
keydw1:  
         nop
         jnb acc.6,keydw2
         setb key_ok
         mov keyval,#4
         jmp key_ret1
keydw2:  setb key_ok
         mov keyval,#5
         jmp key_ret1  
key_1:   
         setb p3.6
         clr p3.7 ;vol+按下
         nop
         nop
         jnb p3.6,key01
   
         clr  p3.6;vol-按下
         setb p3.7
         nop
         nop
         jnb  p3.7,key02
         
keyexit: ajmp key_ret
key01:
         acall delay
         acall delay
         nop
         nop
         jb p3.6,key01_ret
         setb key_ok
         mov keyval,#1
         nop
         acall delay
         acall delay
key01_ret:jnb p3.6,$
         ajmp keyexit
key02:
         acall delay
         acall delay
         nop
         nop
         jb p3.7,key02_ret
         setb key_ok
         mov keyval,#2
         nop
         acall delay
         acall delay
key02_ret:jnb p3.7,$
         ajmp keyexit
delay:;                去鍵抖延時
         push psw
         setb rs0
         mov  r7,#50
     d1: mov  r6,#50
     d2: djnz r6,d2
         djnz r7,d1
         pop  psw
         ret
;===============================================================================   
volup:;鍵盤音量+
        mov phone,volnumb
        mov a,phone
        xrl a,#70h
        jz volup1
        acall uaa
        mov volnumb,phone
        jmp loop
volup1: mov volnumb,#70h
        jmp loop
;===============================================================================
voldw:;鍵盤音量-
        mov phone,volnumb
        mov a,phone
        jz voldw1
        acall daa
        mov volnumb,phone
        jmp loop
voldw1: mov volnumb,#00h
        jmp loop
;===============================================================================
volrsum:;32級
        mov volnumb,#32h
        ajmp loop
vol24:;24級
       mov volnumb,#24h
       ajmp loop
vol05:;05級
       mov volnumb,#05h
       ajmp loop
;===============================================================================
uaa:;遞增1
        mov a,phone
        swap a
        anl a,#0fh
        mov r5,a
        mov a,phone
        anl a,#0fh
        nop
        cjne a,#09h,uaa_1
        nop
        mov r4,#00h
        inc r5
        ajmp uaa_2
uaa_1:
        inc a
        mov r4,a
uaa_2:
        mov a,r5
        swap a
        add a,r4
        mov phone,a
        ret
;===============================================================================
daa:;遞減1
        mov a,phone
        swap a
        anl a,#0fh
        mov r5,a
        mov a,phone;
        anl a,#0fh
        jnz daa_1
        mov r4,#09h
        dec r5
        nop
        sjmp daa_2
  daa_1:
        dec a
        mov r4,a
  daa_2:
        mov a,r5;
        swap a
        add a,r4
        mov phone,a
        ret
;===============================================================================   
INIT_T0:                ;初始化T0為5毫秒的定時器
    MOV     TMOD,#01H
    MOV     TH0,#HIGH(TMRVAR)
    MOV     TL0,#LOW(TMRVAR)
    SETB    ET0         ;開T0中斷
    SETB    TR0         ;定時器0開始運行
    RET                 ;返回
;===============================================================================
;以下是中斷程序,實現數碼管顯示
INT_T0:                 ;定時器T0的中斷響應程序
    PUSH    ACC         ;ACC入棧
    PUSH    PSW         ;PSW入棧
    MOV TH0,#HIGH(TMRVAR)
    MOV TL0,#LOW(TMRVAR)
    SETB    FIRST
    SETB    SECOND      ;關顯示
    MOV     A,#DISPBUF  ;顯示緩沖區首地址
    ADD     A,Counter
    MOV     R0,A
    MOV     A,@R0       ;根據計數器的值取相應的顯示緩沖區的值
    MOV     DPTR,#DISPTAB   ;字形表首地址
    MOVC    A,@A+DPTR   ;取字形碼
    MOV     P0,A        ;將字形碼送P0位(段口)
    MOV     A,Counter   ;取計數器的值
    JZ      DISPFIRST   ;如果是0則顯示第一位
    CLR     SECOND      ;否則顯示第二位
    AJMP    DISPNEXT
DISPFIRST:
    CLR     FIRST       ;顯示第一位
DISPNEXT:
    INC     Counter     ;計數器加1
    MOV     A,Counter
    DEC     A           ;如果計數器計到2,則讓它回0
    DEC     A
    JZ      RSTCOUNT
    AJMP    DISPEXIT
RSTCOUNT:
    MOV     Counter,#0  ;計數器的值只能是0或1
DISPEXIT:   
    POP     PSW
    POP     ACC
    RETI
DISPTAB:    DB 28H,7EH,0a4H,64H,72H,61H,21H,7CH,20H,60H
    END

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

使用道具 舉報

沙發
ID:1 發表于 2020-10-31 03:43 | 只看該作者
本帖需要重新編輯補全電路原理圖,源碼,詳細說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美综合一区 | 天天干天天干 | 日韩av一区二区在线 | 91精品久久久久久久 | 国产精品久久久久久影视 | 五月槐花香 | 男人影音 | 国产日韩精品一区二区三区 | 日日综合 | 综合久久99| 免费视频一区二区 | 美女视频一区 | 欧美日韩国产在线观看 | av免费入口| 在线免费国产视频 | 国产精品一区二区三区久久久 | 午夜精品影院 | 亚洲免费视频在线观看 | 亚洲精品久久久久国产 | 91欧美激情一区二区三区成人 | 黄色一级视频 | 国产午夜精品一区二区 | 国产精久久久 | 国产一区二区精品在线 | 日韩在线不卡 | 三级视频在线观看电影 | 日日摸天天添天天添破 | 伊人超碰| 国产成人精品一区二区三区 | 日本人做爰大片免费观看一老师 | 伊人欧美视频 | 午夜视频精品 | 中日韩欧美一级片 | 日韩欧美一级 | 久久久久久黄 | 九七午夜剧场福利写真 | 国产精品美女久久久久久免费 | 九九热在线精品视频 | 一区二区播放 | 欧美精品在线一区 | 91免费看片|