Emmmm,第一次写博客,冲冲冲!!!
蓝桥杯单片机第六届省赛“温度记录器”
先来看看题目
一、思路提炼
1、模块划分
数码管、独立按键、DS18B20、DS1302、一个LED
2、模式划分
参数设置
时钟显示
温度显示
3、界面划分
参数设置界面
时钟显示界面
温度显示界面
二、程序过程实现
1、DS18B20底层代码
比赛会提供一个选手资料包,里面有DS18B20的底层驱动代码,我们只需要修改一下就能使用了。
由于时序的问题,需要将延时函数扩大12倍。
void Delay_onewire(unsigned int t )
{
unsigned char i;
while(t--){
for(i=12;i>0;i--);
};
}
接下来是需要自己写的代码
unsigned char rd_temperature()
{
unsigned char LSB,MSB // 分别读取高字节和低字节
char temp
EA = 0; //进行温度转换时关闭中断,避免干扰时序
init_ds18b20(); //DS18B20复位
Write_DS18B20(0xCC); //写入字节0xCC,跳过ROM指令
Write_DS18B20(0x44); //写入字节0x44,开始温度转换
Delay_onewire(200); //延时700~900us
init_ds18b20(); //DS18B20复位
Write_DS18B20(0xCC); //写入字节0xCC,跳过ROM指令
Write_DS18B20(0xBE); //写入字节0xBE,读取高速暂存器
LSB = Read_DS18B20(); //读取低8位
MSB = Read_DS18B20(); //读取高8位
temp = MSB << 4; //读取数据
temp |= (LSB >> 4);
EA = 1;
return temp;
}
2、DS1302底层代码
unsigned char code a