搜索
bottom↓
回复: 4

请教马潮老师AVR书数码管扫描程序的一个语句

[复制链接]

出0入0汤圆

发表于 2012-6-12 10:40:44 | 显示全部楼层 |阅读模式
请问马潮老师和各位高手这句话如何理解:
if(point_on&&(i==2||i==4))PORTA|=0x80;

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

如果想吃一顿饺子,就得从冰箱里取出肉,剁馅儿,倒面粉、揉面、醒面,擀成皮儿,下锅……
一整个繁琐流程,就是为了出锅时那一嘴滚烫流油的热饺子。

如果这个过程,禁不住饿,零食下肚了,饺子出锅时也就不香了……《非诚勿扰3》

出0入0汤圆

发表于 2012-6-12 10:54:17 | 显示全部楼层
i=2或者i=4并且point_on不为0的时候,点亮小数点吧,猜的
仅仅给出这么一句程序你要别人这么回答你?

出0入0汤圆

 楼主| 发表于 2012-6-12 11:48:25 | 显示全部楼层
little_Monkey 发表于 2012-6-12 10:54
i=2或者i=4并且point_on不为0的时候,点亮小数点吧,猜的
仅仅给出这么一句程序你要别人这么回答你? ...

呵呵,其实就是马老师书上面的程序,我把它贴出来!
#include <mega16.h>
        #ifndef __SLEEP_DEFINED__
        #define __SLEEP_DEFINED__
        .EQU __se_bit=0x40
        .EQU __sm_mask=0xB0
        .EQU __sm_powerdown=0x20
        .EQU __sm_powersave=0x30
        .EQU __sm_standby=0xA0
        .EQU __sm_ext_standby=0xB0
        .EQU __sm_adc_noise_red=0x10
        .SET power_ctrl_reg=mcucr
        #endif
#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] >= 60)
                    {
                            time[0] = 0;
                            if (++time[1] >= 60)
                            {
                                    time[1] = 0;
                                    if (++time[2] >= 24) time[2] = 0;
                            }
                    }
                    time_to_disbuffer();
            }
        delay_ms(13);                                        // 延时13ms,可进行其它处理(6)

出0入0汤圆

发表于 2012-6-12 13:09:59 | 显示全部楼层
本帖最后由 xiaowu191 于 2012-6-12 13:15 编辑

时间显示是这样的 23:58:55;

对应的显示缓冲区 dis_buff[5],[4],[3],[2],[1],[0];

所以当显示第2,4位时是要显示符号:的,同时这个:是闪动的(point_on = ~point_on;),只有point_on在某一状态时才显示,就有if (point_on && ( i==2 || i==4 )) PORTA |= 0x80;
也可以if ((!point_on)  &&  ( i==2 || i==4 )) PORTA |= 0x80;

出0入0汤圆

 楼主| 发表于 2012-6-12 13:25:20 | 显示全部楼层
xiaowu191 发表于 2012-6-12 13:09
时间显示是这样的 23:58:55;

对应的显示缓冲区 dis_buff[5],[4],[3],[2],[1],[0];

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

本版积分规则

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

GMT+8, 2024-3-29 00:34

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

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