在AVR上如何实现两位数码管显示不变的数字,另外两位数码管从0到99递增循环?

用C语言,在PN上写程序,我的单片机是ATMEGA16
2025-03-07 05:03:52
推荐回答(2个)
回答1:

#include
#include
#define uchar unsigned char
#define uint unsigned int
uchar const dm[]={ 0xc0,0xf9,0xa4,0xb0,0x99,
0x92,0x82,0xf8,0x80,0x90};//共阳极
#define LED1_on PORTB&=~BIT(0)
#define LED1_off PORTB|=BIT(0)
#define LED2_on PORTB&=~BIT(1)
#define LED2_off PORTB|=BIT(1)
#define LED3_on PORTB&=~BIT(2)
#define LED3_off PORTB|=BIT(2)
#define LED4_on PORTB&=~BIT(3)
#define LED4_off PORTB|=BIT(3)
void delay_ms(uint x)
{
uint y;
for(;x>0;x--)
for(y=1140;y>0;y--);
}

void display(uchar x,uchar y)
{
LED1_on;
PORTA=dm[x/10];
delay_ms(3);
LED1_off;
PORTA=0xff;
LED2_on;
PORTA=dm[x%10];
delay_ms(3);
LED2_off;
PORTA=0xff;
LED3_on;
PORTA=dm[y/10];
delay_ms(3);
LED3_off;
PORTA=0xff;
LED4_on;
PORTA=dm[y%10];
delay_ms(3);
LED4_off;
PORTA=0xff;
}

void main()
{
uchar temp=12;//显示固定的数
uchar i;//显示动态的数
uchar j;//显示次数
DDRA=0xff;
PORTA=0xff;
DDRB=0xff;
PORTB=0xff;
while(1)
{
for(j=10;j>0;j--)//把j改小,自加加快
display(temp,i);
if(++i==100)
i=0;
}
}

回答2:

自己看书吧,初学者自己动手写一些简单的程序还是很有帮助的,网上的程序毕竟是别人的思想