用单片机编写温度采集记录仪的程序,分模块化编程,用到DS1302、IIC、LCD1602
时间: 2023-07-16 13:15:45 浏览: 89
好的,下面是一个简单的示例代码,供参考:
```c
#include <reg52.h>
#include <intrins.h>
#include "ds1302.h" // DS1302 头文件
#include "lcd1602.h" // LCD1602 头文件
#include "iic.h" // IIC 头文件
#define TEMP_ADDR 0x90 // 温度传感器地址
sbit DS1302_RST=P3^2; // DS1302 复位引脚
sbit DS1302_IO=P3^3; // DS1302 数据引脚
sbit DS1302_SCLK=P3^4; // DS1302 时钟引脚
// 延时函数
void Delay(unsigned int t)
{
while(t--);
}
// 读取温度值
unsigned char ReadTemp()
{
unsigned char temp;
IIC_Start(); // 发送起始信号
IIC_SendByte(TEMP_ADDR); // 发送器件地址
IIC_WaitAck();
IIC_SendByte(0x00); // 发送数据地址
IIC_WaitAck();
IIC_Start();
IIC_SendByte(TEMP_ADDR + 1); // 发送读取命令
IIC_WaitAck();
temp = IIC_ReadByte(); // 读取温度值
IIC_SendAck(1); // 发送非应答信号,结束读取
IIC_Stop(); // 发送停止信号
return temp;
}
// 主函数
void main()
{
unsigned char temp, year, month, day, hour, minute, second;
unsigned char str[16];
LCD_Init(); // LCD1602 初始化
DS1302_Init(); // DS1302 初始化
IIC_Init(); // IIC 初始化
while(1)
{
temp = ReadTemp(); // 读取温度值
DS1302_GetTime(&year, &month, &day, &hour, &minute, &second); // 获取当前时间
sprintf(str, "Temp:%dC %02d/%02d/%02d", temp, year, month, day);
LCD_Clear();
LCD_WriteString(0, 0, "Temp Recorder");
LCD_WriteString(0, 1, str); // 在 LCD1602 第二行显示温度和时间
Delay(10000); // 延时一段时间后再次读取温度值
}
}
```
以上代码使用了 DS1302、IIC 和 LCD1602 三个模块,分别实现了时钟芯片的初始化、温度传感器的读取和 LCD 屏幕的显示。具体实现过程请参考相应的头文件。
阅读全文