ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:139.83KB ,
资源ID:10385307      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10385307.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(ds18b20c程序proteus仿真.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

ds18b20c程序proteus仿真.docx

1、ds18b20c程序proteus仿真DS18B20测温显示,proteus仿真。Written by jinsongliang具体程序如下:#include#include#include#includevoid main (void) unsigned char disp5=10,0,0,14,2; signed char temp=0; while(1) /*1、读取温度值*/ temp=Get_Temputer(); /2、显示前处理*/ if(temp0;n-);:/* 时序很重要,移植时注意延时函数*/#define B20_PORT P1 /此处可以设置I/O口#define B

2、20_CHANNEL 0#define R_B20_CHANNEL() B20_PORT&(1B20_CHANNEL)#define W_B20_CHANNEL_1() B20_PORT|=(1B20_CHANNEL)#define W_B20_CHANNEL_0() B20_PORT&=(1B20_CHANNEL)#define SKIP_ROM 0xCC#define TEMPUTER_CONVERT 0x44#define READ_ROM 0xBE/one/*初始化函数,失败会返回1,初始化过程见注释若单片机读到了数据线上的低电平“0”后,还要做延时,其延时的时间从单片机发出的高电平算

3、起最少要480微秒。之后单片机将数据线再次拉高到高电平“1”后结束。*/static unsigned char Init_18b20 (void) unsigned char x=0; W_B20_CHANNEL_1(); /1、从单片机拉高数据线开始 Delay_Nus(8); /6*n useconds W_B20_CHANNEL_0(); Delay_Nus(81); W_B20_CHANNEL_1(); /2、单片机拉低数据线480us以上,拉高数据线,释放 Delay_Nus(14); /3、之后ds18b20,1560us以后反应,拉高数据线 x=R_B20_CHANNEL();

4、 /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;i8;i+) W_B20_CHANNEL_1(); temp=w_data&(10); W_B20_CHANNEL_0(); /单片机从高到低,拉低1us以上,并在15us内产生写间隙 B20_PORT=temp=1; W_B20_CHANNEL_1(); Delay_Nus(4);

5、 /threestatic unsigned char Read_18b20(void) unsigned char i; unsigned char temp; unsigned char r_data=0x00; for(i=0;i=1; W_B20_CHANNEL_1(); W_B20_CHANNEL_0(); /从高到低15us内,再到高,产生读间隙 Delay_Nus(1); W_B20_CHANNEL_1(); temp=B20_PORT(7-B20_CHANNEL); /读数据,从低位开始 temp&=(17); r_data+=temp; Delay_Nus(8); /整个读一

6、位过程在60120us W_B20_CHANNEL_1(); return r_data; /four/*若要读出当前的温度数据我们需要执行两次工作周期,第一个周期为复位、跳过ROM指令、执行温度转换存储器操作指令、等待500uS温度转换时间。紧接着执行第二个周期为复位、跳过ROM指令、执行读RAM的存储器操作指令、读数据(最多为9个字节,中途可停止,只读简单温度值则读前2个字节即可)*/signed char Get_Temputer (void)/读取温度值,返回的带符号字符型-55到+127;128无法显示,初始化失败会显示 unsigned char tem_h,tem_l; sign

7、ed char temp; if(Init_18b20()=0) /复位18b20 Write_18b20(SKIP_ROM); /跳过ROM Write_18b20(TEMPUTER_CONVERT); /温度变换 else return temp=0; /Delay_Nus(100); if(Init_18b20()=0) /复位18b20 Write_18b20(SKIP_ROM); /跳过ROM Write_18b20(READ_ROM); /读暂存存储器 else return temp=0; tem_l=Read_18b20(); /读数据 tem_h=Read_18b20();

8、/*只要高字符的低四位和低字符的高四位,温度范围099,temp为补码,直接由unsigned char 赋值给 signed char 内容不变,代表的值改变*/temp=(tem_h4); return temp;:#define COMMON_ANODIC 0 /共阳数码管#define COMMON_CATHODAL 1 /共阴数码管#define SEG_CATEGORY 0 /选择共阳数码管#define SEG8_A (10) /段A亮时为0,属共阳数码管#define SEG8_B (11)#define SEG8_C (12)#define SEG8_D (13)#defin

9、e SEG8_E (14)#define SEG8_F (15)#define SEG8_G (16)#define SEG8_DP (17) #define SEG8_CHAR_0 (SEG8_G&SEG8_DP) #define SEG8_CHAR_1 (SEG8_A&SEG8_D&SEG8_E&SEG8_F&SEG8_G&SEG8_DP)#define SEG8_CHAR_2 (SEG8_C&SEG8_F&SEG8_DP)#define SEG8_CHAR_3 (SEG8_E&SEG8_F&SEG8_DP)#define SEG8_CHAR_4 (SEG8_A&SEG8_D&SEG8_E

10、&SEG8_DP)#define SEG8_CHAR_5 (SEG8_B&SEG8_E&SEG8_DP)#define SEG8_CHAR_6 (SEG8_B&SEG8_DP)#define SEG8_CHAR_7 (SEG8_D&SEG8_E&SEG8_F&SEG8_G&SEG8_DP)#define SEG8_CHAR_8 SEG8_DP#define SEG8_CHAR_9 (SEG8_E&SEG8_DP)#define SEG8_CHAR_ 0#define SEG8_CHAR_E (SEG8_B&SEG8_C&SEG8_DP)#define SEG8_CHAR_R (SEG8_A&S

11、EG8_B&SEG8_C&SEG8_D&SEG8_F&SEG8_DP)#define SEG8_CHAR_SUB (SEG8_A&SEG8_B&SEG8_C&SEG8_D&SEG8_E&SEG8_F&SEG8_DP)/#define SEG8_CHAR_A/#define SEG8_CHAR_B#define SEG8_CHAR_C (SEG8_B&SEG8_C&SEG8_G&SEG8_DP)/#define SEG8_CHAR_D/#define SEG8_CHAR_F/#define SEG8_CHAR_H#if SEG_CATEGORY=COMMON_ANODIC static cons

12、t 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_CODE10 SEG8_CHAR_E, /SEG8_CODE11 SEG8_CHAR_R, /SEG8_CODE12 SEG8_CHAR_SUB, /SEG8_CODE13 SEG8_CHAR_C /SEG8_CODE14 ;#else static

13、 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_CODE10 SEG8_CHAR_E, /SEG8_CODE11 SEG8_CHAR_R, /SEG8_CODE12 SEG8_CHAR_SUB, /SEG8_CODE13 SEG8_CHAR_C /SEG8_CODE14 ;#endif#

14、define SEG8_SLECT_PORT P3 /此处可以设置I/O口#define BIT0 0 #define BIT1 1#define BIT2 2#define BIT3 3#define SEG8_BIT0_ON() SEG8_SLECT_PORT|=(1BIT0)#define SEG8_BIT0_OFF() SEG8_SLECT_PORT&=(1BIT0)#define SEG8_BIT1_ON() SEG8_SLECT_PORT|=(1BIT1)#define SEG8_BIT1_OFF() SEG8_SLECT_PORT&=(1BIT1)#define SEG8_BIT

15、2_ON() SEG8_SLECT_PORT|=(1BIT2)#define SEG8_BIT2_OFF() SEG8_SLECT_PORT&=(1BIT2)#define SEG8_BIT3_ON() SEG8_SLECT_PORT|=(1BIT3)#define SEG8_BIT3_OFF() SEG8_SLECT_PORT&=(1BIT3)#define SEG8_CODE_PORT P2 /此处可以设置I/O口void Seg_Display (char *p) unsigned char temp4; temp0=SEG8_CODE*p+; temp1=SEG8_CODE*p+; t

16、emp2=SEG8_CODE*p+; temp3=SEG8_CODE*p+; if(*p4) #if SEG_CATEGORY=COMMON_ANODIC temp*p&=SEG8_DP; #else temp*p|=SEG8_DP; #endif unsigned char i; for(i=0;i150;i+) SEG8_CODE_PORT = temp0; SEG8_BIT0_ON(); Delay_Nus(6); / SEG8_BIT0_OFF(); SEG8_CODE_PORT = temp1; SEG8_BIT1_ON(); Delay_Nus(6); SEG8_BIT1_OFF(); SEG8_CODE_PORT = temp2; SEG8_BIT2_ON(); Delay_Nus(6); SEG8_BIT2_OFF(); SEG8_CODE_PORT = temp3; SEG8_BIT3_ON(); Delay_Nus(6); SEG8_BIT3_OFF();

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1