找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2041|回复: 0
打印 上一主题 下一主题
收起左侧

单片机2io5键盘模拟音量数码管显示汇编源码与仿真实例

[复制链接]
跳转到指定楼层
楼主
包括温度检测/4线步进电机/键盘模拟音量/点阵显示等


单片机源程序如下:
  1. ;*******************************************************************************
  2. ;*文件: 5key_volume_con.asm                                                    *
  3. ;*版本: ver1.0                                                                 *
  4. ;*功能描述: 混合键盘模拟音量数码管显示                                         *
  5. ;*          上两键:左键音量-,右键音量+                                         *
  6. ;*          下三键:左键音量24级,中键音量32级,右键音量05级                      *
  7. ;*备注:                                                                        *
  8. ;*软件仿真: PROTEUS 6                                                          *
  9. ;*******************************************************************************
  10.     KEY_OK      BIT     00H
  11.     VOLNUMB     EQU     22H     
  12.     PHONE       EQU     21H
  13.     COUNTER     EQU     23H     ;用于显示的计数器
  14.     KEYVAL      EQU     25H
  15.     DISPBUF     EQU     5EH
  16.     FIRST       BIT     P2.7    ;第一位数码管的位控制
  17.     SECOND      BIT     P2.6    ;第二位数码管的位控制
  18.     TMRVAR      EQU     60110   ;65536-5000*12/11.0592  定时器初值5毫秒
  19. ;===============================================================================        
  20.     ORG     0000H   
  21.     JMP     START
  22.     ORG     0*8+3               ;INT0中断入口
  23.     RETI
  24.     ORG     1*8+3               ;TIMER0中断入口
  25.     JMP     INT_T0              ;转去定时器0中断服务程序入口
  26.     ORG     2*8+3               ;INT1中断入口
  27.     RETI
  28.     ORG     3*8+3               ;TIMER1中断入口
  29.     RETI
  30.     ORG     4*8+3               ;串行中断入口
  31.     RETI
  32. ;===============================================================================
  33. START:
  34.     mov     sp,#5fh
  35.     mov     p1,#0ffh
  36.     mov     p3,#0ffh         
  37.     mov     volnumb,#40h
  38.     call    init_t0
  39.     setb    ea
  40. ;===============================================================================
  41. LOOP:;主程
  42.     ACALL KEY
  43.     JB KEY_OK,KEYPROC
  44.     ACALL DISP_VOL
  45.     AJMP LOOP         
  46. ;===============================================================================  
  47. disp_vol:;显示处理
  48.         mov a,volnumb
  49.         swap a
  50.         anl a,#0fh
  51.         mov dispbuf,a;十位到DISPBUF
  52.         mov a,volnumb
  53.         anl a,#0fh
  54.         mov dispbuf+1,a;个位到DISPBUF+1
  55.         ret
  56. ;==============================================================================
  57. keyproc:;键处理散转
  58.     mov a,keyval
  59.     mov keyval,#00h
  60.     rl a
  61.     mov dptr,#tab_key
  62.     jmp @a+dptr
  63. tab_key:
  64.     ajmp loop
  65.     ajmp volup
  66.     ajmp voldw
  67.     ajmp volrsum
  68.     ajmp vol24
  69.     ajmp vol05
  70. ;===============================================================================
  71. KEY:;键盘程序
  72.          clr key_ok;清键按下标志
  73.          orl p3,#11000000b;下面三键判断
  74.          clr key_ok
  75.          mov a,p3
  76.          orl a,#00111111b
  77.          cpl a
  78.          jz key_1
  79.          acall delay
  80.          acall delay
  81.          mov a,p3
  82.          orl a,#00111111b
  83.          jz key_1
  84.          nop
  85.          jnb acc.7,keydw1
  86.          nop
  87.          jb acc.6,key_ret
  88.          setb key_ok
  89.          mov keyval,#3
  90. key_ret1:mov a,p3
  91.          orl a,#00111111b
  92.          cpl a
  93.          jnz key_ret1;键松开否
  94.          ajmp key_ret
  95. key_ret:ret

  96. keydw1:  
  97.          nop
  98.          jnb acc.6,keydw2
  99.          setb key_ok
  100.          mov keyval,#4
  101.          jmp key_ret1
  102. keydw2:  setb key_ok
  103.          mov keyval,#5
  104.          jmp key_ret1  

  105. key_1:   
  106.          setb p3.6
  107.          clr p3.7 ;vol+按下
  108.          nop
  109.          nop
  110.          jnb p3.6,key01
  111.    
  112.          clr  p3.6;vol-按下
  113.          setb p3.7
  114.          nop
  115.          nop
  116.          jnb  p3.7,key02
  117.          
  118. keyexit: ajmp key_ret

  119. key01:
  120.          acall delay
  121.          acall delay
  122.          nop
  123.          nop
  124.          jb p3.6,key01_ret
  125.          setb key_ok
  126.          mov keyval,#1
  127.          nop
  128.          acall delay
  129.          acall delay
  130. key01_ret:jnb p3.6,$
  131.          ajmp keyexit
  132. key02:
  133.          acall delay
  134.          acall delay
  135.          nop
  136.          nop
  137.          jb p3.7,key02_ret
  138.          setb key_ok
  139.          mov keyval,#2
  140.          nop
  141.          acall delay
  142.          acall delay
  143. key02_ret:jnb p3.7,$
  144.          ajmp keyexit
  145. delay:;                去键抖延时
  146.          push psw
  147.          setb rs0
  148.          mov  r7,#50
  149.      d1: mov  r6,#50
  150.      d2: djnz r6,d2
  151.          djnz r7,d1
  152.          pop  psw
  153.          ret
  154. ;===============================================================================   
  155. volup:;键盘音量+
  156.         mov phone,volnumb
  157.         mov a,phone
  158.         xrl a,#70h
  159.         jz volup1
  160.         acall uaa
  161.         mov volnumb,phone
  162.         jmp loop
  163. volup1: mov volnumb,#70h
  164.         jmp loop
  165. ;===============================================================================
  166. voldw:;键盘音量-
  167.         mov phone,volnumb
  168.         mov a,phone
  169.         jz voldw1
  170.         acall daa
  171.         mov volnumb,phone
  172.         jmp loop
  173. voldw1: mov volnumb,#00h
  174.         jmp loop
  175. ;===============================================================================
  176. volrsum:;32级
  177.         mov volnumb,#32h
  178.         ajmp loop

  179. vol24:;24级
  180.        mov volnumb,#24h
  181.        ajmp loop

  182. vol05:;05级
  183.        mov volnumb,#05h
  184.        ajmp loop

  185. ;===============================================================================
  186. uaa:;递增1
  187.         mov a,phone
  188.         swap a
  189.         anl a,#0fh
  190.         mov r5,a
  191.         mov a,phone
  192.         anl a,#0fh
  193.         nop
  194.         cjne a,#09h,uaa_1
  195.         nop
  196.         mov r4,#00h
  197.         inc r5
  198.         ajmp uaa_2
  199. uaa_1:
  200.         inc a
  201.         mov r4,a
  202. uaa_2:
  203.         mov a,r5
  204.         swap a
  205.         add a,r4
  206.         mov phone,a
  207.         ret
  208. ;===============================================================================
  209. daa:;递减1
  210.         mov a,phone
  211.         swap a
  212.         anl a,#0fh
  213.         mov r5,a
  214.         mov a,phone;
  215.         anl a,#0fh
  216.         jnz daa_1
  217.         mov r4,#09h
  218.         dec r5
  219.         nop
  220.         sjmp daa_2
  221.   daa_1:
  222.         dec a
  223.         mov r4,a
  224.   daa_2:
  225.         mov a,r5;
  226.         swap a
  227.         add a,r4
  228.         mov phone,a
  229.         ret
  230. ;===============================================================================   
  231. INIT_T0:                ;初始化T0为5毫秒的定时器
  232.     MOV     TMOD,#01H
  233.     MOV     TH0,#HIGH(TMRVAR)
  234.     MOV     TL0,#LOW(TMRVAR)
  235.     SETB    ET0         ;开T0中断
  236.     SETB    TR0         ;定时器0开始运行
  237.     RET                 ;返回
  238. ;===============================================================================
  239. ;以下是中断程序,实现数码管显示
  240. INT_T0:                 ;定时器T0的中断响应程序
  241.     PUSH    ACC         ;ACC入栈
  242.     PUSH    PSW         ;PSW入栈
  243.     MOV TH0,#HIGH(TMRVAR)
  244. ……………………

  245. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
Proteus单片机仿真实例大全[1].part001.rar (500 KB, 下载次数: 11)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表