51单片机4*4扫描C程序

来源:本站
导读:目前正在解读《51单片机4*4扫描C程序》的相关信息,《51单片机4*4扫描C程序》是由用户自行发布的知识型内容!下面请观看由(电工学习网 - www.9pbb.com)用户发布《51单片机4*4扫描C程序》的详细说明。
;******************************************************
;*标题:东哥 51单片机4*4扫描C程序
;*文件:
;*版本:1.0
;*作者:东哥
;*邮箱:picavr@163.comQQ:279068079

;*******************************************************

#include"reg52.h"
#include<intrins.h>
#defineucharunsignedchar
#defineuintunsignedint
bitFLAG0=0;
ucharptr;
staticconstchartab[16]={0x01,0x02,0x03,0x0c,/*键盘码00,01,02,03,*/
0x04,0x05,0x06,0x0d,/*键盘码04,05,06,07,*/
0x07,0x08,0x09,0x0e,/*键盘码08,09,0a,0b,*/
0x0a,0x00,0x0b,0x0f};/*键盘码0c,0d,0e,0f*/
voiddelay(unsignedintvalue)/*延时副程式*/
{
while(value!=0)value--;/*10US延时*/
}

voidscan(void)/*扫描键盘副程式*/
{
uchara1=0xef,i,m;/*A1=0XF7列扫描初值,I行*/
FLAG0=0;/*设按键回应旗号为0,键盘扫描计数指标为0*/
for(i=0;i<4;i++)/*键盘4个扫描列*/
{
P2=a1;/*列扫描输出,读入P1存入M,以便侦测行与侦测按键是否放开*/
m=P2;
switch(m&0x0f)/*取行的高4位元,侦测那一行被按*/
{
case0x07:ptr=i*4;/*第一行被按否?是则扫描指标=列X4*/
FLAG0=1;/*是则设FLAG0=1表有按键输入*/
break;/*跳出此循环*/
case0x0b:ptr=i*4+1;/*第二行被按否?是则扫描指标=列X4+1*/
FLAG0=1;/*是则设FLAG0=1表有按键输入*/
break;/*跳出此循环*/
case0x0d:ptr=i*4+2;/*第三行被按否?是则扫描指标=列X4+2*/
FLAG0=1;/*是则设FLAG0=1表有按键输入*/
break;/*跳出此循环*/
case0x0e:ptr=i*4+3;/*第四行被按否?是则扫描指标=列X4+3*/
FLAG0=1;/*是则设FLAG0=1表有按键输入*/
default:break;/*跳出此循环*/
}
if(FLAG0==1)break;/*不为1,则扫描列右移,扫描下一列*/
a1=a1<<1|0x01;/*高位补1,由于P1.7~P1.4未接+5V,而是由指令加载高电平*/
}
}
voidmain(void)
{
TMOD=0x20;//T1工作方式2
TH1=0xfd;//串口波特率为9600
TCON=0x40;//启动T1
SCON=0x40;//串口工作与方式1并禁止接受
IE=0x00;//无中断
while(1)
{
scan();//启动键盘扫描
if(FLAG0)//当FLAG0=1时,有键输入
{
SBUF=tab[ptr];
while(TI==0);TI=0;//将键值送串口
FLAG0=0;//将标识位清零
delay(30000);//延时
}
}
}
提醒:《51单片机4*4扫描C程序》最后刷新时间 2023-07-10 03:57:24,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《51单片机4*4扫描C程序》该内容的真实性请自行鉴别。