OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4319|回复: 0

呼吸灯、数码管和按键,时间冲突问题,跪求大神指导,谢谢~~~~

[复制链接]

20

主题

450

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4654
金钱
4654
注册时间
2017-7-6
在线时间
705 小时
发表于 2017-7-10 09:53:14 | 显示全部楼层 |阅读模式
主函数用的定时器1,1ms扫描一次;呼吸灯用的定时器0,定时了50us,做了140级,按键和数码管都在主函数1ms扫描里面,
呼吸灯在其外面;各个模块的程序如下:
一、主函数
void main(void)
{
        Init_System();
        Time_int();
        while(1)
        {
                if(b_1ms_t)     
                {
                        b_1ms_t = 0;
                        WDTR = 0x5A;
                        deplay();     //êyÂë1ü
                        key();        //°′¼ü
                }
                led_on();         //oôÎüμÆ
        }
}


二、数码管
void deplay(void)
{
        P0M &= 0x3f;
        P1M &= 0x3f;
        P2M &= 0x00;
        num_show(r_smg_num);
        seg_on();
        r_smg_1st++;
        if(r_smg_1st == 200)
        {
                r_smg_1st = 0;
                r_smg_num++;
                if(r_smg_num == 40)
                {
                        r_smg_num = 0;
                }
        }
}
void seg_on(void)
{
        if(b_key_smg)
        {
                r_smg_t1++;
                if(r_smg_t1 == 17)
                {
                        r_smg_t1 = 1;
                }
                if(seg0 == 1&&r_smg_t1 == 1)           //a
                {
                        P0M |= 0xc0;
                        P1M |= 0x00;
                        P2M |= 0x00;
                       
                        led2 = 1;
                        led1 = 0;
                }
                if(seg1 == 1&&r_smg_t1 == 2)          //b
                {
                        P0M |= 0x80;
                        P1M |= 0x00;
                        P2M |= 0x01;

                        led2 = 1;
                        led3 = 0;
                }
                if(seg2 == 1&&r_smg_t1 == 3)          //c
                {
                        P0M |= 0x40;
                        P1M |= 0x00;
                        P2M |= 0x02;
                       
                        led4 = 1;
                        led1 = 0;
                }
                if(seg3 == 1&&r_smg_t1 == 4)          //d
                {
                        P0M |= 0x40;
                        P1M |= 0x80;
                        P2M |= 0x00;
                       
                        led5 = 1;
                        led1 = 0;
                }
                if(seg4 == 1&&r_smg_t1 == 5)          //e
                {
                        P0M |= 0x40;
                        P1M |= 0x40;
                        P2M |= 0x00;
                       
                        led6 = 1;
                        led1 = 0;
                }
                if(seg5 == 1&&r_smg_t1 == 6)          //f
                {
                        P0M |= 0xc0;
                        P1M |= 0x00;
                        P2M |= 0x00;
                       
                        led1 = 1;
                        led2 = 0;
                }
                if(seg6 == 1&&r_smg_t1 == 7)         //g
                {
                        P0M |= 0x40;
                        P1M |= 0x00;
                        P2M |= 0x01;
                       
                        led3 = 1;
                        led1 = 0;
                }
                if(seg7 == 1&&r_smg_t1 == 8)         //dp
                {
                        P0M |= 0x00;
                        P1M |= 0x80;
                        P2M |= 0x01;

                        led5 = 0;
                        led3 = 0;
                }
               
                if(seg_l0 == 1&&r_smg_t1 == 9)           //a
                {
                        P0M |= 0x00;
                        P1M |= 0xc0;
                        P2M |= 0x00;
                       
                        led6 = 1;
                        led5 = 0;
                }
                if(seg_l1 == 1&&r_smg_t1 == 10)          //b
                {
                        P0M |= 0x80;
                        P1M |= 0x40;
                        P2M |= 0x00;

                        led6 = 1;
                        led2 = 0;
                }
                if(seg_l2 == 1&&r_smg_t1 == 11)          //c
                {
                        P0M |= 0x00;
                        P1M |= 0x40;
                        P2M |= 0x01;
                       
                        led3 = 1;
                        led6 = 0;
                }
                if(seg_l3 == 1&&r_smg_t1 == 12)          //d
                {
                        P0M |= 0x00;
                        P1M |= 0x80;
                        P2M |= 0x01;
                       
                        led3 = 1;
                        led5 = 0;
                }
                if(seg_l4 == 1&&r_smg_t1 == 13)          //e
                {
                        P0M |= 0x00;
                        P1M |= 0x80;
                        P2M |= 0x02;
                       
                        led5 = 1;
                        led4 = 0;
                }
                if(seg_l5 == 1&&r_smg_t1 == 14)          //f
                {
                        P0M |= 0x80;
                        P1M |= 0x00;
                        P2M |= 0x02;
                       
                        led2 = 1;
                        led4 = 0;
                }
                if(seg_l6 == 1&&r_smg_t1 == 15)         //g
                {
                        P0M |= 0x00;
                        P1M |= 0x40;
                        P2M |= 0x02;
                       
                        led6 = 1;
                        led4 = 0;
                }
                if(seg_l7 == 1&&r_smg_t1 == 16)         //dp
                {
                        P0M |= 0x00;
                        P1M |= 0xc0;
                        P2M |= 0x00;

                        led5 = 0;
                        led6 = 0;
                }
        }
        else if(!b_key_smg)
        {
                r_smg_num = 0;
        }
}
void num_show(uint8_t num)
{
        seg = numtab[num/10];
        seg_l = numtab[num%10];
}


三、呼吸灯
void led_on(void)
{
        if(b_key_led)
        {
                if(b_50us_t)
                {
                        b_50us_t = 0;
                        r_led_t0++;
                        if(r_led_t0 <= r_led_t1)
                        {
                                led = 1;
                        }
                        else
                        {
                                led = 0;
                        }
                        if(r_led_t0 == 140)
                        {
                                r_led_t0 = 0;
                                if(!b_led)
                                {
                                        r_led_t1++;
                                        if(r_led_t1 == 140)
                                        {
                                                b_led = 1;
                                        }
                                }
                                if(b_led)
                                {
                                        r_led_t1--;
                                        if(r_led_t1 == 0)
                                        {
                                                b_led = 0;
                                        }
                                }
                        }
                }
        }
}

我是小白,很白很白的小白!!!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-12-18 15:50

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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