按键与数码管汇编例程

发布者:脑力激荡最新更新时间:2012-11-15 来源: 21IC 关键字:按键  数码管  汇编例程 手机看文章 扫描二维码
随时随地手机看文章

/*
程序效果:八个数码管同时显示,按键最后按下的八个数值
*/
   ORG 0000H
   LJMP START
   ORG 0030H
START:    MOV 30H,#00   //赋初值
   MOV 31H,#00
   MOV 32H,#00
   MOV 33H,#00
   MOV 34H,#00
   MOV 35H,#00
   MOV 36H,#00
   MOV 37H,#00
   MOV P1,#0FFH //打开最右边的数码管
   MOV P2,#00  //给P2口送0值
LOOP:     LCALL KEY  //不断扫描键盘 
   LCALL DISPLAY  //不断显示值
   LJMP  LOOP
//键盘扫描子程序
KEY:         MOV R0,#0FEH   //赋初值,用于循环,不断扫描键值
   MOV R2,#04   //总循环4次
LRP:         MOV A,R0  //暂存A的值
   MOV P0,A
   RL A    //循环左移1位
   XCH A,R0
   MOV A,P0   //读?P0口的值
   CJNE A,#7EH,LKP  //判断按键0是否按下
   MOV 40H,#3FH  //是,则将键值暂存在40h单元中
LFP:         MOV A,P0  //读?P0口的值
   CJNE A,#7EH, LKOP1 //判断按键是否松手
   LCALL DISPLAY  //按键没有松手,继续显示
   LJMP  LFP    //等待按键松手,否则继续循环
LKP:        CJNE A,#0BEH,LKP1  //以下功能同上
   MOV 40H,#66H 
LFP1:     MOV A,P0
   CJNE A,#0BEH,LKOP1
   LCALL DISPLAY
   LJMP LFP1
LKP1:      CJNE A,#0DEH,LKP2
   MOV 40H,#7FH
LFP2:       MOV A,P0
   CJNE A,#0DEH,LKOP1
   LCALL DISPLAY
   LJMP LFP2
LKP2:       CJNE A,#0EEH,LKP3
   MOV 40H,#39H
LFP3:       MOV A,P0
   CJNE A,#0EEH,LKOP1
   LCALL DISPLAY
   LJMP LFP3

LKP3:       CJNE A,#7DH,LKP4
   MOV 40H,#06H
LFP4:       MOV A,P0
   CJNE A,#7DH,LKOP1
   LCALL DISPLAY
   LJMP LFP4
LKP4:       CJNE A,#0BDH,LKP5
   MOV 40H,#06DH
LFP5:       MOV A,P0
   CJNE A,#0BDH,LKOP1
   LCALL DISPLAY
   LJMP LFP5
LKP5:      CJNE A,#0DDH,LKP6
   MOV 40H,#6FH
LFP6:       MOV A,P0
   CJNE A,#0DDH,LKOP1
   LCALL DISPLAY
   LJMP LFP6
    
LKOP1:    LJMP LKOP  //加本条语句的作用是:扩大CJNE的跳转范围

 

LKP6:      CJNE A,#0EDH,LKP7
   MOV 40H,#5EH
LFP7:       MOV A,P0
   CJNE A,#0EDH,LKOP1
   LCALL DISPLAY
   LJMP LFP7

LKP7:      CJNE A,#7BH,LKP8
   MOV 40H,#5BH
LFP8:       MOV A,P0
   CJNE A,#7BH,LKOP1
   LCALL DISPLAY
   LJMP LFP8
LKP8:      CJNE A,#0BBH,LKP9
   MOV 40H,#7DH
LFP9:       MOV A,P0
   CJNE A,#0BBH,LKOP
   LCALL DISPLAY
   LJMP LFP9
LKP9:      CJNE A,#0DBH,LKP10
         MOV 40H,#77H
LFP10:     MOV A,P0
   CJNE A,#0DBH,LKOP
   LCALL DISPLAY
   LJMP LFP10
LKP10:     CJNE A,#0EBH,LKP11
   MOV 40H,#79H
LFP11:     MOV A,P0
   CJNE A,#0EBH,LKOP
   LCALL DISPLAY
   LJMP LFP11

LKP11:    CJNE A,#77H,LKP12
   MOV 40H,#4FH
LFP12:   MOV A,P0
   CJNE A,#77H,LKOP
   LCALL DISPLAY
   LJMP LFP12
LKP12:    CJNE A,#0B7H,LKP13
   MOV 40H,#07H
LFP13:     MOV A,P0
   CJNE A,#0B7H,LKOP
   LCALL DISPLAY
   LJMP LFP13
LKP13:   CJNE A,#0D7H,LKP14
   MOV 40H,#7CH
LFP14:     MOV A,P0
   CJNE A,#0D7H,LKOP
   LCALL DISPLAY
   LJMP LFP14
LKP14:   CJNE A,#0E7H,LKP15
   MOV 40H,#71H
LFP15:     MOV A,P0
   CJNE A,#0E7H,LKOP
   LCALL DISPLAY
   LJMP LFP15
LKOP:    MOV 37H,36H //以下语句的作用是:在有按键按下时
   MOV 36H,35H  //所有数据左移一位,空出30H单元
   MOV 35H,34H
   MOV 34H,33H
   MOV 33H,32H
   MOV 32H,31H
   MOV 31H,30H
   MOV 30H,40H
LKP15:     DJNZ  R2,LRP1  //以下三条语句的作用是:扩大DJNZ的跳转范围
   LJMP LRP2
LRP1:      LJMP LRP
LRP2:    NOP
   RET
//显示子程序
DISPLAY: MOV R1,#0FFH 
   MOV P1,R1   //点亮最右边的数码管
   MOV P2,30H   //显示30H单元的内容
   LCALL DELAY  //延时,使数码管更加亮,但时间要适宜
   DEC R1    //准备点亮下一个数码管

   MOV P1,R1  //点亮下一个数码管
   MOV P2,31H
   LCALL DELAY
   DEC  R1

   MOV P1,R1
   MOV P2,32H
   LCALL DELAY
   DEC  R1

   MOV P1,R1
   MOV P2,33H
   LCALL DELAY
   DEC  R1

   MOV P1,R1
   MOV P2,34H
   LCALL DELAY
   DEC  R1

   MOV P1,R1
   MOV P2,35H
   LCALL DELAY
   DEC  R1

   MOV P1,R1
   MOV P2,36H
   LCALL DELAY
   DEC  R1

   MOV P1,R1
   MOV P2,37H
   LCALL DELAY
   RET
//延时时间约为:2us*250=15ms
DELAY:    MOV R6,#250
DEL1:    DJNZ R6,DEL1
   RET
   END
 

关键字:按键  数码管  汇编例程 引用地址:按键与数码管汇编例程

上一篇:简单的4*4矩阵键盘扫描程序
下一篇:单片机编程中C语言和汇编的差异

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

STM8-按键切换灯的亮灭
目的:熟悉按位读入语句GPIO_ReadInputPin(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef GPIO_Pin);的使用 #include stm8s.h #define ulong unsigned long void delay(ulong i) { while(i--); }//延时函数 void main(void)////////////主函数 { unsigned char flag=0; GPIO_DeInit(GPIOD); GPIO_Init(GPIOD, GPIO_PIN_0, GPIO_MODE_OUT_PP_LOW_FAST); GPIO_De
[单片机]
51单片机IO口直接驱动LED数码管方法
1.实验任务   如图13所示,利用AT89S51 单片机 的P0端口的P0.0-P0.7连接到一个共阴 数码管 的a-h的笔段上,数码管的公共端接地。在数码管上循环显示0-9数字,时间间隔0.2秒。 2. 电路 原理图             图4.7.1 3.系统板上硬件连线   把“单片机系统”区域中的P0.0/AD0-P0.7/AD7端口用8芯排线连接到“四路静态数码显示模块”区域中的任一个数码管的a-h端口上;要求:P0.0/AD0与a相连,P0.1/AD1与b相连,P0.2/AD2与c相连,……,P0.7/AD7与h相连。 4. 程序设计内容 (1). LED 数码显示原理   七段LED显示器内部由七个条形 发光
[单片机]
51单片机IO口直接驱动LED<font color='red'>数码管</font>方法
基于51单片机的交通信号灯系统设计
功能: 十字路口交通灯控制程序: 正常时,EW方向计时60s,SN方向计时40s 若按时间加按键(Add_Button)按钮,EW、SN方向各加5s,不可大于99s,79s 若按时间减按键(Reduces_Button)按键,EW、SN方向各减5s,不可小于40s,20s 若按EW方向强制通行(QZ_EW_Btton)按钮,EW方向强制通行,SN方向禁止通行 若按SN方向强制通行(QZ_SN_Btton)按钮,SN方向强制通行,EW方向禁止通行。 程序运行图: 仿真原理图: 部分程序: / #define TRAFFIC_GLOBAL 1 #include TRAFFIC.H /******************
[单片机]
AM335x(TQ335x)学习笔记——GPIO按键驱动移植
还是按照S5PV210的学习顺序来,我们首先解决按键问题。TQ335x有六个用户按键,分别是上、下、左、右、Enter和ESC。开始我想到的是跟学习S5PV210时一样,编写输入子系统驱动解决按键问题,但是浏览driver/input/keyboard目录时意外的发现了gpio-keys.c,大体上看下该驱动程序,其功能是实现了通用的gpio按键。再去看了下DTS,发现DTS中有对gpio-keys的引用,于是猜到,新的内核不需要自己编写输入子系统驱动,可以通过配置DTS直接解决按键问题。本人最终通过实验证实了这个猜想,下面是实验笔记及本人的一些理解。 (1)确定GPIO管脚 通过查看TQ335x的原理图可以看到,TQ335x的6
[单片机]
#51单片机#数码管静态与动态显示
数码管的静态显示与动态显示 学习数码管的静态与动态显示,首先要清楚,同一个时刻,单片机只能使能一个数码管。 动态显示:轮流点亮数码管,利用人眼的视觉暂留现象,造成多个数码管被点亮的视觉体验。 静态显示:可理解为非动态显示,即不会轮番点亮数码管。在多个数码管的显示中,静态显示的意义不大。 记住:100Hz无闪烁!!! 只要刷新频率大于100Hz,即刷新时间小于10ms,就可以做到无闪烁,这也是动态扫描的硬性指标。 静态显示的演示代码: #include reg52.h //数码管静态显示 unsigned char code LedChar ={//数码管显示的数字0~9 0XC0,0XF9,0XA4,0
[单片机]
#51单片机#<font color='red'>数码管</font>静态与动态显示
第八节:在定时中断函数里执行独立按键的扫描程序
开场白: 上一节讲了在主函数中利用累计定时中断的次数来实现独立按键的检测,但是如果在某些项目中,需要在主函数里间歇性地执行一些一气呵成的耗时任务,当主函数正在处理一气呵成的耗时任务时(前提是没有关闭定时器中断),这个时候如果有按键按下来,就有可能没有及时被响应到而遗漏了。在定时中断函数里处理独立按键的扫描程序,可以避免这个问题。要教会大家一个知识点:如何在上一节的基础上,略作修改,就可以在定时中断函数里处理独立按键的扫描程序。 具体内容,请看源代码讲解。 (1)硬件平台:基于朱兆祺51单片机学习板。用矩阵键盘中的S1和S5号键作为独立按键,记得把输出线P0.4一直输出低电平,模拟独立按键的触发地GND。 (2)实现
[单片机]
51单片机实现带数码管显示的加法简易计算器
一、使用proteus绘制简单的电路图,用于后续仿真 二、编写程序 /******************************************************************************************************************** ---- @Project: LED-74HC595 ---- @File: main.c ---- @Edit: ZHQ ---- @Version: V1.0 ---- @CreationTime: 20200701 ---- @ModifiedTime: 20200701
[单片机]
51单片机实现带<font color='red'>数码管</font>显示的加法简易计算器
ARM7学习---按键测试程序(LPC2103 IO0PIN)
今天一直在学习按键测试程序,看上去很简单,按键嘛谁都会用,很多种单片机里都是用过了,但是今天还是遇到了一个问题,而且花了我半天的时间调试和找问题。刚开始我不会用LPC2103的GPIO,后来查了数据手册,知道了读取IO口的方法是读取IOPIN寄存器,LPC2103使用的是IO0PIN。我程序写好,把按键通过串口反馈信息。但是我一直测试没按键的时候输入按键口状态不稳定,有按键的时候还是很稳定的。我以为程序出错了,一直在修改程序,但是还是一样的情况。后来静下心来想了下,是否IO配置错了?但是检查了好多遍,IO是配置为输入,没什么问题的。后来终于想起来了,我没在按键的IO口加上拉电阻,以前我在51 STC AVR单片机的按键口都不加上拉电
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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