四个按键控制四个数字递增

发布者:雅逸之风最新更新时间:2018-05-11 来源: eefocus关键字:按键控制  数字递增 手机看文章 扫描二维码
随时随地手机看文章

电路:

采用AT89S52单片机。

P3.0到P3.3外接四个按键。
P3.4到P3.7是控制四个数码管的位选端口,P1口是数码管的段选端口。

要求:

初始数字都是0。
每按一次第一个按键第一个数字 + 1;
每按一次第二个按键第二个数字 + 2;
每按一次第三个按键第三个数字 + 3;
每按一次第四个按键第四个数字 + 4。

;===================================================
最佳答案:

按照要求,用PROTEUS绘制电路,并仿真,效果截图如下:四个按键控制四个数字递增 - 非著名博主 - 电子信息角落

控制程序用汇编语言编写,下列程序,已经调试成功:

    ORG  0000H
    JMP  START

START:
    MOV  30H, #0
    MOV  31H, #0
    MOV  32H, #0
    MOV  33H, #0
;----------------------------
M_LOOP:
    CALL DISP 
    MOV  P3, #0FH
    MOV  A, P3       ;读入按键信息.
    CPL  A
    ANL  A, #0FH
    JZ   M_LOOP      ;没有按键就循环显示.
;--------------------
    CALL DISP        ;延时消抖.
    MOV  P3, #0FH
    MOV  A, P3
    CPL  A
    ANL  A, #0FH
    JZ   M_LOOP      ;再次确认.
    MOV  B, #1
    JB   ACC.0,  J1  ;分支.
    JB   ACC.1,  J2
    JB   ACC.2,  J3
    JB   ACC.3,  J4
    JMP  M_LOOP
;------------------下面计算加1234
J4: INC  B
J3: INC  B
J2: INC  B
J1: MOV  A, #2FH
    ADD  A, B
    MOV  R0, A
    MOV  A, @R0
    ADD  A, B
    MOV  B, #8
    DIV  AB
    MOV  @R0, B
;------------------下面等待按键释放.
J_J:
    CALL DISP 
    MOV  P3, #0FH
    MOV  A, P3
    ORL  A, #0F0H
    CPL  A
    JNZ  J_J
    JMP  M_LOOP
;------------------下面是显示程序
DISP:
    MOV  R0, #30H
    MOV  R2, #10H
D_LOOP:
    MOV  A,  @R0
    INC  R0
    ADD  A,  #(D_TAB - $ - 3)
    MOVC A, @A + PC
    MOV  P3, #0FH
    MOV  P1, A
    MOV  P3, R2
    CALL DELAY
    MOV  A,  R2
    RL   A
    MOV  R2, A
    CJNE R2, #1, D_LOOP
    RET
;----------------------------
D_TAB: 
    DB  0C0H, 0F9H, 0A4H, 0B0H,  99H,  92H, 82H, 0F8H
    DB   80H,  90H,  88H,  83H, 0C6H, 0A1H, 86H,  8EH, 0FFH ;FF是空白的代码.
;---------------------------------------
DELAY:
    MOV  R6, #20
D1: MOV  R7, #250
    DJNZ R7, $
    DJNZ R6, D1
    RET
;---------------------------------------
END

;===================================================

后记:
提问者的电路已经做成了 PCB 板子,显示部分的实际电路是采用了三极管反相器来进行位驱动。
因此,显示程序应该做如下修改:

;------------------下面是显示程序
DISP:
    MOV  R0, #30H
;    MOV  R2, #10H
    MOV  R2, #0EFH
D_LOOP:
    MOV  A,  @R0
    INC  R0
    ADD  A,  #(D_TAB - $ - 3)
    MOVC A, @A + PC
;    MOV  P3, #0FH
    MOV  P3, #255
    MOV  P1, A
    MOV  P3, R2
    CALL DELAY
    MOV  A,  R2
    RL   A
    MOV  R2, A
;    CJNE R2, #1, D_LOOP
    CJNE R2, #254, D_LOOP
    RET
;----------------------------

把修改后的程序通过电子邮件进行传递,稍候即有邮件回复:
太牛了  我弄了好几天了 。。没弄好。。谢谢 行啦。一次就烧录成功了!非常感谢。。
程序工作在实际的电路板上的照片如下:四个按键控制四个数字递增 - 非著名博主 - 电子信息角落


关键字:按键控制  数字递增 引用地址:四个按键控制四个数字递增

上一篇:51单片机汇编语言编程:用定时器控制输出矩形波
下一篇:数码管动态显示 汇编 60进制

推荐阅读最新更新时间:2024-03-16 16:02

【ARM】2410裸机系列-按键查询式控制led
开发环境 硬件平台:FS2410 主机:Ubuntu 12.04 LTS LED灯原理图 按键原理图 按键的接线资源 KSCAN0 - GPE11 KSCAN1 - GPG6 KSCAN2 - GPE13 KSCAN3 - GPG2 EINT0 - GPF0 EINT2 - GPF2 EINT11 - GPG3 EINT19 - GPG11 程序主要原理 这里实现对 K1,K2,K3,K4 这四个键的查询。 主要涉及到K1,K2, K3, K4这四个按键,要用查询的方式进行判断哪个键被按下去了,因此: 将EINT11, EINT19设置为输入,用于读取; 将KSCAN0,KS
[单片机]
【ARM】2410裸机系列-<font color='red'>按键</font>查询式<font color='red'>控制</font>led
ARM裸机——FS2410按键控制LED灯(查询方式)
一、开发环境 1、硬件平台:FS2410(s3c2410) 2、主机:Ubuntu 10.10 二、硬件的原理图(LED和按键) 1、LED灯的原理图: 2、按键的原理图: 按键的接线资源: KSCAN0 - GPE11 KSCAN1 - GPG6 KSCAN2 - GPE13 KSCAN3 - GPG2 EINT0 - GPF0 EINT2 - GPF2 EINT11 - GPG3 EINT19 - GPG11 三、程序的主要原理: 主要涉及到K1,K2, K3, K4这四个按键,要用查询的方式进行判断哪个键被按下去了,因此将EINT11, EINT19设置为输入,用
[单片机]
ARM裸机——FS2410<font color='red'>按键</font><font color='red'>控制</font>LED灯(查询方式)
51单片机按键控制数码管0~9_51单片机外部中断
前面为大家介绍的点亮LED灯、数码管、按键只用到了51单片机的IO资源,我们要是仅仅用单片机点灯、操作数码管,那可真是大才小用了。这些都只是51单片机资源的冰山一角,51单片机还有好多的功能,我后面将为大家一一介绍。今天为大家介绍单片机一个重要的外设——中断。 中断 没接触过单片机的朋友听到这个词肯定很陌生,大家对打断这个词应该不陌生吧,中断字面意思可以理解为中途被打断。大家可以思考一下,什么的中途被什么给打断了呢?想明白了这个问题就说明理解中断了。下面看看百度的解释: 中断是指计算机运行过程中,出现某些意外情况需主机干预时,机器能自动停止正在运行的程序并转入处理新情 况的程序,处理完毕后又返回原被暂停的程
[单片机]
51单片机<font color='red'>按键</font><font color='red'>控制</font>数码管0~9_51单片机外部中断
51单片机(二十五)—— 独立按键控制LED
在51单片机的前面的文章中,我们主要讲述了单片机IO口的输出功能的应用,如LED控制、数码管控制等。这篇文章我们来讲解如何用单片机的IO口读取按键的状态,并根据按键的状态来控制LED。关于51单片机按键输入功能的介绍可以参考文章《51单片机(二十四)—— 独立按键工作原理》 在本文中,实例的代码如下所示。 #define KEY P2 //定义按键输入端口 #define LED P0 //定义LED输出端口 /********************************************************************/ /* 主函数
[单片机]
STM32按键控制LED的亮灭
使用一个按键控制 LED 的亮灭,按键按下时LED亮起,按键松开时LED熄灭。通过按键控制实验来介绍下 IO 口作为输入的使用。本例中用到了GPIOE的PE3管脚。 LED和按键的电路图。 按键 K_LEFT、K_DOWN、K_RIGHT 分别连接在 STM32 F1 芯片 的 PE2、PE3、PE4引脚上。 按键另一端是全部接在 GND 上,这个和我们学习 51单片机 是一样的,采用独立式按键接法,按下时输入到芯片管脚即为低电平。 整个程序实现的流程步骤如下: 初始化按键使用的 端口 及 时钟 按键 检测 处理 按键控制处理 工程文件目录如下。 IO口初始化程序代码在key.c文件中。 /**********
[单片机]
STM32<font color='red'>按键</font><font color='red'>控制</font>LED的亮灭
51单片机C编程(二、按键控制数码管显示)
#include reg51.h sbit k1=P3^0; //p30定义为第一个按键 sbit k2=P3^1; //p31定义为第二个按键 char tab ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x02,0xf8,0x00,0x10}; void delay(int x) { int i,j; for(i=x;i 0l;i--) {for(j=255;j 0;j--);} } void main() { int n=0; P0=0xc0; // 初始显示0 while(1) { if(k1==0) //如果
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved