蓝桥杯进阶

蓝桥杯进阶(单片机)

博主通过了今年的蓝桥杯测试后,发现其实蓝桥杯不难,其主要在于你对它题目的理解,已给源文件的使用,以及相应模块部分的代码书写(如:DS18B20, DS1302, IIC协议)这些的模块要重点记忆,近几年的省赛题都涉及到它们中的部分。

记下来让我们进入更深的学习(博主这里只提供代码和运用思路,如果想对原理有了解的朋友可以参考“小蜜蜂老师”博客上的一些内容)

有了蓝桥杯的基础,我们就可以进行更高级的控制

PWM波

这是在定时器上进行的改动,在定时器前定义一个pwm_duty, pwm_duty的值来控制占空比

unsigned char count = 0;
unsigned char PWM_duty = 0;
void InitTimer0()
{
 TMOD = 0x01;
 TH0 = (65535 - 100) / 256;
 TL0 = (65535 - 100) % 256;
 
 ET0 = 1;
 EA = 1;      //缺少TR0,这是用来控制定时器开关的,可以写在开关中来控制pwm的占空比
}
void timer0() interrupt 1
{
 TH0 = -100 / 256;             //Hz
 TL0 = -100 % 256;
 count++;
 if(count <= pwm_duty)     //小于参数为低
 {
  L1 = 0;
 }
 else if(count < 100)         //大于参数,小于100份为高
 {
  L1 = 1;
 }
 else if (count ==100)     //等于100份时初始化
 {
  L1 = 0;
  count = 0;
 }
} 

DS18B20

DS18B20主要就是通过函数来读取被芯片时时采集的数,使用onewire.c和onewire.h

下面的函数就是采集函数,T-dat采集出来的是3位数,在题目要求2位时可以用 /10 的操作来取掉最后的小数(这是一种取巧的方法,后面会更新正确的做法)

void Read_Temperature()
{
 unsigned char LSB,MSB;
 
 Init_DS18B20();
 Write_DS18B20(0xCC);
 Write_DS18B20(0x44);
 Delay(1000);
 Init_DS18B20();
 Write_DS18B20(0xCC);
 Write_DS18B20(0xBE);
 LSB = Read_DS18B20();
 MSB = Read_DS18B20();
 Init_DS18B20();

 T_dat = 0x0000;
 T_dat = MSB;
 T_dat <<= 8;
 T_dat = T_dat | LSB;
 
 if((T_dat & 0xf800) == 0x0000)
 {
  T_dat >>= 4;
  T_dat = T_dat*10;
  T_dat = T_dat + (LSB&0x0f)*0.625;
 }
}

之后只需要把T-dat用dispiay_Bit函数(参考蓝桥杯基础)显示出来即可
注意的是如果显示出来的数不变化,或者显示8.5.3.就要去onewire.c中修改一下延时的倍数一般乘10

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值