今天给各位分享矩阵键盘外部中断扫描c语言程序的知识,其中也会对中断方式矩阵键盘扫描进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
1、求一个单片机4X4矩阵键盘扫描程序,C语言的。2、求个单片机矩阵键盘(4*4)中断(记得要中断)的C语言程序。。求高手自己写个啊3、单片机AT89C51矩阵键盘C语言程序
求一个单片机4X4矩阵键盘扫描程序,C语言的。
淘bao 旺铺: 广州华电 单片机学习板 单片机外围学习模块/传感器模块
//4*4键盘检测程序,按下键后相应的代码显示在数码管上
#includereg51.h
sbit beep=P2^3;
sbit dula=P2^6;
sbit wela=P2^7;
unsigned char i=100;
unsigned char j,k,temp,key;
void delay(unsigned char i)
{
for(j=i;j0;j–)
for(k=125;k0;k–);
}
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
display(unsigned char num)
{
P0=table[num];
dula=1;
dula=0;
P0=0xc0;
wela=1;
wela=0;
}
void main()
{
dula=0;
wela=0;
while(1)
{
P3=0xfe;
temp=P3;
temp=temp0xf0;
if(temp!=0xf0)
{
delay(10);
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xee:
key=0;
break;
case 0xde:
key=1;
break;
case 0xbe:
key=2;
break;
case 0x7e:
key=3;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp0xf0;
beep=0;
}
beep=1;
display(key);
P1=0xfe;
}
}
P3=0xfd;
temp=P3;
temp=temp0xf0;
if(temp!=0xf0)
{
delay(10);
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xed:
key=4;
break;
case 0xdd:
key=5;
break;
case 0xbd:
key=6;
break;
case 0x7d:
key=7;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp0xf0;
beep=0;
}
beep=1;
display(key);
}
}
P3=0xfb;
temp=P3;
temp=temp0xf0;
if(temp!=0xf0)
{
delay(10);
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xeb:
key=8;
break;
case 0xdb:
key=9;
break;
case 0xbb:
key=10;
break;
case 0x7b:
key=11;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp0xf0;
beep=0;
}
beep=1;
display(key);
}
}
P3=0xf7;
temp=P3;
temp=temp0xf0;
if(temp!=0xf0)
{
delay(10);
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xe7:
key=12;
break;
case 0xd7:
key=13;
break;
case 0xb7:
key=14;
break;
case 0x77:
key=15;
break;
}
while(temp!=0xf0)
{
temp=P3;
temp=temp0xf0;
beep=0;
}
beep=1;
display(key);
}
}
}
}
求个单片机矩阵键盘(4*4)中断(记得要中断)的C语言程序。。求高手自己写个啊
很简单的啊,不太清楚你的电路图,我把主要程序写一下:
#includereg52.h
unsigned char flag=0;//设置flag作为标志位,初值为0,一旦产生中断,将其置1
void main()
{
EA=1;//开总中断
EX0=1;//开外部中断0 ,假设是由P3.2产生的中断
IT0=1;//设置产生中断的方式,这是表示下降沿触发
P0=0X0F;//假设矩阵键盘接P0口,给所有列线低电平,所有行线高电平
while(1)
{
if(flag==1) //这个是表示,如果中断不产生,下面的程序不会运行,只有中断了,才会键盘扫描
{
按键扫描程序,这个我就不写了,写法有很多啦
}
数码管显示程序,这个我也不写了,不晓得你是什么电路图
}
}
void scan() interrupt 0
{
flag=1;//表示,一旦中断产生了,将flag置1
}
希望对你有用,呵呵
单片机AT89C51矩阵键盘C语言程序
#includereg51.h
#define uchar unsigned char;
uchar distab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff};
void delay(unsigned int a)
{
unsigned int i,j;
for(i=0;ia;i++)
for(j=0;j1000;j++);
}
uchar kbscan(void)
{
unsigned char sccode,recode;
P2=0x0f; //发0扫描,列线输入
if ((P2 0x0f) != 0x0f) //有键按下
{
delay(20); //延时去抖动
if ((P20x0f)!= 0x0f)
{
sccode = 0xef; //逐行扫描初值
while((sccode0x01)!=0)
{
P2=sccode;
if((P20x0f)!=0x0f)
{
recode=(P20x0f)|0xf0;
return((~sccode)+(~recode));
}
else
sccode=(sccode1)|0x01;
}
}
}
return 0; //无键按下,返回0
}
void getkey(void)
{
unsigned char key;
key=kbscan();
if(key==0)return;
switch(key)
{
case 0x11:P1=distab[0];break;
case 0x12:P1=distab[1];break;
case 0x14:P1=distab[2];break;
case 0x18:P1=distab[3];break;
case 0x21:P1=distab[4];break;
case 0x22:P1=distab[5];break;
case 0x24:P1=distab[6];break;
case 0x28:P1=distab[7];break;
case 0x41:P1=distab[8];break;
case 0x42:P1=distab[9];break;
case 0x44:P1=distab[10];break;
case 0x48:P1=distab[11];break;
case 0x81:P1=distab[12];break;
case 0x82:P1=distab[13];break;
case 0x84:P1=distab[14];break;
case 0x88:P1=distab[15];break;
default:P1=distab[16];break;
}
}
main()
{
while(1)
{
getkey();
}
}
关于矩阵键盘外部中断扫描c语言程序和中断方式矩阵键盘扫描的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。