蓝桥杯单片机第12届省赛2满分(西风)
1注意S7长短按键冲突问题if(key_down7)//判断是否按下 { fs71;//开始计时 t1000ms_10; } if(key_up7)//判断是否抬起 { if(t1000ms_11000)//长按键 { fled^1; } else//短按键 { f_baofreq; } t1000ms_10; fs70;//停止计时 }2获取频率void Timer0_Init(void) //100微秒12.000MHz { AUXR 0x7F; //定时器时钟12T模式 TMOD 0xF0; //设置定时器模式 TMOD |0X05; TL0 0x00; //设置定时初始值 TH0 0x00; //设置定时初始值 TF0 0; //清除TF0标志 TR0 1; //定时器0开始计时 } if(t1000ms1000) { t1000ms0; TR00;//关闭定时器1 freq (TH08)|TL0; TH00X00; TL00X00; TR01; } if(fs71) { if(t1000ms_12000)//防止溢出 { t1000ms_1; } }3ad通道转换问题当切换通道时比如从 0x43 切到 0x41读到的第一个字节其实是上一次转换的结果 如果紧接着连续读 0x41 和 0x43数据会发生“串位”通道1读到了通道3的数据通道3读到了通道1的数据会导致电压判定完全混乱void ad_proc() { if(ad_slow_down70)return; ad_slow_down0; if(f_adc 0) { // 第一次进来先空读一次废数据(切换通道必做)再读真实数据 ad_zhuanhuan(0x41); v_zhen_1 ad_zhuanhuan(0x41) / 51.0; //读真实数据 f_adc 1; // 下次去读通道3 } else { // 第二次进来先空读一次废数据再读真实数据 ad_zhuanhuan(0x43); v_zhen_3 ad_zhuanhuan(0x43) / 51.0; //读真实数据 f_adc 0; // 下次去读通道1 } }为什么数码管会闪烁单片机的全局中断 (EA) 被关闭长达数毫秒之久。中断被关了这么久数码管错过了好几次刷新时机视觉上就会出现明显的停顿、闪烁在while1前加延时来显示频率//4T 平台在执行“重新上电”后//会以极快的速度毫秒级模拟按下 S6 和 S7 键来进行“缓存电压值和频率值”的操作。//删掉 Delay1000ms()//在状态机驱动的单片机程序尤其是有按键扫描的程序里main 函数进入 while(1) 之前绝对不可以有长延时。//如果是为了等第一个 1 秒钟的频率算出来完全不需要等//前 1 秒频率显示 0 是正常且符合规范的。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2493525.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!