完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
#include
#define uint unsigned int #define uchar unsigned char ***it dula=P2^6; //开显示的段 ***it wela=P2^7; //开显示的位 ***it beep=P3^6; //蜂鸣器 uchar i; uchar tempL,tempH,temperature; ***it DQ=P3^7; //温度传感器 uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71,0}; void delay2(uint k) { uint n; n=0; while(n < k) {n++;} return; } void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } Init_DS18B20(void) { unsigned char x=0; DQ=1; //DQ先置高 delay2(8); //延时 DQ=0; //发送复位脉冲 delay2(85); //延时(>480ms) DQ=1; //拉高数据线 delay2(14); //等待(15~60ms) } /**************************************************************************** 函数功能:向DS18B20读一字节数据 入口参数: 出口参数:dat ****************************************************************************/ ReadOneChar(void) { unsigned char i=0; unsigned char dat=0; for (i=8;i>0;i--) { DQ=1; delay2(1); DQ=0; dat>>=1; DQ=1; if(DQ) dat|=0x80; delay2(4); } return(dat); } WriteOneChar(unsigned char dat) { unsigned char i=0; for(i=8;i>0;i--) { DQ=0; DQ=dat&0x01; delay2(5); DQ=1; dat>>=1; } delay(4); } ReadTemperature(void) { Init_DS18B20(); //初始化 WriteOneChar(0xcc); //跳过读序列号的操作 WriteOneChar(0x44); //启动温度转换 delay2(125); //转换需要一点时间,延时 Init_DS18B20(); //初始化 WriteOneChar(0xcc); //跳过读序列号的操作 WriteOneChar(0xbe); //读温度寄存器(头两个值分别为温度的低位和高位) tempL=ReadOneChar(); //读出温度的低位LSB tempH=ReadOneChar(); //读出温度的高位MSB //温度转换,把高低位做相应的运算转化为实际温度 temperature=((tempH*256)+tempL)*0.0625; delay2(200); return(temperature); } void display(uint j) { dula=1; P0=table[j/10]; dula=0; P0=0x00; wela=1; P0=0xfe; wela=0; delay(1); dula=1; P0=table[j%10]; dula=0; P0=0x00; wela=1; P0=0xfd; wela=0; delay(1); } void main() { while(1) { i=ReadTemperature() ; if(i==X)//X是自己设定的温度值,这里你自己设定 beep=1; else beep=0;//如果你想设定多个温度值,可以用switch语句 display(i); } } //这个程序最关键的是怎样写好温度传感器的时序程序 //主要是下面的这个程序,显示你可以改成你自己的电路的显示 /* void delay2(uint k) //这个延时一般不要改动他的时间 { uint n; n=0; while(n < k) {n++;} return; } Init_DS18B20(void) { unsigned char x=0; DQ=1; //DQ先置高 delay2(8); //延时 DQ=0; //发送复位脉冲 delay2(85); //延时(>480ms) DQ=1; //拉高数据线 delay2(14); //等待(15~60ms) } /**************************************************************************** 函数功能:向DS18B20读一字节数据 入口参数: 出口参数:dat ****************************************************************************/ /*ReadOneChar(void) { unsigned char i=0; unsigned char dat=0; for (i=8;i>0;i--) { DQ=1; delay2(1); DQ=0; dat>>=1; DQ=1; if(DQ) dat|=0x80; delay2(4); } return(dat); } WriteOneChar(unsigned char dat) { unsigned char i=0; for(i=8;i>0;i--) { DQ=0; DQ=dat&0x01; delay2(5); DQ=1; dat>>=1; } delay(4); } ReadTemperature(void) { Init_DS18B20(); //初始化 WriteOneChar(0xcc); //跳过读序列号的操作 WriteOneChar(0x44); //启动温度转换 delay2(125); //转换需要一点时间,延时 Init_DS18B20(); //初始化 WriteOneChar(0xcc); //跳过读序列号的操作 WriteOneChar(0xbe); //读温度寄存器(头两个值分别为温度的低位和高位) tempL=ReadOneChar(); //读出温度的低位LSB tempH=ReadOneChar(); //读出温度的高位MSB //温度转换,把高低位做相应的运算转化为实际温度 temperature=((tempH*256)+tempL)*0.0625; delay2(200); return(temperature); } */ keil无法转为.hex 求大神帮忙改正一下 |
|
相关推荐
5个回答
|
|
不知道这个程序是谁写的,就一个字【乱】~~~很乱!
|
|
|
|
好像没有数据存储送显示,这个程序网上很多,下一个用多好。
|
|
|
|
|
|
|
|
编译有错误吗?没有的话就是工程设置里没点上生成。hex
|
|
|
|
这个问题难道还没解决吗?
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-LCD显示图片编程示例之介绍mmap
238 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》第二章 常用的C语言知识点
629 浏览 0 评论
【RA-Eco-RA2E1-48PIN-V1.0开发板试用】(第三篇)ADC采集+PWM输出
552 浏览 0 评论
《DNK210使用指南 -CanMV版 V1.0》第四十五章 人脸识别实验
552 浏览 0 评论
1074 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11763 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 20:32 , Processed in 0.754191 second(s), Total 84, Slave 65 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号