关于数码管的显示,采用动态的方法。基于开发板。
先是段选,打通一个573,然后把数字送到573,然后关闭573,锁存起来。这是573的Q0-Q7都会保存这个数字。
然后打通另外一个573,是低电平选中,选择一个数码管。然后断开573,保持选中。
这样控制8个数码管,一个PORT口就能搞定了。
下面这个这个程序,是让6个数码管显示1-6,不动,虽然在闪烁,但是你看不到。
while (1)
{
for(i=0;i<6;i++)
{
//PORTA|=BIT(3);
PORTA=1<<3;
PORTB=a;
//PORTA&=~BIT(3);
PORTA=0;
PORTB=0XFF; // 需要
PORTB&=~(1<<(i));
//PORTA|=BIT(4);
PORTA=1<<4;
//PORTA&=~BIT(4);
PORTA=0;
delay_ms(2); // 扫描时间,这个设置为4ms,你就基本看不出闪烁了。
}
PORTB="FF";
delay_ms(300);
// Place your code here
};
这个程序是1个数码管,显示1-6,显示的时间,可以由delay来控制。
while (1)
{ for(i=0;i<6;i++)
{
//PORTA|=BIT(3);
PORTA=1<<3;
PORTB=a;
//PORTA&=~BIT(3);
PORTA=0;
PORTB=0XFF;
PORTB=0XFE;
//PORTA|=BIT(4);
PORTA=1<<4;
//PORTA&=~BIT(4);
PORTA=0;
delay_ms(400);
}
// Place your code here
};
这个程序,是流水的数字,没有用子函数。
while (1)
{
for(j=0;j<30;j++)
{
for(i=0;i<6;i++)
{
//PORTA|=BIT(3);
PORTA=1<<3;
PORTB=a;
//PORTA&=~BIT(3);
PORTA=0;
PORTB=0XFF; // 需要
PORTB&=~(1<<(i));
//PORTA|=BIT(4);
PORTA=1<<4;
//PORTA&=~BIT(4);
PORTA=0;
delay_ms(2);
// 扫描时间,这个设置为4ms,你就基本看不出闪烁了。
}
} j这层循环,是用来控制闪现的时间,如果不加这里的数组变换,这个就是1-6的一闪一闪,固定的数码管。
/
for(k=1;k<6;k++)
{
t=a[0];
a[0]=a[k];
a[k]=t;
} // 这个是改变数组的顺序,让它每次闪烁的时候,数码管的值不一样。
PORTA="1"<<4;
PORTB="0XFF";
delay_ms(100); 这个延时,是用来控制灭的时间
PORTA="0";
// Place your code here
};
文章评论(0条评论)
登录后参与讨论