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输出位码。 展开
#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输出位码。 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询