单片机的数字温度计设计方案(附代码及仿真).pdf

上传人:tbuqq 文档编号:4666448 上传时间:2019-11-24 格式:PDF 页数:17 大小:455.71KB
返回 下载 相关 举报
单片机的数字温度计设计方案(附代码及仿真).pdf_第1页
第1页 / 共17页
亲,该文档总共17页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《单片机的数字温度计设计方案(附代码及仿真).pdf》由会员分享,可在线阅读,更多相关《单片机的数字温度计设计方案(附代码及仿真).pdf(17页珍藏版)》请在三一文库上搜索。

1、1 / 17 基于 STC89C52 的数字温度计 目录 1、绪论.3 2、方案选择 2.1、主控芯片选择 3 2.2、显示模块 .3 2.3、温度检测模块 4 3、系统硬件设计 3.1、51 单片机最小系统设计 .4 3.2、电源供电电路设计 5 3.3、LCD显示电路设计 .6 3.4、温度检测电路设计 . . 7 4、系统软件设计 4.1、温度传感器数据读取流程图 .9 4.2、系统程序设计 .10 5、编程和仿真 5.1、Keil 编程软件 11 5.2、proteus.11 5.3、仿真界面 11 6、总结 12 7、附录 附录 1、原理图 .12 2 / 17 附录 2、程序清单

2、13 1、绪论 在信息高速发展的21 世纪,科学技术的发展日新月异,科技的进步带动 了测量技术的发展,现代控制设备的性能和结构发生了翻天覆地的变化。我们 已经进入了高速发展的信息时代,测量技术也成为当今科技的一个主流,广泛 地深入到研究和应用工程的各个领域。温度和人们的生活息息相关,温度的测 量也就变得很重要。 2、系统方案选择 2.1 主控芯片选择 方案一: STC89C52RC STC89C52RC 是采用 8051 核的 ISP在线可编程芯片,最高工作时钟频率 80MHz,片内含 8KB的可反复擦写 1000 次的 Flash只读存储器,器件兼容MCS- 51 指令系统及 8051 引脚

3、结构,芯片内集成了通用8 位中央处理器和ISP Flash 存储单元,具有在线可编程特定,配合PC端的控制程序即可将用户的程序代码 下载进单片机内部,省去了购买通用编程器,而且速度更快。STC89C52RC 系列 单片机是单时钟周期、高速、低功耗的新一代8051 单片机。 方案二: ATmega8 ATmega8是 ATMAL公司在 2002 年第一季度推出的一款新型AVR高档单片 机。在 AVR家族中, ATmega8是一种非常特殊的单片机,它的芯片内部集成了 较大容量的存储器和丰富强大的硬件接口电路,具备AVR高档单片机 MEGA系 列的全部性能和特点。但由于采用了小引脚封装 /头文件 #

4、define uchar unsigned char #define uint unsigned int sbit rs=P20。 sbit lcden=P21。 / 液晶使能端 sbit DATA = P37 。 /DS18B20接入口 uchar FLAG_DIS=0 。 uchar bai_18b20,shi_18b20,ge_18b20,num 。 / 定义变量 bit flag_Negative_number 。/ 负数标志 uchar code table=“tempreture:“ 。 / 提示语 /*一毫秒定时 */ void delay_ms(uint z uint x,y。

5、 for(x=z。x0。x for(y=110。y0。y。 /* 延时子函数 */ void delay(uint num while(num 。 13 / 17 /* 液晶写命令 */ void write_lcd_com(uchar com rs=0。 lcden=0。 P0=com 。 delay_ms(1。 lcden=1。 delay_ms(1。 lcden=0。 /* 液晶写数据 */ void write_lcd_date(uchar date rs=1。 lcden=0。 P0=date。 delay_ms(1。 lcden=1。 delay_ms(1。 lcden=0。 /*

6、 液晶初始化程序 */ void lcd_init( write_lcd_com(0x38。 write_lcd_com(0x0c。 write_lcd_com(0x06。 write_lcd_com(0x01。 /*DS18b20温度传感器函数 */ void Init_DS18B20(void /传感器初始化 uchar x=0。 DATA = 1 。 /DQ 复位 delay(10。 /稍做延时 DATA = 0 。 /单片机将 DQ拉低 delay(80。 /精确延时 大于 480us /450 DATA = 1 。 /拉高总线 14 / 17 delay(20。 x=DATA 。 /

7、稍做延时后 如果 x=0则初始化成功 x=1则初始化失败 delay(30。 /* 温度传感器读一个字节 */ ReadOneChar(void uchar i=0。 uchar dat = 0。 for (i=8。i0。i DATA = 0 。 / 给脉冲信号 dat=1。 DATA = 1 。 / 给脉冲信号 if(DATA dat|=0x80。 delay(8。 return(dat。 /* 温度传感器写一个字节 */ void WriteOneChar(uchar dat uchar i=0。 for (i=8。 i0。 i DATA = 0 。 DATA = dat&0x01 。 d

8、elay(10。 DATA = 1 。 dat=1。 delay(8。 /* 读取温度传感器温度 */ int ReadTemperature(void uchar a=0。 uchar b=0。 int t=0。 float tt=0。 15 / 17 Init_DS18B20( 。 WriteOneChar(0xCC 。 / 跳过读序号列号的操作 WriteOneChar(0x44 。 / 启动温度转换 Init_DS18B20( 。 WriteOneChar(0xCC 。 / 跳过读序号列号的操作 WriteOneChar(0xBE 。 / 读取温度寄存器等 。/ 低位 b=ReadOn

9、eChar( 。/ 高位 t=b。 t t=t+1。 flag_Negative_number = 1 。 else flag_Negative_number = 0 。 tt=t*0.0625。 t= tt*10+0.5 。 return(t。 /* 液晶显示温度 */ void dis_D18B20(void int temp。 temp=ReadTemperature( 。/ 读温度 bai_18b20=temp%1000/100 。/ 显示十位 shi_18b20=temp%100/10 。/ 显示个位 ge_18b20=temp%10 。/ 显示十分位 if(flag_Negativ

10、e_number / 负数 if(bai_18b20=0 /十位为 0,则不显示十位 write_lcd_com(0x80+0x40。 write_lcd_date(0x2D。 write_lcd_date(0x30+shi_18b20。 write_lcd_date(0x30+ge_18b20 。 write_lcd_date(0xDF。 write_lcd_date(0x43。 else 16 / 17 write_lcd_com(0x80+0x40。 write_lcd_date(0x2D。 write_lcd_date(0x30+bai_18b20。 write_lcd_date(0x

11、30+shi_18b20。 write_lcd_date(0xDF。 write_lcd_date(0x43。 else /正数 if(bai_18b20=0 /十位为 0,则不显示十位 write_lcd_com(0x80+0x40。 write_lcd_date(0x30+shi_18b20。 write_lcd_date(0x2E。 write_lcd_date(0x30+ge_18b20 。 write_lcd_date(0xDF。 write_lcd_date(0x43。 else write_lcd_com(0x80+0x40。 write_lcd_date(0x30+bai_18

12、b20。 write_lcd_date(0x30+shi_18b20。 write_lcd_date(0x2E。 write_lcd_date(0x30+ge_18b20 。 write_lcd_date(0xDF。 write_lcd_date(0x43。 void main( lcd_init(。 TMOD=0x01 。 TH0=(65536-50000/256 。 TL0=(65536-50000%256 。 TR0=1 。 ET0=1 。 EA=1 。 /开总中断 write_lcd_com(0x80。 for(num=0。num 17 / 17 write_lcd_date(tablenum。 / delay_ms(10。 / dis_D18B20( 。 while(1 if(FLAG_DIS=1 FLAG_DIS=0。 dis_D18B20( 。 / 读温度并显示 timer0( interrupt 1 / uchar count。 TH0=(65536-50000/256 。 TL0=(65536-50000%256 。 count+。 if(count=60/ 每三秒钟读一次温度传感器温度 FLAG_DIS=1 。 count=0。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1