




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1 / 11DS18B20测温显示,proteus仿真。Written by jinsongliang具体程序如下Main.c:#include<reg51.h>#include"lib51v3.c"#include"18b20.c"#include"segv3.c"void main (void)unsigned char disp5=10,0,0,14,2;signed char temp=0;while(1)/*1、读取温度值*/temp=Get_Temputer();/2、显示前处理*/if(temp<0)d
2、isp0=13;temp=-temp;disp1=temp/10;disp2=temp%10;elsedisp0=temp/100;disp1=temp/10-disp0*10;disp2=temp%10;if(!disp0)/百位数不为0则显示,若要显示0,可将其注释掉disp0=10;/3、显示*/Seg_Display(disp);Lib51v3.cvoid Delay_Nus (unsigned char n)while(n-);/for (;n>0;n-);18b20.c:/*时序很重要,移植时注意延时函数*/#define B20_PORTP1/此处可以设置I/O口#defi
3、ne B20_CHANNEL0#define R_B20_CHANNEL()B20_PORT&(1<<B20_CHANNEL)#define W_B20_CHANNEL_1()B20_PORT|=(1<<B20_CHANNEL)#define W_B20_CHANNEL_0()B20_PORT&=(1<<B20_CHANNEL)#define SKIP_ROM0xCC#define TEMPUTER_CONVERT0x44#define READ_ROM0xBE/one/*初始化函数,失败会返回1,初始化过程见注释若单片机读到了数据线上的低电
4、平“0”后,还要做延时,其延时的时间从单片机发出的高电平算起最少要480微秒。之后单片机将数据线再次拉高到高电平“1”后结束。*/static unsigned char Init_18b20 (void) unsigned char x=0;W_B20_CHANNEL_1(); /1、从单片机拉高数据线开始 Delay_Nus(8);/6*n useconds lib51v3.cW_B20_CHANNEL_0(); Delay_Nus(81); W_B20_CHANNEL_1(); /2、单片机拉低数据线480us以上,拉高数据线,释放 Delay_Nus(14);/3、之后ds18b20,
5、1560us以后反应,拉高数据线 x=R_B20_CHANNEL();/4、单片机读取数据线if(x)return x;Delay_Nus(20);return x;/x=0代表复位成功/twostatic void Write_18b20(unsigned char w_data) unsigned char i; unsigned char temp; for(i=0;i<8;i+) W_B20_CHANNEL_1();temp=w_data&(1<<0);W_B20_CHANNEL_0();/单片机从高到低,拉低1us以上,并在15us内产生写间隙B20_POR
6、T=temp<<B20_CHANNEL;/写数据,(先写低位)Delay_Nus(7);/1560us内18B20采样 w_data>>=1; W_B20_CHANNEL_1();Delay_Nus(4); /threestatic unsigned char Read_18b20(void) unsigned char i; unsigned char temp;unsigned char r_data=0x00;for(i=0;i<8;i+) r_data>>=1;W_B20_CHANNEL_1();W_B20_CHANNEL_0();/从高到低1
7、5us内,再到高,产生读间隙Delay_Nus(1);W_B20_CHANNEL_1();temp=B20_PORT<<(7-B20_CHANNEL);/读数据,从低位开始 temp&=(1<<7);r_data+=temp;Delay_Nus(8); /整个读一位过程在60120us W_B20_CHANNEL_1();return r_data; /four/*若要读出当前的温度数据我们需要执行两次工作周期,第一个周期为复位、跳过ROM指令、执行温度转换存储器操作指令、等待500uS温度转换时间。紧接着执行第二个周期为复位、跳过ROM指令、执行读RAM的存储
8、器操作指令、读数据(最多为9个字节,中途可停止,只读简单温度值则读前2个字节即可)*/signed char Get_Temputer (void)/读取温度值,返回的带符号字符型-55到+127;128无法显示,初始化失败会显示00.C unsigned char tem_h,tem_l;signed char temp;if(Init_18b20()=0)/复位18b20Write_18b20(SKIP_ROM);/跳过ROM Write_18b20(TEMPUTER_CONVERT);/温度变换elsereturn temp=0;/Delay_Nus(100); if(Init_18b2
9、0()=0)/复位18b20Write_18b20(SKIP_ROM);/跳过ROMWrite_18b20(READ_ROM);/读暂存存储器elsereturn temp=0;tem_l=Read_18b20();/读数据 tem_h=Read_18b20(); /*只要高字符的低四位和低字符的高四位,温度范围099,temp为补码,直接由unsigned char 赋值给 signed char 内容不变,代表的值改变*/temp=(tem_h<<4)+(tem_l>>4);return temp;Segv3.c:#define COMMON_ANODIC0/共阳数
10、码管#define COMMON_CATHODAL 1/共阴数码管#define SEG_CATEGORY0/选择共阳数码管#define SEG8_A(1<<0)/段A亮时为0,属共阳数码管#define SEG8_B(1<<1)#define SEG8_C(1<<2)#define SEG8_D(1<<3)#define SEG8_E(1<<4)#define SEG8_F(1<<5)#define SEG8_G(1<<6)#define SEG8_DP(1<<7)#defineSEG8_CHA
11、R_0(SEG8_G&SEG8_DP)#defineSEG8_CHAR_1 (SEG8_A&SEG8_D&SEG8_E&SEG8_F&SEG8_G&SEG8_DP)#defineSEG8_CHAR_2(SEG8_C&SEG8_F&SEG8_DP)#defineSEG8_CHAR_3(SEG8_E&SEG8_F&SEG8_DP)#defineSEG8_CHAR_4(SEG8_A&SEG8_D&SEG8_E&SEG8_DP)#defineSEG8_CHAR_5(SEG8_B&SEG8_E
12、&SEG8_DP)#defineSEG8_CHAR_6(SEG8_B&SEG8_DP)#defineSEG8_CHAR_7(SEG8_D&SEG8_E&SEG8_F&SEG8_G&SEG8_DP)#defineSEG8_CHAR_8SEG8_DP#defineSEG8_CHAR_9(SEG8_E&SEG8_DP)#defineSEG8_CHAR_0#defineSEG8_CHAR_E(SEG8_B&SEG8_C&SEG8_DP)#defineSEG8_CHAR_R (SEG8_A&SEG8_B&SEG8_C
13、&SEG8_D&SEG8_F&SEG8_DP)#define SEG8_CHAR_SUB (SEG8_A&SEG8_B&SEG8_C&SEG8_D&SEG8_E&SEG8_F&SEG8_DP)/#defineSEG8_CHAR_A/#defineSEG8_CHAR_B#defineSEG8_CHAR_C(SEG8_B&SEG8_C&SEG8_G&SEG8_DP)/#defineSEG8_CHAR_D/#defineSEG8_CHAR_F/#defineSEG8_CHAR_H#if SEG_CATEG
14、ORY=COMMON_ANODICstatic const unsigned char SEG8_CODE=SEG8_CHAR_0,SEG8_CHAR_1,SEG8_CHAR_2,SEG8_CHAR_3,SEG8_CHAR_4,SEG8_CHAR_5,SEG8_CHAR_6,SEG8_CHAR_7,SEG8_CHAR_8,SEG8_CHAR_9,SEG8_CHAR_,/SEG8_CODE10SEG8_CHAR_E,/SEG8_CODE11SEG8_CHAR_R,/SEG8_CODE12SEG8_CHAR_SUB,/SEG8_CODE13SEG8_CHAR_C/SEG8_CODE14;#else
15、static const unsigned char SEG8_CODE=SEG8_CHAR_0,SEG8_CHAR_1,SEG8_CHAR_2,SEG8_CHAR_3,SEG8_CHAR_4,SEG8_CHAR_5,SEG8_CHAR_6,SEG8_CHAR_7,SEG8_CHAR_8,SEG8_CHAR_9,SEG8_CHAR_,/SEG8_CODE10SEG8_CHAR_E,/SEG8_CODE11SEG8_CHAR_R,/SEG8_CODE12SEG8_CHAR_SUB,/SEG8_CODE13SEG8_CHAR_C/SEG8_CODE14 ;#endif#define SEG8_SL
16、ECT_PORTP3/此处可以设置I/O口#define BIT00#define BIT11#define BIT22#define BIT33#define SEG8_BIT0_ON()SEG8_SLECT_PORT|=(1<<BIT0)#define SEG8_BIT0_OFF()SEG8_SLECT_PORT&=(1<<BIT0)#define SEG8_BIT1_ON()SEG8_SLECT_PORT|=(1<<BIT1)#define SEG8_BIT1_OFF()SEG8_SLECT_PORT&=(1<<BIT1)#
17、define SEG8_BIT2_ON()SEG8_SLECT_PORT|=(1<<BIT2)#define SEG8_BIT2_OFF()SEG8_SLECT_PORT&=(1<<BIT2)#define SEG8_BIT3_ON()SEG8_SLECT_PORT|=(1<<BIT3)#define SEG8_BIT3_OFF()SEG8_SLECT_PORT&=(1<<BIT3)#define SEG8_CODE_PORTP2/此处可以设置I/O口void Seg_Display (char *p)unsigned char temp4;temp0=SEG8_CODE*p+;temp1=SEG8_CODE*p+;temp2=SEG8_CODE*p+;temp3=SEG8_CODE*p+;if(*p<4)#if SEG_CATEGORY=COMMON_ANODIC temp*p&=SEG8_DP;#elsetemp*p|=SEG8_DP;#endifunsigned char i;for(i=0;i<150;i+)SEG8_CODE_PORT
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年智能仓储分拣技术发展趋势与应用案例分析报告
- 2025年工业互联网平台传感器网络自组网技术在智能处理中的应用报告
- 2025年农业生物技术在种业创新中的应用突破与生物安全报告
- 基于2025年装配式建筑部品部件标准化设计的智能家居系统生产报告
- 2025年血液净化医疗服务行业市场风险与应对策略研究报告
- 庭院围墙建设合同协议书范文
- 2025年生态修复植被重建技术成果在生物多样性保护中的应用分析报告
- 家居市场2025年线上线下融合创新模式创新模式与智能家居物联网技术应用研究报告
- 2025年科技企业孵化器建设资金申请项目实施方案与风险控制报告
- 2025年城市生态修复项目社会稳定风险评估与生态修复项目风险评估与评估指标报告
- 高中英语外研版 单词表 必修1
- 临床流行病学与循证医学-临床实践指南的制定与评价
- 【魔镜洞察】2024药食同源保健品滋补品行业分析报告
- 2023届高考地理一轮复习跟踪训练-石油资源与国家安全
- 14.有趣的光影(课件)-美术六年级下册
- 中央2024年商务部中国国际电子商务中心招聘笔试历年典型考题及考点附答案解析
- 2024年四川省南充市名校中考物理模拟试卷
- JBT 14682-2024 多关节机器人用伺服电动机技术规范(正式版)
- 改进工作作风自查报告(11篇)
- 24春国家开放大学《机械CADCAM》形考任务1-3参考答案
- 山东省烟台市牟平区(五四制)2023-2024学年九年级下学期期中考试数学试题
评论
0/150
提交评论