我刚学51单片机,完全是菜鸟,大神帮忙看看程序,指点指点!
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
#define key P1 ; //--定义使用的IO口--//
uint keyvlue;//--定义全局变量--//
unsigned char code table[17]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的显示码
void delayms(uint xms);//延时函数声明
void keydown();//按键检测函数声明
void main()
{
while(1)
{
keydown();
P0=~table[keyvlue];//数码管输出键值
}
}
void keydown(void)
{
char a=0;
key=0x0f;
if(key!=0x0f)//读取按键是否按下
{
delay10ms(10);//延时进行消抖
if(key!=0x0f)//再次检测键盘是否按下
{
key=0xf0;
switch(key)//测试行
{
case(0xe0):keyvlue=1;break;
case(0xd0):keyvlue=2;break;
case(0xb0):keyvlue=3;break;
case(0x70):keyvlue=4;break;
}
key=0x0f;
switch(key)//测试列
{
case(0x0e):keyvlue=keyvlue;break;
case(0x0d):keyvlue=keyvlue+4;break;
case(0x0b):keyvlue=keyvlue+8;break;
case(0x07):keyvlue=keyvlue+12;break;
}
while((a<50) && (key=0x0f))//检测按键松手检测
{
delayms(1);
a++;
}
}
}
}
void delayxms(uint xms)//延时函数
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
|