51单片机矩阵式键盘扫描思想
来源:互联网 发布:java内存溢出有几种 编辑:程序博客网 时间:2024/04/29 17:31
#include<reg52.h># define uchar unsigned char# define uint unsigned intvoid delay(uchar a);void init();void keyscan();uchar H1,H2;uchar temp,hang,lie;uchar code table[4][3]={0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xc0,0xff}; void main (){init();while(1){ keyscan(); P0=table[H1][H2];}}void delay(uchar a){uchar x,y;for(x=a;x>0;x--)for(y=110;y>0;y--);}void init(){H1=3;H2=0;}void keyscan(){P1=0x1f;temp=P1; temp=temp&0x1f;if(temp!=0x1f){delay(5);temp=P1;temp=temp&0x1f;if(temp!=0x1f) //hang检测{temp=P1;switch(temp){case 0x0f: hang=0;break;case 0x17: hang=1;break;case 0x1b: hang=2;break;case 0x1d: hang=3;break;default:break;}P1=0xff; //对P1口的初始化,如没有这一步则不能在列数检测时重新读入P1口信息P1=0xe1;//lie检测temp=P1; temp=temp&0xe1;switch(temp){case 0xc1: lie=0;break;case 0xa1: lie=1;break;case 0x61: lie=2;break;default:break;}while(temp!=0xe1){ temp=P1; temp=temp&0xe1;}H1=hang;H2=lie; }}}
最近在学习51单片机,看了郭天祥老师的《10天学会单片机》视频教程,其中对矩阵式键盘的扫描采用的是逐行扫描的思想。代码量大,对于51单片机而言,ROM资源是十分珍贵的,这样无疑是一种赘余。于是我萌发了编写一种更简单的扫描方法的想法,写出了上述代码。采用二维数组收集八段数码管所需显示数字的模,以矩阵形式排列数字,这样一来,一旦确定了按下键位的行与列,那么也就确定了按下键位所对应的数字。后来在网上看了其他老师的教学视频,发现我的这种思想与其他大多数人的思想不谋而合。可能是郭天祥老师的教程推出时间较早,所以并没有把这种对矩阵式键盘扫描的方法收录进去。我是西安电子科技大学的学生,在我们学校里郭天祥老师的《10天学会单片机》系列教程还是很火热的。我所接触的大部分同学在学习时都是采用这套教材。因此我发表这篇博客,目的在于向广大51单片机初学者,特别是使用郭天祥老师教材的同学,提出一种较为简便的扫描矩阵式键盘的思想。因为我也是一个单片机的初学者,因此如果我的代码如果存在不足,也希望读者指出。
以下是我学习了郭天祥老师在《10天学会单片机》视频后,采用郭老师的思想针对同一电路图编写的键盘扫描代码。
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};void keyboard(){ uchar temp,num;num=10; P1=0xef; temp=P1;temp=temp&0xe0;while(temp!=0xe0){delay(5);temp=P1;temp=temp&0xe0;while(temp!=0xe0){temp=P1;switch(temp){case 0xcf: num=1;break;case 0xaf: num=2;break;case 0x6f: num=3;break;default:break;}while(temp!=0xe0){temp=P1;temp=temp&0xe0;} }} P1=0xf7; temp=P1;temp=temp&0xe0;while(temp!=0xe0){delay(5);temp=P1;temp=temp&0xe0;while(temp!=0xe0){temp=P1;switch(temp){case 0xd7: num=4;break;case 0xb7: num=5;break;case 0x77: num=6;break;default:break;}while(temp!=0xe0){temp=P1;temp=temp&0xe0;} }} P1=0xfb;temp=P1;temp=temp&0xe0;while(temp!=0xe0){delay(5);temp=P1;temp=temp&0xe0;while(temp!=0xe0){temp=P1;switch(temp){case 0xdb: num=7;break;case 0xbb: num=8;break;case 0x7b: num=9;break;default:break;}while(temp!=0xe0){temp=P1;temp=temp&0xe0;} }}P1=0xfd;temp=P1;temp=temp&0xe0;while(temp!=0xe0){delay(5);temp=P1;temp=temp&0xe0;while(temp!=0xe0){temp=P1;switch(temp){case 0xdd: num=10;//这里星号键和井号键我是使数码管不显示任何数break;case 0xbd: num=0;break;case 0x7d: num=10;break;default:break;}while(temp!=0xe0){temp=P1;temp=temp&0xe0;} }}}
以下是我编程时采用的电路图,所接键盘就是常见的手机键盘。
- 51单片机矩阵式键盘扫描思想
- 51单片机矩阵键盘扫描
- 单片机,矩阵键盘扫描驱动
- stc89c51单片机矩阵键盘扫描
- 51单片机--键盘扫描
- 51单片机的4x4矩阵键盘扫描例程(C51)
- 51单片机矩阵扫描键盘程序(源代码)
- AVR单片机(ATMEGA16)矩阵键盘扫描程序
- 单片机矩阵键盘反转法思想
- 51单片机--矩阵键盘
- 51单片机扫描键盘程序
- 51单片机矩阵键盘库
- 51单片机—矩阵键盘
- mcs51单片机-矩阵式键盘
- C51单片机矩阵键盘扫描去抖程序,新手必读
- 矩阵键盘扫描原理详解——单片机
- PIC单片机(PIC16F877A)基于状态机思想的矩阵键盘检测
- 51单片机键盘行列反转扫描
- 使用FormatMessage功得到GetLastError得到的错误信息
- MongoDB基本使用
- jsp实现连接数据库、查询、插入、修改功能的javaBean代码
- “Coming Soon”困境
- uvdev -- 原理
- 51单片机矩阵式键盘扫描思想
- 如果,今生不曾相遇
- 获取tomcat配置的端口
- discuxx2.5设置安全验证问题出错:password_weakstrongpw_1,strongpw_2的解决办法
- 挑战无处不在
- vi 文本编辑
- CloseHandle函数---核心对象
- 对Bhuman中模块的执行顺序的理解
- PHP漏洞全解