读矩阵键盘,用数码管显示相应键值

发布者:NexusDream最新更新时间:2012-09-08 来源: 51hei关键字:矩阵键盘  数码管  键值 手机看文章 扫描二维码
随时随地手机看文章
/*****************************************************
     007.ASM

     接线:P0口接数码管
           P2接矩阵键盘
     用定时中断,若一段时间无操作,数码管进入自到循环显示 
      2010.09.05 
   *******************************************************/
   ORG 0000H
     LJMP MAIN
   ORG 000BH
     LJMP INT_T0
   ORG 0020H
MAIN:       ;主程序
     MOV SP,#50H
  MOV DPTR,#LED_DATA   ;取表首地址
  MOV TMOD,#01H     ;设置定时器T0工作模式
  MOV TH0,#15H    ;写计时初值
     MOV TL0,#9FH
  MOV P2,#0FFH    ;P2口赋初值
  MOV R4,#00H     ;赋定时计数初值
  SETB 00H      ;00H为键值改变标志位
  SETB TR0      ;启动定时器T0
  MOV IE,#82H   ;开中断
  LCALL SHOW    ;数码管初始化
loop:      ;主循环
    LCALL KEY_READ   ;读键盘
JBC 00H,LOOP0   ;判断是否有键被按下,有则转去刷新输出并清零定时计数
CJNE R4,#0C8H,LOOP  ;没有键被按下,则判断定时时间是否达到,到,则进入数码管循环输出
LCALL SHOW1    ;没到,则回到主循环,重新扫描键盘
SJMP LOOP
LOOP0:
    LCALL SHOW
    MOV R4,#00H
SJMP LOOP     ;输出刷新完毕,回到主循环,重新扫描键盘

/*键盘扫描程序*/
KEY_READ:
    CLR P2.6    ;P2.6输出低
JB P2.0,N0_0
MOV R0,#01H
LCALL DELAY
JB P2.0,N0_0
JNB P2.0,$
MOV R5,#04H
SETB 00H
SETB P2.6
LJMP NEAT
N0_0:
    JB P2.1,N0_1
MOV R0,#01H
LCALL DELAY
JB P2.1,N0_1
MOV R5,#03H
JNB P2.1,$
SETB 00H
SETB P2.6
LJMP NEAT
N0_1:
    JB P2.2,N0_2
MOV R0,#01H
LCALL DELAY
JB P2.2,N0_2
JNB P2.2,$
MOV R5,#02H
SETB 00H
SETB P2.6
LJMP NEAT
N0_2:
    JB P2.3,N1_0
MOV R0,#01H
LCALL DELAY
JB P2.3,N1_0
JNB P2.3,$
MOV R5,#01H
SETB 00H
SETB P2.6
LJMP NEAT
N1_0:
    SETB P2.6
CLR P2.5
JB P2.0,N1_1
MOV R0,#01H
LCALL DELAY
JB P2.0,N1_1
JNB P2.0,$
MOV R5,#08H
SETB 00H
SETB P2.5
LJMP NEAT
N1_1:
JB P2.1,N1_2
MOV R0,#01H
LCALL DELAY
JB P2.1,N1_2
JNB P2.1,$
MOV R5,#07H
SETB 00H
SETB P2.5
LJMP NEAT
N1_2:
JB P2.2,N1_3
MOV R0,#01H
LCALL DELAY
JB P2.2,N1_3
JNB P2.2,$
MOV R5,#06H
SETB 00H
SETB P2.5
LJMP NEAT
N1_3:
JB P2.3,N2_0
MOV R0,#01H
LCALL DELAY
JB P2.3,N2_0
JNB P2.3,$
MOV R5,#05H
SETB 00H
SETB P2.5
LJMP NEAT
N2_0:
    SETB P2.5
CLR P2.4
JB P2.0,N2_1
MOV R0,#01H
LCALL DELAY
JB P2.0,N2_1
JNB P2.0,$
MOV R5,#0CH
SETB 00H
SETB P2.4
LJMP NEAT
N2_1:
JB P2.1,N2_2
MOV R0,#01H
LCALL DELAY
JB P2.1,N2_2
JNB P2.1,$
MOV R5,#0BH
SETB 00H
SETB P2.4
LJMP NEAT
N2_2:
JB P2.2,N2_3
MOV R0,#01H
LCALL DELAY
JB P2.2,N2_3
JNB P2.2,$
MOV R5,#0AH
SETB 00H
SETB P2.4
LJMP NEAT
N2_3:
JB P2.3,NEAT
MOV R0,#01H
LCALL DELAY
JB P2.3,NEAT
JNB P2.3,$
MOV R5,#09H
SETB 00H
SETB P2.4
LJMP NEAT
NEAT:
    SETB P2.4
    RET
 

/*显示子程序*/
SHOW:
    MOV A,R5
MOVC A,@A+DPTR
MOV P0,A
    RET

/*循环显示子程序*/

SHOW1:      ;
  MOV R3,#00H
LOOP1:
     MOV A,R3
  MOVC A,@A+DPTR
  MOV P0,A
  MOV R0,#35H
  LCALL DELAY
  INC R3
  LCALL KEY_READ
  JB 00H,RETUN1
  CJNE R3,#10H,LOOP1
  MOV R3,#00H
  SJMP LOOP1
RETUN1:
     RET

/*延时子程序*/

DELAY:
D0:  MOV R2,#0FH
D1:  MOV R1,#0BFH
D2:  DJNZ R1,D2
     DJNZ R2,D1
  DJNZ R0,D0
  RET   
    

/*定时中断T0处理子程序*/


INT_T0:
     CLR EA
     PUSH ACC
  INC R4
  MOV TH0,#15H
     MOV TL0,#9FH
  POP ACC
  SETB EA
     RETI

/*数码管显示代码,0~F*/

LED_DATA:
     DB 03H,9FH,25H,0DH,99H,49H,41H,1FH
  DB 01H,09H,11H,0C1H,63H,85H,61H,71H

  END
关键字:矩阵键盘  数码管  键值 引用地址:读矩阵键盘,用数码管显示相应键值

上一篇:电子测速里程防盗报警器设计
下一篇:8位数码管显示电子时钟c51程序

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

TM1637四位数码管模块驱动(TM1637.h头文件)51单片机C语言
TM1637四位数码管模块是一个带时钟点的4位共阳数码管(0.36英寸)的显示模块,驱动芯片为TM1637,驱动方式为IIC,因此只需2根信号线即可使单片机控制4位8段数码管(数码管8级灰度可调)。 控制接口:共4个引脚(GND、VCC、DIO、CLK),GND为地,VCC为供电电源,DIO为数据输入输出脚,CLK为时钟信号脚。 TM1637.h单片机源程序如下: sbit CLK= P3^4; //定义模拟IIC总线的时钟线 sbit DIO = P3^5; //定义模拟IIC总线的数据线 code unsigned char tab = { 0x3F,/*0*/ 0x06,/*1*/
[单片机]
TM1637四位<font color='red'>数码管</font>模块驱动(TM1637.h头文件)51单片机C语言
51单片机STC89C52 矩阵键盘数码管显示
WELA BIT P2.7 DULA BIT P2.6 DIOLA BIT P2.5 FM BIT P2.3 ORG 0000H SETB DIOLA MOV SP,#0E0H LOOP0: LCALL key_Scan JZ LOOP0 LCALL DELAY20MS LCALL key_Scan JZ LOOP0 MOV P1,A LCALL Smg HERE0: LCALL key_Scan ;等待按键释放 JZ LOOP0 LCALL DELAY20MS SJMP HERE0 key_Scan: SETB RS1 MOV P3,#0FH ORL P3,#0FH MOV
[单片机]
自制单片机之三----数码管电路的制做与驱动
数码管的使用方法与发光二极管没什么区别,只是把七或八只发光二极管组合在一个模件上组成了个8字和小数点,用以显示数字。为了减少管脚,把各个发光管的其中同一个极接在一起作为共用点,因此就产生了共阳极和共阴极数码之说。共阳管就是把各个发光管的正极接在一起,而共阴管就刚好相反。见下图: iframe id="iframe_0.3267470763530582" src="data:text/html;charset=utf8,%3Cimg%20id=%22img%22%20src=%22http://hiphotos.baidu.com/txz01/pic/item/3f24f244448bca8bb3b7dca7.jpg?_=3264
[单片机]
自制单片机之三----<font color='red'>数码管</font>电路的制做与驱动
【自学51单片机】6 ---数码管动态显示、中断系统介绍
1、数码管的动态显示 1.1 动态显示基本原理 静态显示:通过三八译码器控制一个数码管显示数值。 动态显示:又称动态扫描,通过轮流点亮数码管(一个时刻只有一个点亮),利用人眼视觉的余晖效应,让人看数码管看起来全部点亮。 如何实现动态显示? 把数码管的整体扫描时间(整体扫描时间 =单个数码管点亮时间*数码管个数)限定在10ms以内即可。当刷新频率大于100HZ,即刷新时间小于10ms,就可做到无闪烁。设计程序时选一个接近10ms,又比较规整的值就可。 1.2 数码管动态显示秒表(0~999999) 程序流程图 程序 #include reg52.h sbit ADDR0 = P1^0; sbit ADDR1 = P1
[单片机]
【自学51单片机】6 ---<font color='red'>数码管</font>动态显示、中断系统介绍
拉暮式数码管显示
一、设计任务 1、单片机的P0口接在7SEG-MPX8上,P2.0~P2.3口接74LS138的A 、B、C口,Y0~Y7接在数码管位选的1~8上。用单片实现:数字1~8从数码管的最右边依次向左边移动,就像拉幕是一样。 三、设计程序 //拉暮式显示数字1—8 DISP_CNT EQU 30H TCNT EQU 31H ORG 00H SJMP START ORG 0BH LJMP INT_T0 START: MOV DISP_CNT,#00H MOV TCNT,#00H MOV P2,#00H MOV TMOD,#01H MOV TH0,#(65536-5000)/256
[单片机]
MSP430学习笔记7-4*4键盘的对应数码管显示
这个例程也是开发板上面的一个经典例程,我对程序的框架进行了修改,更适合以后的调用。具体的4*4键盘扫描原理较为基础这里不再赘述,这里我认为比较重要的是要养成一个良好的写程序的习惯,想4*4键盘扫描这样的函数可以写成一个固定的C或者H文件,便于以后调用。先看看主程序: /*********************************************** 程序功能:扫描4X4键盘并将键值在数码管上显示 ------------------------------------------------ 测试说明:按动K1~K16按键,观察数码管显示 **************************
[单片机]
第6课 数码管静态显示
1、数码管显示原理 数码管是单片机应用系统中常用的一种显示器件,由于其价格低廉、操作简单,而被广泛的应用于各种数字显示系统中,常见的数码管如图1所示。 根据外观的不同,数码管又为分1位数码管、2位数码管、3位数码管、四位数码管等种类,如图2所示。 但不论是几位一体的数码管,其显示原理都是一样的,都是靠内部发光二极管发光来进行显示的。下面我们以1位数码管为例介绍其显示原理。 1、数码管显示的原理 数码管内部的电路如图3所示, 图3 数码管内部电路 图3中,显示一个完整的8字,需要7个小段,外加一个小数点,共8段,分别称为a段、b段、c段、d段、e段、f段、g段、dp段,每段内部都集成了一个发光二
[单片机]
第6课 <font color='red'>数码管</font>静态显示
单片机内外部资源操作篇之数码管静态显示
首先,来了解下数码管显示原理: (本图片来源:百度) 数码管是靠点亮内部的发光二极管来显示。一位数码管有10个引脚,显示一个8字需要7个小段,再加上一个小数点,所以内部总共有8个小的发光二极管, 第3个引脚与第8个引脚连接在一起为公共端。如果这个公共端接地,则为共阴极数码管;如果接+5V电压,则为共阳极数码管。如下图所示: 我所用的实验板上的数码管是共阴极数码管。下图为数码管与单片机I/O口连接图: 我们来看原理图: ①.图中U1、U2为两个74HC573锁存器,U1用来向数码管送段选信号,U2用来向数码管送位选信号。U2的输出端Q0~Q5分别接到六个数码管的
[单片机]
单片机内外部资源操作篇之<font color='red'>数码管</font>静态显示
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • ARM裸机篇--按键中断
    先看看GPOI的输入实验:按键电路图:GPF1管教的功能:EINT1要使用GPF1作为EINT1的功能时,只要将GPFCON的3:2位配置成10就可以了!GPF1先配 ...
  • 网上下的--ARM入门笔记
    简单的介绍打今天起菜鸟的ARM笔记算是开张了,也算给我的这些笔记找个存的地方。为什么要发布出来?也许是大家感兴趣的,其实这些笔记之所 ...
  • 学习ARM开发(23)
    三个任务准备与运行结果下来看看创建任务和任运的栈空间怎么样的,以及运行输出。Made in china by UCSDN(caijunsheng)Lichee 1 0 0 ...
  • 学习ARM开发(22)
    关闭中断与打开中断中断是一种高效的对话机制,但有时并不想程序运行的过程中中断运行,比如正在打印东西,但程序突然中断了,又让另外一个 ...
  • 学习ARM开发(21)
    先要声明任务指针,因为后面需要使用。 任务指针 volatile TASK_TCB* volatile g_pCurrentTask = NULL;volatile TASK_TCB* vol ...
  • 学习ARM开发(20)
  • 学习ARM开发(19)
  • 学习ARM开发(14)
  • 学习ARM开发(15)
何立民专栏 单片机及嵌入式宝典

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

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