




免费预览已结束,剩余1页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
以前做过的东西都放在了电脑上或传给自己的朋友参考,想到还有很多不相识的朋友还在单片机的门前徘徊,基于此想法,有必要将我的入门级作品粘到这里与大家分享,让我们在嵌入式技术的道路上走的更远些,年轻人将自己的爱好变为自己的事业应该是一件很幸福的事情. 由于有仿真图形,各个管脚的配置情况是很清楚地,也就不说了,先把仿真图发上:下面是源代码,注释也算详尽,我还会在最后附上作品实物,其实仿真通过了,一般情况下就通过了:/=/ 作者: li ran / 描述:数字温度计/日期:2009、x、x/=#include reg52.h#include intrins.h /_nop_();延时函数用#define uchar unsigned char#define uint unsigned intuint count;sbit DQ=P32; /温度输入口sbit DIN=P07; /LED小数点控制sbit aa=P20;sbit bb=P21;sbit cc=P22;sbit dd=P23;sbit ee=P24;uchar code tab112=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40; /共阳LED段码表 0 1 2 3 4 5 6 7 8 9 不亮 - uchar code tab216=0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09;uchar data temp_data2=0x00,0x00; / 读出温度低8位,高8位uchar t0,t1,t2,t3,t4;/显示单元数据,共4个数据,t4运算暂存用 /*11us延时函数*/ void delay1(uint t) for(;t0;t-); /*显示扫描函数*/ void scan() P0=tab1t3; aa=0; delay1(90); P2=0xff; P0=tab1t2; bb=0; delay1(90); P2=0xff; P0=tab1t1; DIN=1; cc=0; delay1(90); P2=0xff; P0=tab1t0; dd=0; delay1(90); P2=0xff; /*18B20复位函数*/ void ow_reset(void) char presence=1; while(presence) while(presence) DQ=1;_nop_();_nop_(); DQ=0; / delay1(50); / 550us DQ=1; / delay1(6); / 66us presence=DQ; / delay1(45); /延时500us presence = DQ; DQ=1; /*18B20写命令函数*/向总线上写一个字节 void write_byte(uchar val) uchar i;for (i=8; i0; i-) / DQ=1;_nop_();_nop_(); DQ = 0; _nop_();_nop_();_nop_();_nop_();_nop_();/5us DQ = val&0x01; /最低位移出 delay1(6); /66us val=val/2; /右移一位 DQ = 1; delay1(1); /*18B20读1个字节函数*/从总线上读取一个字节uchar read_byte(void) uchar i; uchar value = 0; for (i=8;i0;i-) DQ=1;_nop_();_nop_(); value=1; DQ = 0; / _nop_();_nop_();_nop_();_nop_(); /4us DQ = 1;_nop_();_nop_();_nop_();_nop_(); /4us if(DQ)value|=0x80; delay1(6); /66us DQ=1; return(value); /*读出温度函数*/ void read_temp() ow_reset(); /总线复位 write_byte(0xCC); / 跳过Skip ROM命令 write_byte(0xBE); / 发读命令 temp_data0=read_byte(); /温度低8位 temp_data1=read_byte(); /温度高8位 ow_reset(); write_byte(0xCC); / 跳过 write_byte(0x44); / 发转换命令 /*温度数据处理函数*/ void work_temp() uchar n=0; / if(temp_data1127) temp_data1=(255-temp_data1);/我也不明白为啥256就不行,但是用255显示负温度的时候有点误差 temp_data0=(255-temp_data0); n=1;/负温度求补码t4=temp_data0&0x0f;t0=tab2t4; /小数部分t4=(temp_data0&0xf0)4)|(temp_data1&0x0f)4);/ 整数部分t3=t4/100; /百位t1=t4%100; t2=t1/10; /十位t1=t1%10; /个位if(!t3) t3=0x0A;if(!t2) t2=0x0A; /最高位为0时都不显示 if(n) t3=0x0B;/负温度时最高位显示- /*主函数*/ void main() uint h; TMOD=0X01; /定时器的设置 TH0=(65536-1000)/256; / TL0=(65536-1000)%256; / EA=1; / ET0=1; / TR0=1; / /EA=0; ow_reset(); / 开机先转换一次 write_byte(0xCC); / Skip ROM write_byte(0x44); / 发转换命令 for(h=0;h33000;h+) P0=0xbf;P2=0x00;P1=0xbf;P2=0x00; /开机显示00002秒 while(1) read_temp(); /读出18B20温度数据 ? work_temp(); /处理温度数据 ? for(h=0;h300;h+) scan(); /显示温度值1秒 /定时中断函数的入口 void time0() interrupt 1TH0=(65536-1400)/256;TL0=(65536-1400)%256;count+;if(count700)P1=0x6f;ee=0; /这些if语句是用来控制最左边数码管的闪烁速度的/(一个女孩名字的第一个字母)O(_)O哈哈if(700count)&(count=1400)P1=0x00;ee=0
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 2820.5-2025往复式内燃机驱动的交流发电机组第5部分:发电机组
- GB/T 45621-2025航天术语空间碎片
- 预防医学专业教学标准(高等职业教育专科)2025修订
- 2025年中国带表数显卡规市场全景评估及投资规划建议报告
- 流感护理指南
- 2019-2025年中国熟食加工市场前景预测及投资规划研究报告
- 2024年全球及中国汽车12V电池BMS行业头部企业市场占有率及排名调研报告
- 汽车尾气净化设备项目安全评估报告
- 中国水质采样器行业发展前景预测及投资战略研究报告
- 中国化工塑料罐行业市场前景预测及投资价值评估分析报告
- 河北省承德市平泉市2023-2024学年七年级下学期期末生物学试题(原卷版)
- 园林绿化树木的修剪方案
- 反腐败与廉洁行为管理制度
- 高考英语语法专题非谓语动词讲解
- ISO28000:2022供应链安全管理体系
- (2024年)《庄子》二则课件
- 化疗病人的营养膳食课件
- 高考日语复习:日语形容词用法专项课件
- “拍卖委托书–古董拍卖”
- 大型火灾战评报告
- 切口感染护理查房
评论
0/150
提交评论