AVR单片机,按独立键盘在数码管上显示数字

#include"iom16v.h"#include"macros.h"#include"delay.h"#include"SEG.h"//我自己写的数码管显示数字段码的... #include"iom16v.h"
#include"macros.h"
#include"delay.h"
#include"SEG.h" //我自己写的数码管显示数字段码的头文件
#define uchar unsigned char
void main()
{
uchar a,i;
DDRA=BIT(3)|BIT(4);
DDRB=0XFF;
while(1)
{
a=key_press(); //判断按键是否被按下
i=translate(a); //将按键的编码转化为十进制数
display(i); //显示转化的十进制数
};
}
uchar key_press()
{
uchar b;
while(1)
{
DDRD=0X0F;
PORTD=0X0F;
DDRD=0XF0;
PORTD=0XF0;
b=PIND&0x0f;
if(b!=0X0F)
return b;
}
}
void display(uchar i)
{
while(1)
{PORTA=BIT(3);
PORTB=SEG[i];
PORTA=BIT(4);
PORTB=0XFE;
delay_nms(3);}
}
uchar translate(uchar j)
{
uchar k;
switch(j)
{
case 0x0F:k=0;break;
case 0x0E:k=1;break;
case 0x0D:k=2;break;
case 0x0B:k=3;break;
case 0x07:k=4;break;
default:k=14;break;
}
return k;
}

第一次按按键以后,显示数字正确。但是,之后再按其他按键的时候,数码管上显示的数字不变化。怎么改?
独立按键接单片机PD0~PD4口;PB口接共阴数码管,当PA输出0x08时,PB输出段码,PA输出0x10时,PB输出位码。
展开
 我来答
头好舞05
2012-07-16 · TA获得超过2099个赞
知道小有建树答主
回答量:797
采纳率:100%
帮助的人:495万
展开全部
问题出在显示的死循环上。
你可以分析一个流程,程序先是执行到key_press函数用死循环等待按键,一旦有按键才会跳出来,接着执行translate函数,最后执行display函数用死循环在数码管上显示数字,不管你再怎么按键也永远没有机会从display中跳出来转去执行key_press函数了,明白了吗?
解决的办法是把检测按键和显示结合起来放在循环中,按键和显示本身不要再有死循环。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式