蓝桥杯单片机备考指南:备战笔记全解析

一、温度读取会影响ADC读取

可以延长他们的读取时间

二、 按键冲突问题

假如你使用了NE555,p34引脚会冲突,造成按键不灵敏

解决:把有关P34的检测改掉。把下面那一行注释掉就行。

三、条件判断问题

不能这样子判断:

正确判断:

 四在 switch 语句中,所有的 case 值必须是唯一的

也就是说case不能嵌套,不然会出现编译错误

五、数码管显示不全,后面几位没有数据或者乱码

显示器只有 1357,后面几位没有数据或者乱码

原因:extern u8 smg_buf[8]  少了u8

六、两个u8相减,造成回绕的问题

·  在 C 语言中,当两个无符号整数相减时,如果结果本应为负数,由于模运算(基于 u8 的 256 范围),结果会“回绕”。

·  举例:

  • 如果 before_adc_value = 30,now_adc_value = 40,那么 30 – 40 = -10。作为 u8,这会回绕:-10 + 256 = 246。
  • 如果 before_adc_value = 100,now_adc_value = 60,那么 100 – 60 = 40,这在 u8 范围内,不会回绕。
  • 解决一:或者改为s32

    解决二:

    C 语言中的 &&(逻辑与)运算符具有短路求值的特性,这意味着:

  • 条件 before_adc_value >= now_adc_value && (before_adc_value – now_adc_value) >= 50 是从左到右求值的。
  • 如果左边的条件 before_adc_value >= now_adc_value 为假(即 before_adc_value < now_adc_value),整个表达式的结果直接为假,右边的 (before_adc_value – now_adc_value) >= 50 根本不会被执行
  • 七、按键出现重复跳过的问题

    忘记加 cnt_key=0了

    八、51硬件仿真出现断连的情况

    原因:按键操作控制影响的P30和P31

    把P30和P31置为一,不要影响到他

    九、硬件仿真无法进入中断问题,运行正常

    没有勾选硬件仿真

    十、读取ds1302的时间为零

    第二个是对的,第一个的参数是局部变量,传不到外面

    十一、keil5突然编译输出框build output 不见了

    十二、bit和sbit

    Bit:定义: bit 是 C 语言中的一种数据类型,通常由特定编译器(如 Keil C51 或 SDCC)扩展支持,用于声明一个单比特变量。

    sbit定义:sbit 是“special bit”的缩写,是特定编译器(如 Keil C51)提供的关键字,用于声明直接映射到硬件寄存器(如端口、控制位)的单比特变量。

    十三、u8 i 和 int i 在for循环中引起的区别

    在这个代码中,数码管不亮,而我把u8 i 改为int i数码管就显示正常了

    原因:

    在 for (i = 4; i >= 0; i–) 中:

  • 初始时,i = 4。
  • 每次循环,i– 递减 1。
  • 当 i 从 0 递减到 -1 时,由于 u8 和 u16 是无符号类型,-1 会回绕
  • 对于 u8,-1 回绕为 255。
  • 对于 u16,-1 回绕为 65535。
  • 作者:可乐鸡翅好好吃

    物联沃分享整理
    物联沃-IOTWORD物联网 » 蓝桥杯单片机备考指南:备战笔记全解析

    发表回复