51单片机键盘检测后数码显示

来源:百度知道 编辑:UC知道 时间:2024/05/31 14:10:10
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit d=P3^7;
uchar code duma[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar code shu16[]={0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77};
uchar temp1,temp2,shu;
uchar i,j;
void delay(uchar z)//延时
{
uchar x,y;
for(x=z;z>0;z--)
for(y=115;y>0;y--);
}
uchar keys_scan()//键盘检测
{
P1=0xf0;
if(P1&0xf0!=0xf0)
{
delay(5);
if(P1&0xf0!=0xf0)
{
temp1=0xfe;
for(i=4;i>0;i--)
{
P1=temp1;
if(P1&0xf0!=0xf0)
{
temp2=P1;
for(j=0;j<16;j++)
{
if(temp2=shu16[j])
return j;
}
}
else
temp1=_crol_(temp1,1);
}
}
}
}
void xianshi(uchar a,uchar b)
{
P2=

是键盘检测函数有错,已经改好,如下:
uchar keys_scan()//键盘检测
{
P1 = 0xf0;
if((P1 & 0xf0) != 0xf0) {
delay(5);
if((P1 & 0xf0) != 0xf0) {
temp1 = 0xfe;
for(i = 4; i> 0; i--) {
P1 = temp1;
if((P1 & 0xf0) != 0xf0) {
temp2 = P1;
for(j = 0; j < 16; j++) {
if(temp2 == shu16[j])
return j;
}
}
else temp1 = _crol_(temp1, 1);
}
}
}
}

单片机是一种广泛应用于各种产品的半导体器件。例如,大多数的厨房电器中都有单片机,最常见的是一些配备发光二极管(LED)或液晶显示屏(LCD)和小键盘的产品(如微波炉)。即使像烤面包炉和搅拌机这种没有屏幕显示的新型家电,往往也用到了单片机。 时至今日,所有现代汽车内都可能配备少则1个,多则70多个单片机。新车平均使用25至35个单片机,应用范围涉及引擎控制、防抱死刹车系统、导航控制及气囊系统。 差不多任何带遥控功能的电子设备或电器都有单片机。事实上,单片机是大部分消费类电子产品不可或缺的元件,这些产品有:数码相机、手机、摄像机、自动应答系统、激光打印机、特殊功能电话、寻呼机、高科技冰箱、洗碗机及洗衣干衣机等。 单片机是在一枚芯片上集成了一个完整的计算机(常被称为“系统级芯片”),而普通台式计算机则是由机箱内的不同部分经协同操作所构成的。

你先直接在程序中置数,检查LED是否显示正常,然后再逐步检查其他模块。这样容易找到问题。

你用的是共阴极数码管,还是共阳极数码管?