51单片机中,用八个开关控制一个7段数码管,按一个开关显示一个数,用C语言怎么编程

如题所述

sfr key=P1;//定义八个开关接单片机的p1口的八个引脚,
int suma[9]={0x3B,0x4D,,,};//根据数码管的驱动芯片接入单片机接口,查表输出要显示的数字,其中第九个为不显示即清空显示。
unsigned char Scankey()
{
int i,j;
i=key;
if(key!=0xFF)
{
keyflg=1;
switch(~key)
{
case 0x01: case 0x02: case 0x04: case 0x08:case 0x10:case 0x20: case 0x40:
case 0x80:return (~key);
default: keyflg=0;return (0xFF);
}
}
return(key);
}
void delay( long i) // 延时
{
while(i--);
}
void xianshi(unsigned char a)
{
P2=suma[a];
}
void inti(){;;xianshi(9);}
int main( )
{
unsigned char a,b;
inti(); // 单片机初始化
b =Scankey();
while(1)
{
a=Scankey(); // 扫描按键
if(keyflg) // 判断有键按下
{
if(a!=b) // 判断是否按键有改变
{
xianshi(9); // 关闭数码管
delay(1000); // 延时
xianshi(a); // 显示要显示的数码管
}
b=a; // 保存当前的按键值。
}
delay(1000); // 延时 自己调试要大于200 ms
}
}
// 只能给你个大概的思路了。,一般扫描按键,除非硬件使用中断的引脚可以中断设计,返回键值,或查值,判断是否显示,显示输出,中间要加些延时效果更好。
// 设计到单片机就牵扯到硬件的定义,还有些外界干扰的情况要根据实际情况在完善程序。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-11-13

一个简单的仿真实例,供参考

追问

程序?

追答

解压缩里面有程序。

第2个回答  2013-11-15
我的空间有抢答器的设计,包括了题目要求的功能。
相似回答