如何用proteus和keil C的仿真实现4*4矩阵键盘控制一个LED灯显示0~F 需要程序和仿真图,谢谢!
展开全部
//功能:4*4矩阵键盘控制LED位移显示
//MCU:AT89S52
//晶振:12MHZ
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
//延时函数
void _delay_ms(uint x)
{
uchar i;
while(x--)
for(i=0;i<120;i++);
}
//键盘扫描函数
void Scan_Key(void)
{
P1=0xfe;//PD口(11101111)第1行为低
if((P1&0xf0)!=0xf0)//如果不等于0X0F则有按下
{
_delay_ms(10);//延时10MS,去抖
if((P1&0xf0)!=0xf0)//如果TEMP不等于0X0F,则说明有键按下
{
switch(P1)//判断TEMP的值
{
case 0xee:P2=0xfe;break;
case 0xde:P2=0xfc;break;
case 0xbe:P2=0xf8;break;
case 0x7e:P2=0xf0;break;
}
}
}
P1=0xfd;
if((P1&0xf0)!=0xf0)
{
_delay_ms(10);
if((P1&0xf0)!=0xf0)
{
switch(P1)
{
case 0xed:P2=0xe0;break;
case 0xdd:P2=0xc0;break;
case 0xbd:P2=0x80;break;
case 0x7d:P2=0x00;break;
}
}
}
P1=0xfb;
if((P1&0xf0)!=0xf0)
{
_delay_ms(10);
if((P1&0xf0)!=0xf0)
{
switch(P1)
{
case 0xeb:P3=0xfe;break;
case 0xdb:P3=0xfc;break;
case 0xbb:P3=0xf8;break;
case 0x7b:P3=0xf0;break;
}
}
}
P1=0xf7;
if((P1&0xf0)!=0xf0)
{
_delay_ms(10);
if((P1&0xf0)!=0xf0)
{
switch(P1)
{
case 0xe7:P3=0xe0;break;
case 0xd7:P3=0xc0;break;
case 0xb7:P3=0x80;break;
case 0x77:P3=0x00;break;
}
}
}
}
void main(void)
{
while(1)
{
Scan_Key();
}
}
//MCU:AT89S52
//晶振:12MHZ
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
//延时函数
void _delay_ms(uint x)
{
uchar i;
while(x--)
for(i=0;i<120;i++);
}
//键盘扫描函数
void Scan_Key(void)
{
P1=0xfe;//PD口(11101111)第1行为低
if((P1&0xf0)!=0xf0)//如果不等于0X0F则有按下
{
_delay_ms(10);//延时10MS,去抖
if((P1&0xf0)!=0xf0)//如果TEMP不等于0X0F,则说明有键按下
{
switch(P1)//判断TEMP的值
{
case 0xee:P2=0xfe;break;
case 0xde:P2=0xfc;break;
case 0xbe:P2=0xf8;break;
case 0x7e:P2=0xf0;break;
}
}
}
P1=0xfd;
if((P1&0xf0)!=0xf0)
{
_delay_ms(10);
if((P1&0xf0)!=0xf0)
{
switch(P1)
{
case 0xed:P2=0xe0;break;
case 0xdd:P2=0xc0;break;
case 0xbd:P2=0x80;break;
case 0x7d:P2=0x00;break;
}
}
}
P1=0xfb;
if((P1&0xf0)!=0xf0)
{
_delay_ms(10);
if((P1&0xf0)!=0xf0)
{
switch(P1)
{
case 0xeb:P3=0xfe;break;
case 0xdb:P3=0xfc;break;
case 0xbb:P3=0xf8;break;
case 0x7b:P3=0xf0;break;
}
}
}
P1=0xf7;
if((P1&0xf0)!=0xf0)
{
_delay_ms(10);
if((P1&0xf0)!=0xf0)
{
switch(P1)
{
case 0xe7:P3=0xe0;break;
case 0xd7:P3=0xc0;break;
case 0xb7:P3=0x80;break;
case 0x77:P3=0x00;break;
}
}
}
}
void main(void)
{
while(1)
{
Scan_Key();
}
}
追问
可以附带仿真图吗?谢谢!
追答
可以,加QQ286477745
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询