程序的主流程如图1所示。
图1 程序的主流程
程序主要分为两个部分:一个部分不停地监测是否有按键按下,另一个部分查看哪一个键按下。
在初始状态下,4个列输出端口输出低电平,即RD0~RD3输出低电平,然后持续监测4个行输入端口RD4~RD7的状态是不是高电平。
如果没有按键按下,则RD4~RD7的状态是高电平;如果有按键按下,则被按下的键对应的行输入端口的电平就会被拉低,RD4~RD7会有低电平出现,对4个行输入端口RD4~RD7的电平的监测即为对按键的监测。
在4个行输入端口RD4~RD7上出现低电平时,就转到查询程序SEE。键盘扫描子程序流程如图2所示,按键查询子程序流程如图3所示。
图2 键盘扫描子程序流程
图3 按键查询子程序流程[page]
查询程序SEE分以下5个步骤。
· 在4个列输出端口RD0~RD3上输出,判断哪一个端口输入低电平。
· 在4个列输出端口RD0~RD3上输出0111,查看4个行输入端口RD4~RD7是否有低电平出现;如果有低电平出现,则可以确定哪个键按下,跳出查询程序:否则进入下一项。
· 在4个列输出端口RD0~RD3上输出1011,查看4个行输入端口RD4~RD7是否有低电平出现;如果有低电平出现,可以确定哪个键按下,并跳出查询程序;否则进入下一项。
· 在4个列输出端口RD0~RD3上输出1101,查看4个行输入端口RD4~RD7是否有低电平出现;如果有低电平出现,可以确定哪个键按下,跳出查询程序;否则进入下一顼。
· 在4个列输出端口RD0~RD3上输出1110,查看4个行输入端口RD4~RD7是否有低电平出现;如果有低电平出现,可以确定哪个键按下,跳出查询程序;否则进入下一项。
程序清单如下。
(1)主程序。
完成初始化,对4×4的键盘输入进行扫描,然后将其输入通过端口D的低4位输出,显示时先闪两下再输出。
(2)键盘扫描子程序。
TEST为出口参数,若有键按下则子程序返回时TEST=0FFH,若没有键按下,则子程序返回时TEST=0。[page]
(3)按键查询子程序。
当有按键按下时,运行该程序。VALUE中存放被按下的按键的键值,S0~515的键值为0~15。
(4)延时自程序。
COUNT1存放外部循环次数,COUNT2存放内部循环次数。
关键字:PIC单片机 人机接口 行列式键盘
引用地址:
PIC单片机人机接口模块4×4行列式键盘的程序设计
推荐阅读最新更新时间:2024-03-16 13:20
如何解决PIC单片机硬件死锁的问题
1、频繁插拔电时,PIC单片机容易死机。用一个10K电阻并在LM7805的5V输出端到地。 2、单片机的复位端的电容不能太大。 使用PIC单片机去设计工控电路,最头痛的问题,就是 PIC 单片机在受干扰后经常硬件死锁,大部份人归咎于“CMOS的可控硅效应” 因而产生死锁现象,一般都认为“死锁后硬件复位都是无效的,只有断电”。但是一个成熟的商品,那须要你去断电呢? 就好像一台电冰箱,压缩机一启动,产生干扰, CPU 受干扰因而‘硬件死锁’,死机在那儿,假如发现了,可以马上拔掉电源插头,隔几秒再插回,如此的动作可以接受吗? 假如死机时没发现,死机几十天,你猜它会如何呢? 应该是供给CPU电源的稳压IC烧毁了。 PIC单片机
[单片机]
51和pic单片机都能用的spi bus程序
#define mcu_51 //单片机选择 /*pic18- mcu_pic_18 avr- mcu_avr /*******************************/ #define _CPOL 0 //模式配置 #define _CPHA 0 //模式配置 /*******************************/ #ifdef mcu_51 #include REG51.h #define SCK_IO(x) (0?(P1&=0XFE):(P1|=0X01))//1- 输出 0- 输入 #define MOSI_IO(x) (0?(P1&=0XFD):(P1|=0X02)) #define MIS
[单片机]
PIC单片机(PIC16F877A)定时器
#include pic.h #define uchar unsigned char #define uint unsigned int uchar i,temp; uchar count; void delay(uint x) //1ms { uint y,z; for(y=x;y 0;y--) for(z=25;z 0;z--); } void init(void) { T1CON=0x01;//使能定时器1,时钟为外部晶振四分频 PIE1|=0x01;//允许中断 INTCON|=0xc0;//开全局中断和第一外设中断 TMR1H=15536/256;//50
[单片机]
PIC单片机的各种内部硬件功能及用法介绍
pic单片机是这个时代的宠儿,而在往期pic单片机相关文章中,小编曾对pic单片机的I/O接口进行过阐述,但I/O并非pic单片机内部硬件资源的全部内容。因此在本文中,将对pic单片机的各种内部硬件资源加以介绍,以帮助大家全面掌握pic单片机打下夯实基础。 数据存储器在单片机PIC16F84中,除了有存放程序的程序存储器外,还有数据存储器。单片机在执行程序过程中,往往需要随时向单片机输入一些数据,而且有些数据还可能随时改变。在这种情况下就需用数据存储器。由于数据存储器不但要能随时读取存放在其各个单元内的数据,而且还需随时写进新的数据,或改写原来的数据。因此,数据存储器需由随机存储器RAM构成。RAM存储器在断电时,所存数据随
[单片机]
PIC单片机人机接口模块独立式按键的元器件选型
独立式键盘就是一个按键对应着一个端口输入,每一个按键都有一个按键电路来区分其是否按下。下面将首先介绍按键的结构,然后再介绍按键的外扩电路,以便于读者对独立式键盘有一个清晰和完整的认识。 按键分为单路和多路,在实际的应用中,按键和开关的功能是基本相同的,现在将基本的按键及开关汇总,如图所示。 图 基本按键和开关 下面的按键及开关中不仅有单路的、双路的,还有多路的。有些开关是选择开关,一般选择开关只有两路,不是第一路就是第二路;另外,还有一选二的开关,即有两路开关,可以选择两路同时开或关。 这些例子基本上涵盖了实用的按键和开关,另外还需注意,尽管按键或者开关的电路相同,但是其形状和指标都不同。例如,平时使用
[单片机]
PIC单片机软件开发的技巧
笔者的项目是有关机器人控制的实现。控制部分采用PICl6F7X系列单片机,运用汇编语言编程,运行速度较快,能够达到系统的要求。在这里使用的大多是数字信号的控制,电机的控制只有开和合两种状态。在动作的过程中需要两只手臂、身体、头部、脚部等的协调动作。整个控制系统比较复杂,因而在PIC程序编写和空间分配方面需要注意一些问题。 1 动作标志位的使用 在整个控制中,组合的动作很多,当所有动作定位都通过光电开关控制时,在程序编写上就有一些问题。如要求左手上升到鼓掌位、右手上升到举手位(手初始位置在最下的放下位),光电开关0有效(即为0时是挡住),到达正确位置。用简单的理解可以写成下面的程序: list P=16c73 ca
[单片机]
PIC单片机对LED数码管矩阵键盘显示的设计
#include #include “。./head/config.h” __CONFIG(HS&WDTDIS&LVPDIS&PWRTEN);//对熔丝位进行设置 单片机LED共阳极段码表(带小数点) 0~9 const char table1[]={0X0A,0XFA,0X8C,0XA8,0X78,0X29,0X09,0XBA,0X08,0X28,0x18,0x49,0x0f,0xc8,0x0d,0x1d}; 数码管位码表 const char table[] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; unsigned int result = 0,lastresult = 0;
[单片机]
基于CPLD的DSP人机接口模块设计
CPLD(Complex programmable Logic Device,复杂可编程逻辑器件)是在传统的PAL、GAL基础上发展而来的,具有多种工作方式和高集成、高速、高可靠性等明显的特点。 在超高速领域和实时测控方面有非常广泛的应用,日前的CPLD普遍基于E2PROM和Flash电可擦除技术,可实现100次以上擦写循环。 CPLD选择及其扩展模块的设计 由于TMS320LF2407A是3.3v电平供电的,所以CPLD我们也选择3.3v电平供电的XL型号。XC95144XL是Xilinx公司XC9500系列的一种。它的性能指标为;IO口可配置为3.3v或5v操作。所有输出都提供24mA驱动能力;XC295
[嵌入式]