版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、/*-段P0,位P2。接线从低端开始,段a-h对应P0.0-P0.7.位1,2.对应 P2.0-P2.7 -*/单片机:89CS52/晶振:12MH #include <AT89X52.h>#include "DS18B20.h"#define schar signed char#define uint unsigned int#define uchar unsigned char /宏定义sbit SET=P31; /定义调整键sbit DEC=P32; /定义减少键sbit ADD=P33; /定义增加键sbit jiawen=P36; /定义加温bit s
2、hanshuo_st; /闪烁间隔标志bit beep_st; /加温间隔标志uchar x=0; /计数器schar m,PD; /温度值全局变量uchar n; /温度值全局变量uchar set_st=0; /状态标志schar shangxian=50; /上限报警温度,默认值为50schar xiaxian=25; /下限报警温度,默认值为25ucharcode LEDData= 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0XD8,0x80,0x90;/共阳码code LEDData1=0x40,0x79,0x24,0x30,0x19,0x12,0x02,
3、0x78,0x00,0x10;/共阳码/*延时子程序*/void Delay(uint num)while( -num );/*初始化定时器0*/void InitTimer()TMOD=0x1;TH0=0x3c;TL0=0xb0; /50ms(晶振12M)/*定时器0 中断服务程序*/void timer0(void) interrupt 1TH0=0x3c;TL0=0xb0;x+;/*外部中断0 服务程序*/void int0(void) interrupt 0EX0=0; /关外部中断0if(DEC=0&&set_st=1) if(DEC=0)Delay(80);/500
4、 if(DEC=0)shangxian-; do while(DEC=0);Delay(80);/while(DEC=0);if(shangxian<xiaxian) shangxian=xiaxian;else if(DEC=0&&set_st=2) if(DEC=0) Delay(80);/if(DEC=0)xiaxian-;do while(DEC=0);Delay(80);/while(DEC=0);if(xiaxian<0)xiaxian=0; /*外部中断1 服务程序*/void int1(void) interrupt 2EX1=0; /关外部中断1i
5、f(ADD=0&&set_st=1) if(ADD=0)Delay(80); /500if(ADD=0) shangxian+; do while(ADD=0);Delay(80);/500 while(ADD=0); if(shangxian>=99) shangxian=99;else if(ADD=0&&set_st=2) if(ADD=0)Delay(80); /if(ADD=0) xiaxian+;do while(ADD=0);Delay(80);/500while(ADD=0); if(xiaxian>shangxian)xiaxian
6、=shangxian;/*读取温度*/void check_wendu()uint a,b,c;c=ReadTemperature()-5; /获取温度值并减去DS18B20 的温漂误差a=c/100; /计算得到十位数字b=c/10-a*10; /计算得到个位数字m=c/10; /计算得到整数位n=c-a*100-b*10; /计算得到小数位if(m<0)m=0;n=0; /设置温度显示下限if(m>99)m=99;n=9; /设置温度显示上限/*显示开机初始化等待画面*/Disp_init()P0 = 0xbf; /显示-P2 = 0xf7;Delay(200);P2 = 0x
7、fb;Delay(200);P2 = 0xfd;Delay(200);P2 = 0xfe;Delay(200);P2 = 0xff; /关闭显示/*显示温度子程序*/Disp_Temperature() /显示温度P0 =0xc6; /显示CP2 = 0xfe;Delay(200);P0 =LEDDatan; /显示个位P2 = 0xfd;Delay(200);P0 =LEDData1m%10; /显示十位P2 = 0xfb;Delay(200);P0 =LEDDatam/10; /显示百位P2 = 0xf7;Delay(200);P2 = 0xff; /关闭显示/*显示报警温度子程序*/Di
8、sp_alarm(uchar baojing)P0 =0xc6; /显示CP2 = 0xfe;Delay(200);P0 =LEDDatabaojing%10; /显示十位P2 = 0xfd;Delay(200);P0 =LEDDatabaojing/10; /显示百位P2 = 0xfb;Delay(200);if(set_st=1)P0 =0x89;else if(set_st=2)P0 =0xc7; /上限H、下限L 标示P2 = 0xf7;Delay(200);P2 = 0xff; /关闭显示/*加降温子程序*/void Alarm()if(x>=0) beep_st=beep_s
9、t; x=0; /if(m>=shangxian&&beep_st=1)|(m<xiaxian&&beep_st=1)/jiawen=0; /else /上下限两头加温,中间不加温/jiawen=1;if(m>=shangxian) /大于上限停止jiawen=1;if(m<=xiaxian)/当降到下限才加温 jiawen=0; /*主函数*/void main()uint z;InitTimer(); /初始化定时器EA=1; /全局中断开关TR0=1; /启动定时器0IT0=1; /定时器0脉冲触发方式,下降沿有效IT1=1; /定
10、时器1脉冲触发方式,下降沿有效check_wendu();check_wendu();for(z=0;z<300;z+)Disp_init();while(1)if(SET=0)Delay(600);/2000dowhile(SET=0);set_st+;x=0;shanshuo_st=1;if(set_st>2)set_st=0;if(set_st=0)EX0=0; /关闭外部中断0EX1=0; /关闭外部中断1check_wendu();Disp_Temperature();Alarm(); /加温检测else if(set_st=1)jiawen=1; /关闭加温EX0=1;
11、 /开启外部中断0EX1=1; /开启外部中断1if(x>=10)shanshuo_st=shanshuo_st;x=0;if(shanshuo_st) Disp_alarm(shangxian);else if(set_st=2)jiawen=1; /关闭加温EX0=1; /开启外部中断0EX1=1; /开启外部中断1if(x>=10)shanshuo_st=shanshuo_st;x=0;if(shanshuo_st) Disp_alarm(xiaxian); /*单片机89CS52*/#ifndef DS18B20_H#define DS18B20_H#include <
12、;AT89X52.h>#define uint unsigned int#define uchar unsigned char /宏定义sbit DQ=P37; /定义DS18B20 总线I/O/*延时子程序*/void Delay_DS18B20(int num)while(num-) ;/*初始化DS18B20*/void Init_DS18B20(void)uchar x=0;DQ = 1; /DQ 复位Delay_DS18B20(8); /稍做延时8DQ = 0; /单片机将DQ 拉低Delay_DS18B20(32); /精确延时,大于480us 80DQ = 1; /拉高总线
13、Delay_DS18B20(14); /14x = DQ; /稍做延时后,如果x=0 则初始化成功,x=1 则初始化失败Delay_DS18B20(20); /20/*读一个字节*/uchar ReadOneChar(void)uchar i=0;uchar dat = 0;for (i=8;i>0;i-)DQ = 0; / 给脉冲信号dat>>=1;DQ = 1; / 给脉冲信号if(DQ)dat|=0x80;Delay_DS18B20(4); /4return(dat);/*写一个字节*/void WriteOneChar(uchar dat)uchar i=0;for (i=8; i>0; i-)DQ = 0;DQ = dat&0x01;Delay_DS18B20(5); /5DQ = 1;dat>>=1;/*读取温度*/uint ReadTemperature(void)uchar a=0;uchar b=0;uint t=0;float tt=0;Init_DS18B20();WriteOneChar(0xCC); /跳过读序号列号的操作WriteOneChar(0x4
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年河北体育学院竞争性选调科研处处长1名考试参考题库及答案解析
- 2026年湖北中烟工业有限责任公司招聘169人考试备考试题及答案解析
- 2026年宿州萧县实验高级中学教师招聘26名考试备考题库及答案解析
- 2026年井冈山垦殖场农技服务有限公司面向社会公开招聘工作人员考试参考题库及答案解析
- 2026广东深圳市福田区总工会招聘工会社会工作者6人考试参考题库及答案解析
- 2026年大理州云龙县公安局招聘警务辅助人员(13人)笔试备考题库及答案解析
- 2026西安市第二十三中学招聘考试备考题库及答案解析
- 2026年成都文理学院单招职业技能考试备考试题带答案解析
- 2026西北工业大学动力与能源学院爆震燃烧团队非事业编人员招聘1人(陕西)考试参考题库及答案解析
- 2026浙江台州市温岭市农业农村和水利局招聘编外工作人员1人考试备考题库及答案解析
- 陕西交控集团2026校园招聘考试备考题库附答案
- 2026年气瓶检验员闭卷考试检验报告出具规范练习与总结含答案
- 2026年自由职业者合同
- 2026中国支付清算协会招聘参考考试试题及答案解析
- 2025年“雄鹰杯”小动物医师技能大赛备考试题库(含答案)
- 颈肩腰腿痛的防治
- 中药检验报告书书写格式规范概要
- YS/T 534.2-2007氢氧化铝化学分析方法第2部分:烧失量的测定重量法
- GB/T 31540.1-2015消防安全工程指南第1部分:性能化在设计中的应用
- 林果业机械化水平评价指标体系
- 安全生产标准化管理体系全套文件
评论
0/150
提交评论