找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 12093|回复: 2
收起左侧

简单单片机记录按键次数,汇编语言

[复制链接]
ID:28497 发表于 2011-3-12 19:26 | 显示全部楼层 |阅读模式

最近刚学单片机,为了方便,用了proteus和keil 电脑仿真,刚调试成功,用两个数码管显示按键次数,经测试正确。

代码可能不是很有效,也希望有朋友帮忙改进.

以此而推可以显示更多位.现传上proteus 设计图和源码,带注解,因为看了论坛上那位肺腑之言的贴,要养好写注解的习惯。

KEYCARD     BIT    00H             ;用于标志是否有键按下
KEYCOU  EQU    5AH        ;用于记录按下键的次数

ORG     0000H             ;程序开始
AJMP    START
ORG     30H               ;为避免占用中断向量区,主程序从30H开始

START:
    MOV    SP,#5FH        ;设置堆栈的初始地址
    MOV    P2,#0H         ;P2,P3的初始化
    MOV    P3,#0FFH
    CLR    KEYCARD         ;有按键标志清0
    MOV    KEYCOU,#0       ;计数初值赋0

LOOP:                      ;循环扫描键盘

    ACALL  KEY_CHECK
    JNB    KEYCARD,DISPLAY
    INC    KEYCOU
      

DISPLAY:                    ;显示程序

MOV    DPTR,#ASCII          ;获得对应的显示码
PUSH B

MOV A,KEYCOU
MOV B,#0AH
DIV AB                       ;选显示第一位高位

 MOVC   A,@A+DPTR
 MOV    P0,A                 ;把显示码传至A口
 SETB P2.1                   ;选通P2.0,显示
ACALL  DELAY1S
CLR P2.1

MOV A, B
POP B
 MOVC   A,@A+DPTR
 MOV    P0,A                 ;把显示码传至A口
 SETB P2.0                   ;选通P2.0,显示
 ACALL  DELAY1S
 CLR P2.0
  AJMP    LOOP

 

KEY_CHECK:                   ;看有没有键按下
    MOV    A,P3
    ANL    A,#0fFH ;逻辑与
    CJNE    A,#0FFH,KEY_CER   ;如果读入的与写出的不相等,延时消抖
    CLR    KEYCARD
    RET

KEY_CER:       ;延时,再读入,看是否真的有键按下
    ACALL    DELAY1S
    MOV    A,P3
    ANL    A,#0FFH
    CJNE    A,#0FFH,KEY_CE
    CLR    KEYCARD
    RET

KEY_CE:
 MOV     A,P3     ;直等到按键放下,则算作一次
 ANL     A,#0FFH
 CJNE    A,#0FFH,KEY_CE
    SETB    KEYCARD        ;真的有键按下,则置标志位
    RET
DELAY1S:       ;延时函数
    MOV    R7,#10
D1:
    MOV    R6,#50
    DJNZ    R6,$
    DJNZ    R7,D1
    RET


ASCII: DB  0C0H,0F9H,0A4H,0B0H,099H
       DB  092H,082H,0F8H,080H,090H
       DB  088H,083H,0C6H,0A1H,086H
       DB  08EH,08CH,0BFH,0FFH


END

 

 

jishu.jpg
回复

使用道具 举报

ID:1 发表于 2011-3-12 21:28 | 显示全部楼层

不错 很牛啊

回复

使用道具 举报

ID:28527 发表于 2011-3-14 00:21 | 显示全部楼层
 学习了,很不错,顶一个
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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