急,求教关于AVR单片机6位数码管动态扫描显示的程序问题
我是刚接触AVR单片机,看的是马老师的AVR单片机嵌入式系统原理与实践,对这个程序不是很懂,希望哪位大侠能给我详细讲解下,特别是哪个秒显示标志是做什么用的,还要if (point_on && ( i==2 || i==4 )) PORTA |= 0x80; // (1) 这句程序有什么作用 ,时间值送缓存区函数是怎样实现的?先谢谢了#include <mega16.h>
#include <delay.h>
flash unsigned char led_7={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
flash unsigned char position={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};
unsigned char time; // 时、分、秒计数
unsigned char dis_buff; // 显示缓冲区,存放要显示的6个字符的段码值
unsigned char time_counter; // 1秒计数器
bit point_on; // 秒显示标志
void display(void) // 扫描显示函数,执行时间12ms
{
unsigned char i;
for(i=0;i<=5;i++)
{
PORTA = led_7];
if (point_on && ( i==2 || i==4 )) PORTA |= 0x80; // (1)
PORTC = position;
delay_ms(2); // (2)
PORTC = 0xff; // (3)
}
}
void time_to_disbuffer(void) // 时间值送显示缓冲区函数
{
unsigned char i,j=0;
for (i=0;i<=2;i++)
{
dis_buff = time % 10;
dis_buff = time / 10;
}
}
void main(void)
{
PORTA=0x00; // PORTA初始化
DDRA=0xFF;
PORTC=0x3F; // PORTC初始化
DDRC=0x3F;
time = 23; time = 58; time = 55; // 时间初值23:58:55
time_to_disbuffer();
while (1)
{
display(); // 显示扫描,执行时间12ms
if (++time_counter >= 40)
{
time_counter = 0; // (4)
point_on = ~point_on; // (5)
if (time--<=0)
{
time = 59;
if (time--<= 0)
{
time = 59;
if (time --<=0) time =23;
}
}
time_to_disbuffer();
}
delay_ms(13); // 延时13ms,可进行其它处理(6)
}
} if (point_on && ( i==2 || i==4 )) PORTA |= 0x80; 这句我也不是太清楚,马老师您解释一下 回复【2楼】tepaiyuan
if (point_on && ( i==2 || i==4 )) porta |= 0x80; 这句我也不是太清楚,马老师您解释一下
-----------------------------------------------------------------------
冲LS的美女图片,我来解释下
作用就是分别将第二个和第四个数码管的小数点点亮~
页:
[1]