根据给定的文件信息,我们可以总结出以下与“温度显示程序”相关的知识点: ### 一、DS18B20 温度传感器简介 DS18B20 是一款非常常用的数字温度传感器,具备较高的精度(±0.5°C 在 10°C 至 85°C 的范围内),并且具有简单的单线接口。这意味着只需要一根数据线进行通信,这大大简化了硬件设计。 ### 二、C语言基础 #### 1. 数据类型定义 在程序开头,可以看到一些自定义的数据类型定义: - `#define uchar unsigned char`:定义`uchar`为无符号字符型。 - `#define uint unsigned int`:定义`uint`为无符号整型。 这些定义使得代码更具可读性,并且可以根据具体需求调整数据类型。 #### 2. 变量声明 - `sbit m1 = P2^2;`:定义了一个特殊位变量`m1`,它位于P2口的第2位。 - `sbit DS = P1^2;`:同理,定义了`DS`变量,它位于P1口的第2位。 - `uint temp;`:声明一个无符号整型变量`temp`用于存储温度值。 - `uchar flag;`:声明一个无符号字符型变量`flag`用于标记温度是否为负数。 #### 3. 数组定义 - `ucharc ode tab[]`:定义了一个数组`tab`,用于存储七段数码管的显示码。 - `uchar code point[]`:定义了一个数组`point`,用于存储小数点的显示码。 ### 三、函数实现 #### 1. 延时函数 `void delay(uint z)`:通过循环实现延时功能,通常用于控制程序执行的速度或满足某些硬件接口的时间要求。 #### 2. DS18B20 通信函数 - `void dsreset()`:实现DS18B20的复位操作,确保能够正确与传感器进行通信。 - `uchar tmpread()`:读取DS18B20发送的一位数据,并返回一个完整的字节数据。 - `void tmpwritebyte(uchar dat)`:向DS18B20写入一个字节的数据。 - `uint tmp()`:获取温度值的主要函数,包括启动温度转换、读取温度数据并转换为实际温度值的过程。 - 使用`tmpwritebyte(0xcc)`启动温度转换。 - 使用`tmpwritebyte(0x44)`开始温度转换过程。 - 再次使用`tmpwritebyte(0xcc)`和`tmpwritebyte(0xbe)`读取温度数据。 - 将读取到的两个字节组合成一个完整的温度值,并转换为摄氏度。 - 如果温度为负,则需要对数据进行补码运算。 #### 3. 温度显示函数 `void displayTemp(uint temp)`:该函数负责将读取到的温度值显示在LED上。 - 首先判断温度是否为负,如果是,则显示负号。 - 然后分别处理千位、百位、十位和个位上的数字,将其转换为对应的七段数码管显示码,并控制LED显示。 ### 四、主函数 `void main()`:程序的入口点,主要调用`delay()`进行初始化延迟,然后调用`displayTemp(tmp())`函数显示温度。 通过以上分析,我们可以了解到该温度显示程序主要实现了DS18B20温度传感器的数据采集及LED显示的功能,涉及到了C语言的基础语法、DS18B20传感器的通信协议以及LED显示的实现方法等关键知识点。
#define uchar unsigned char
#define uint unsigned int
sbit m1=P2^2;
sbit m2=P2^1;
sbit m3=P2^0;
sbit m4=P2^3;
sbit DS=P1^2;
uint temp; // 温度变量
uchar flag;
uchar code tab[]=
{0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90
};
uchar code point[]=//小数点点亮
{0x40,0x79,0x24,0x30,
0x19,0x12,0x02,0x78,0x00,0x10
};
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=120;y>0;y--);
}
void dsreset()//发复位
{
uint i;
DS=0;
i=103;
DS=1;
i=4;
while(i>0)i--;
}
uchar tmpread() //读取一字节
{
uchar j,k,dat;
uint i;
for(j=1;j<=8;j++)
{
DS=0;i++; //延时
DS=1;i++;i++;
k=DS;
i=8;while(i>0)i--;
dat=(k<<7)|(dat>>1);//读出的数据最低位在最前面存一个字节在DAT里
}
return(dat);
}
void tmpwritebyte(uchar dat) //写一个字节
{
uint i;
uchar j;
bit testb;
for(j=1;j<=8;j++)
{
testb=dat&0x01;
dat=dat>>1;
if(testb) //写 1
{
剩余5页未读,继续阅读
- 粉丝: 0
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Bluefield 2固件镜像版本,fw-MBF2M345A-VENOT-ES-Ax-24.40.1000.bin
- 雪颜奇迹幻白双重莹白焕采霜50ML-1016-FA.rar
- Qt的QDOCK高级用法源码,包含linux和windows版本,从开源库下载
- OC-FileManage
- coredns-v1.10.1.tar、flannel-v0.26.1.tar、flannel-cni-plugin-v1.5.1-flannel2.tar
- 美宝莲双头眉笔Bundle pack 卸妆液 1211FA-1.rar
- 数学建模学习资料 蒙特卡罗算法课件教程 共9个章节.rar
- 20150424美宝莲胶笔宝贝描述改790.rar
- 《图像梯度与常见算子全解析:原理、用法及效果展示》
- 实验5 GDB调试器的使用(2).docx