【蓝桥杯】CT107D开发板没有操作的led灯频闪、暗亮问题,蜂鸣器咔咔响

项目场景:

        项目写好之后,led与beep也有初始化,烧录到开发板中,发现没有操作的LED灯暗亮、频闪,蜂鸣器有时也会咔咔响,如下视频,拍的不清楚,可以看到我操作的一个LED常亮,其他的灯在项目中并未操作,却会突然闪一下,或者微微亮

【BUG】CT107D开发板LED灯频闪、暗亮(已解决)


问题描述

        出这种bug一般是在while(1)里面操作寄存器点灯或者蜂鸣器,出BUG格式如下: 

//可能出BUG的格式如下
//这里我就只写主函数了

void main(void)
{
    System_Init();    //LED与蜂鸣器初始化
    Timer0_Init();    //定时器0初始化
    while(1)
    {
        /*点亮第一个LED*/
        P0 = 0xfe;     //设置P0口为0xfe,第一个led点亮
        P2 = P2 & 0x1f | 0x80;     //这里操作寄存器,为LED的寄存器
        P2 &= 0x1f;    //寄存器高三位清零

        /*其他的初始化函数*/
        vBTN_Process();
		vDS18B20_Process();
    }
}

原因分析:

        这是因为操作寄存器过快,单片机反应不过来,程序容易跑乱


解决方案:

        我的解决方案是用定义一个main_cnt用于延时执行寄存器操作,上面的代码大概修改如下

unsigned char main_cnt = 0;

void main(void)
{
    System_Init();    //LED与蜂鸣器初始化
    Timer0_Init();    //定时器0初始化
    while(1)
    {
        if(main_cnt >= 10)
        {
            main_cnt = 0;
            /*点亮第一个LED*/
            P0 = 0xfe;     //设置P0口为0xfe,第一个led点亮
            P2 = P2 & 0x1f | 0x80;     //这里操作寄存器,为LED的寄存器
            P2 &= 0x1f;    //寄存器高三位清零                    
        }

        /*其他的初始化函数*/
        vBTN_Process();
		vDS18B20_Process();
    }
}

void Timer0_ISR() interrupt 1    //定时器是1ms的
{
    main_cnt++;
    /*其他函数的计时*/
    btn_cnt++;
	smg_cnt++;
	ds18b20_cnt++;
    /*数码管显示函数*/
    Smg_Display();
}

        这样子关于操作寄存器的代码就10ms执行一次,不会过快操作,BUG就被修复了

        我之后也会分享自己的经验,2022年第十三届蓝桥杯全国大赛我在程序规范上吃了亏,会的定时器计数器太少,代码有些冲突,我的建议是蓝桥杯比赛的程序一定要规范,不要怕麻烦,找到一种最适合自己的模板。

  • 9
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

新三晴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值