搜索
bottom↓
回复: 3

急,求教关于AVR单片机6位数码管动态扫描显示的程序问题

[复制链接]

出0入0汤圆

发表于 2011-6-14 09:15:14 | 显示全部楼层 |阅读模式
我是刚接触AVR单片机,看的是马老师的AVR单片机嵌入式系统原理与实践,对这个程序不是很懂,希望哪位大侠能给我详细讲解下,特别是哪个秒显示标志是做什么用的,还要if (point_on && ( i==2 || i==4 )) PORTA |= 0x80; // (1) 这句程序有什么作用 ,时间值送缓存区函数是怎样实现的?先谢谢了

#include <mega16.h>
#include <delay.h>

flash unsigned char led_7[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
flash unsigned char position[6]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};
unsigned char time[3]; // 时、分、秒计数
unsigned char dis_buff[6]; // 显示缓冲区,存放要显示的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[dis_buff];  
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[j++] = time % 10;
dis_buff[j++] = time / 10;
}
}

void main(void)
{
    PORTA=0x00; // PORTA初始化
    DDRA=0xFF;
    PORTC=0x3F; // PORTC初始化
    DDRC=0x3F;

    time[2] = 23; time[1] = 58; time[0] = 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]--<=0)
    {
    time[0] = 59;
    if (time[1]--<= 0)
    {
    time[1] = 59;
    if (time[2] --<=0) time[2] =23;
    }
    }
    time_to_disbuffer();
    }
        delay_ms(13); // 延时13ms,可进行其它处理(6)
    }
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2011-10-24 10:32:31 | 显示全部楼层
if (point_on && ( i==2 || i==4 )) PORTA |= 0x80; 这句我也不是太清楚,马老师您解释一下

出0入0汤圆

发表于 2011-10-24 11:44:15 | 显示全部楼层
回复【2楼】tepaiyuan
if (point_on &amp;&amp; ( i==2 || i==4 )) porta |= 0x80; 这句我也不是太清楚,马老师您解释一下
-----------------------------------------------------------------------

冲LS的美女图片,我来解释下

作用就是分别将第二个和第四个数码管的小数点点亮~
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-25 09:29

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表