为了账号安全,请及时绑定邮箱和手机立即绑定

蓝桥杯大赛单片机比赛经验总结

标签:
嵌入式

蓝桥杯大赛单片机比赛经验总结

  • 适当的延时很重要,可以解决一些不正常现象

  • ds1302读取的时间是BCD码,操作时间时换成10进制操作例:(shi / 16) * 10 + shi % 16

  • 每次只接受和发送一个字符,字符用单引号 ‘’ 字符串用双引号“”

    • if(SBUF == ‘a’)
    • 而不是if(SBUF == "a")
  • 总中断EA定时器中断ET0和串行通信中断ES记得开

  • 52单片机程序不可以直接使用P32的写法,15单片机可以,52使用前需要先进行定义P32=P3^2

  • main函数下面不能忘记写while(1){}

  • 简单初始化函数必须写在while(1){}上面,不能写在里面

  • DS18B20当需要执行温度测量和ad转换的时候,总线控制器必须发出[44h]命令

  • 写iic的读字节函数不用这行程序:temp=0.39*temp

  • iicwrite()函数里面写(要存的地址,要存的值)或者直接把add换成地址

  • pwm的精度不同表现在占空比上,比如8位pwm占空比最小只能是1:256,尔10位pwm占空比可以使1:1024

  • 定时器溢出时间=周期/占空比

  • 定时器不好用的时候可以用ds1302代替

  • ds1302和ds18b20部分子程序名相同

  • 串口通信发送或接受一个字节就进入中断,TI或RI = 1;使用串口助手时一定要选对波特率和文本模式或HEX模式

  • 修改时钟时,将BCD转换成10进制在进行加减,时到24变成0,分和秒到60变成0,修改时分秒显示时 /10 不是/16

  • 超声波用的TR1,TF1,TH1,TL1.用的是定时器1,串口通信的波特率在模式1下与定时器1的溢出率有关

  • 写数据到EEPROM时,地址最好0x000x56,最好间隔一个地址存多个数据,存入的数据最大为255,超过可把数据分开存储

  • 读取时钟时先关中断在读,写EEPROM和读iic和温度时,加延时,注意++ii++的区别使用

  • iic返回数都是unsigned char,adc_val / 255.0f * 5ds18b20返回数是float,先读low,再读high函数里temp定义为int,temp*0.0625。读函数都要初始化两次,超声波distance = t * 0.017

  • 读时间和adc时关总中断再读取

  • 当矩阵键盘和串口同时使用时,串口不要用串口1;P30端口会相互影响

  • 定义数组时预设内存比实际使用大一点

  • 速查表

    char:-128 ~ +127 (1 Byte)
    short:-32767 ~ + 32768 (2 Bytes)
    unsigned short:0 ~ 65536 (2 Bytes)
    int:-2147483648 ~ +2147483647 (4 Bytes)
    unsigned int:0 ~ 4294967295 (4 Bytes)
    long == int
    long long:-9223372036854775808 ~ +9223372036854775807 (8 Bytes)
    double:1.7 * 10^308 (8 Bytes)

    unsigned int:0~4294967295
    long long的最大值:9223372036854775807
    long long的最小值:-9223372036854775808
    unsigned long long的最大值:1844674407370955161

    int64的最大值:9223372036854775807
    int64的最小值:-9223372036854775808
    unsigned int64的最大值:18446744073709551615
    微信公众号搜索:余生还长着呢

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消