键盘接口程序设计之加减运算

发布者:MysticalGarden最新更新时间:2012-11-10 来源: 21IC 关键字:键盘接口  加减运算  外部中断 手机看文章 扫描二维码
随时随地手机看文章

/*
程序效果:1、开机时显示899
2、按键key0一次数字加1,按键key1一次数字减1。
加到999时再加1归零,减到000时再减1得999。
3、按住键key2不放实现连加功能,前3s每0.2s加1,以后每0.1s加1.
4、按住键key3不放实现连减功能,前3s每0.2s减1,以后每0.1s减1.
5、版权所有:http://www.51hei.com/ 转帖须保留
*/
     ORG 0000H
     LJMP START
     ORG 0013H //外部中断1
     LJMP IN1
     ORG 0030H
START:SETB IT1 //设置为下降沿触发
          SETB EX1 //打开外部中断1
          SETB EA  //开总中断
          MOV 30H,#09  //赋初值
          MOV 31H,#09
          MOV 32H,#08
LOOP:    LCALL DISPLAY  //调用显示子程序
 SJMP LOOP

IN1:       LCALL DISPLAY
 LCALL DISPLAY
 LCALL DELAY1
 JB P3.3,LA0P //其实这三条语句就是
 LJMP LA0P1  //JB P3.3 LOOP1
LA0P:      LJMP LOOP1    //只是跳转距离没有那么大
LA0P1:     JNB P3.4 ,KEY0 //KEY0按下,转key0,

  //没有则,执行下面的语句
 JNB P3.5,KEY1
 JNB P3.6,KEY2
 JNB P3.7,KEY3
LOOP3:    JNB P3.3,LOOP2  //等待P3.3为高
 LCALL DISPLAY   //为高,调用现实子程序
 LCALL DISPLAY
 LCALL DELAY1 //延时12ms
 JNB P3.3,LOOP3  //P3.3为低,继续等待
 LJMP LOOP1   //P3.3为高,结束
LOOP2:    LCALL DISPLAY
 LJMP LOOP3

KEY0:      LCALL ADD1  //KEY0按下,加1
     LJMP LOOP3
KEY1:      LCALL SUB1    //KEY1按下,加1
     LJMP LOOP3

KEY2:      MOV R2,#15
LAP2:       MOV R1,#33

     LCALL ADD1
LAP1:       LCALL DISPLAY  // 循环完33次约为0.2s
     JB P3.3,LAP4   //  33*6ms
     DJNZ R1,LAP1   //
     DJNZ R2,LAP2 //外循环结束,需3s
           //
LAP5:      MOV R1,#16  
    LCALL ADD1
LAP6:      LCALL DISPLAY  // 循环完16次,需0.1s
    JB P3.3,LAP7 // 16*6ms
    DJNZ R1, LAP6 //
    LJMP LAP5   //快速加1

LAP7:      LCALL DISPLAY //P3.3为高,调用显示子程序
    LCALL DELAY1
    JNB P3.3,LAP6 //P3.3为低,继续快速加1
    LJMP LOOP1    //为高,结束

LAP4:      LCALL DISPLAY
    LCALL DISPLAY
    LCALL DELAY1
    JNB P3.3,LAP1 //为低,重新循环
    LJMP LOOP1    //为高,结束

KEY3:      MOV R2,#15  //以下功能同KEY2
LSP2:      MOV R1,#33

    LCALL SUB1
LSP1:      LCALL DISPLAY
    JB P3.3,LSP4
    DJNZ R1,LSP1
    DJNZ R2,LSP2
 
    MOV R1,#16
    LCALL SUB1
LSP5:      LCALL DISPLAY
    JB P3.3,LSP6
    DJNZ R1, LSP5
    LJMP key3

LSP6:      LCALL DISPLAY
    LCALL DELAY1
    JNB P3.3,LSP5
    LJMP LOOP1


LSP4:     LCALL DISPLAY
   LCALL DISPLAY
   LCALL DELAY1
   JNB P3.3,LSP1

LOOP1:  NOP    //空指令
   RETI  //返回


DISPLAY:MOV DPTR,#TAB //显示没有问题了
    MOV A,#0FBH    //赋初值
    MOV P2,A   //点亮第四个数码管
    XCH A,R0   //暂存A的值
    MOV A,32H
    MOVC A,@A+DPTR 
    MOV P0,A    //显示个位数
    LCALL DELAY   //延时
    XCH A,R0
    RL A   //循环右移,为下次做准备

    MOV P2,A
    XCH A,R0
    MOV A,31H
    MOVC A,@A+DPTR
    MOV P0,A
    LCALL DELAY
    XCH A,R0
    RL A

    MOV P2,A
    MOV A,30H
    MOVC A,@A+DPTR
    MOV P0,A
    LCALL DELAY
    RET

    ADD1: INC 30H     //加1子程序
    MOV A,30H
    CJNE A,#10,LOP1  //判断个位是否满10
    MOV 30H,#00    //是,则清零
    INC 31H     //同时十位加1
    MOV A,31H    
    CJNE A,#10,LOP1  //判断十位是否满10
    MOV 31H,#00   //是,则清零
    INC 32H     //同时百位加1
    MOV A,32H
    CJNE A,#10,LOP1  //判断百位是否满10
    MOV 32H,#00   //是,则清零
LOP1:     NOP    //空指令
    RET    //返回

SUB1:     DEC 30H   //减1子程序
    MOV A,30H
    CJNE A,#0FFH,LOP2  //判断是否减过0
    MOV 30H,#09     //是,则赋9
    DEC 31H
    MOV A,31H
    CJNE A,#0FFH,LOP2
    MOV 31H,#09
    DEC 32H
    MOV A,32H
    CJNE A,#0FFH,LOP2
    MOV 32H,#09
    LOP2: NOP
    RET
        
TAB:        DB 3FH,06H,5BH,4FH,66H  ;数码管显示的数值  
    DB  6DH,7DH,07H,7FH,6FH
DELAY:   MOV R7,#4    //延时时间约为:2MS
DEL2:      MOV R6,#250
DEL1:      DJNZ R6,DEL1
    DJNZ R7,DEL2
    RET
DELAY1: MOV R7,#24    //延时时间约为:12MS
DEL3:      MOV R6,#250
DEL4:      DJNZ R6,DEL4
    DJNZ R7,DEL3
    RET
    END

关键字:键盘接口  加减运算  外部中断 引用地址:键盘接口程序设计之加减运算

上一篇:键盘扫描-数码管递增显示程序
下一篇:跑秒程序-数码管显示

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

汇编电子钟的设计
写在前面: 前天晚上断网之后闲来无事忽然心血来潮想起和谁说过以我现在的水平做个时钟没有什么问题,就准备将它实现了。借用老师的学习板子,一直搞到凌晨2点做出了一个24小时的计数器显示,因为没有学过按键的使用方法,昨天实验课下课后问了老师,她给出了查询方式。昨晚搞了下,可以置数,但是不能实现0~60范围加,只能0~99加。今天上午在老师的指导下,终于可以了,总算没有食言啊。呵呵,下面贴出程序了。 先来个效果图: mini_second equ 30h ;设置0.05秒、秒、分、时的地址 second equ 31h minute equ 32h clock equ
[单片机]
汇编电子钟的设计
8位LED循环闪烁+ 外部中断控制LED闪烁
代码 #include reg51.h #define uint unsigned int #define uchar unsigned char #define ulint unsigned long int sbit led=P0^0; char time=0; void delay(uint x) { uint i; for(i=0;i x;i++) ; } void init_T0() { TMOD=0x01; TH0=0; TL0=0; ET0=1; TR0=1; } void main() { uchar num; EA=1; EX0=1;
[单片机]
8位LED循环闪烁+ <font color='red'>外部中断</font>控制LED闪烁
stm32红外遥控的外部中断实现
花了整整两天时间终于算是基本把红外解码搞明白了,其实并不是很难,用了两天时间,说来惭愧啊,原因就是细节上的问题,不过最终总算找出问题来了。使用外部中断来解码,就先对外部中断进行配置吧 void exti_init() { RCC- APB2ENR|=1 0;//使用外部中断要开AFIO复用时钟,因为要用到用到它的寄存器来选择出发IO口 AFIO- EXTICR |=1 4;//将出发外部中断的IO配置为PB.9 EXTI- IMR|=1 9;//中断线9的中断打开 EXTI- EMR|=1 9;//时间也打开 EXTI- RTSR|=1 9;//上升沿出发中断 } 开始,弄了还几次程
[单片机]
STM32 外部中断的使用
例程名称:外部中断实验 作 者:tkzsld(sky) 实验硬件:火牛开发板 硬件连接:指示灯连接 PD9 按钮连接 PA8 功能描述:本例程实现外部中断的输入试验, 按键次数 1:PD8 PD9 ON 2:PD8 PD9 OFF 3:PD10 PD11 ON 4:PD10 PD11 OFF 5:PD8-11 ON 6:PD8-11 OFF 7: PB5 BEEP ON 8 :BEEP OFF *********************************************************
[单片机]
STM32外部中断程序
原理图: 程序分析: #include led.h #include delay.h #include key.h #include sys.h #include usart.h #include exti.h #include beep.h //STM32开发板实验5 //外部中断实验 int main(void) { delay_init(); //延时函数初始化 NVIC_Configuration(); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级 uart_init(9600);//串口初始化为9600 LED_Init();
[单片机]
STM32<font color='red'>外部中断</font>程序
STM32库函数EXTI_GetFlagStatus和EXTI_GetITStatus的区别
在使用 STM32 的外部中断功能时,我们经常需要确认是否真的产生了外部中断,查看库函数,我们发现了这两个函数:EXTI_GetFlagStatus 和 EXTI_GetITStatus 。原型如下: FlagStatus EXTI_GetFlagStatus ( uint32_t EXTI_Line ); ITStatus EXTI_GetITStatus ( uint32_t EXTI_Line ); 可以看出,这两个函数是十分相似的,EXTI_GetFlagStatus 的作用是 Checks whether the specified EXTI line flag is set or not. 即检查指定的外部
[单片机]
STM32 I/O 作为外部中断输入
I/O口作为外部中断。general purpose input and output STM32 的每个 IO口都可以作为中断输入,要把 IO口作为外部中断输入, 有以下几个步骤: 1) 初始化 IO 口为输入。 这一步设置你要作为外部中断输入的 IO 口的状态,可以设置为上拉/下拉输入,也可以设 置为浮空输入,但浮空的时候外部一定要带上拉,或者下拉电阻。否则可能导致中断不停的触 发。在干扰较大的地方,就算使用了上拉/下拉,也建议使用外部上拉/下拉电阻,这样可以一 定程度防止外部干扰带来的影响。 2) 开启 IO 口复用时钟,设置 IO 口与中断线的映射关系。 STM32 的 IO 口与中断线的对应关系需要配置外部中断配置寄存器
[单片机]
基于51单片机的异步串行接口键盘设计
在信息处理系统中,显示分系统是整个系统的人机界面。显示器画面呈现出的态势图形和数据,是人们决策的重要依据。人工干预手段则是将人们的决策变为系统所能接收信息的必不可少的工具。因此人工干预手段的多寡及有效度直接影响着整个系统的有效度。特别是在处理信息量大,人机交互频繁的系统中,对人工干预手段的要求更高。 笔者结合工作实际,围绕单片机89C51设计了通用异步串行接口键盘作为显示分系统的扩展键盘。目的在于为显示分系统增加一种干预手段。实践表明:此键盘改善了系统的人机界面,提高了系统的处理效率。 1 设计要求与工作原理 1.1 设计要求 (1)扩展键盘键位编码符合显示分系统的约定。   (2)扩展键盘与显示处理机通讯
[单片机]
基于51单片机的异步串行<font color='red'>接口</font><font color='red'>键盘</font>设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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