89C51单片机课程设计报告.doc

上传人:李司机 文档编号:1163734 上传时间:2022-07-11 格式:DOC 页数:14 大小:83.34KB
返回 下载 相关 举报
89C51单片机课程设计报告.doc_第1页
第1页 / 共14页
89C51单片机课程设计报告.doc_第2页
第2页 / 共14页
89C51单片机课程设计报告.doc_第3页
第3页 / 共14页
89C51单片机课程设计报告.doc_第4页
第4页 / 共14页
89C51单片机课程设计报告.doc_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《89C51单片机课程设计报告.doc》由会员分享,可在线阅读,更多相关《89C51单片机课程设计报告.doc(14页珍藏版)》请在三一办公上搜索。

1、-摘要摘 要: 随着现代工农业技术的开展及人们对生活环境要求的提高,人们也迫切需要检测与控制温度。本文通过采用蜂鸣器作为电声元件的温度报警器的设计,说明了该装置进展设计与制作的具体过程及方法。这种温度报警器构造简单,可操作性强,应用广泛。工作时,温度测量围为538。当前环境温度假设超过设定的高温临界温度,由单片机发出报警信号,从而防止带来的不必要的损失。造成高温火灾有:电气线路短路、过载、接触电阻过大等引发高温或火灾;静电产生高温或或火灾;雷电等强电侵入导致高温或火灾;最主要是机房电脑、空调等用电设备长时间工作,导致设备老化,空调发生故障,而不能降温;因此机房所属的电子产品发热快,在短时间机房

2、温度升高超出设备正常温度,导致系统瘫痪或产生火灾,这时温度报警系统就会发挥应有的功能。关键词:STC89C51单片机,数字控制,温度计,DS18B20目 录摘要11 设计要求与方案论证31.1 设计要求31.2根本方案31.2.1 单片机芯片的选择31.2.2 温度传感器设计32 主要元件介绍42.1 STC89C51介绍42.1.1 STC89C51引脚介绍42.1.2单片机最小系统:52.2 DS18B20传感器介绍52.2.1 DS18B20引脚介绍62.2.2 DS18B20的部构造62.3 数码管介绍72.3.1 数码管概述73 软件局部83.1程序流程图83.2 程序.8结论15参

3、考文献16. z.-1 设计要求与方案论证1.1 设计要求根本围0-99;数码管直读显示;扩展功能:可以任意设定温度的上下限报警功能。1.2 根本方案 单片机芯片的选择由于单片机具有以下的很多优点,被我们选定为制作该作品的首选芯片单片机特点:1高集成度,体积小,高可靠性 2控制功能强 3低电压,低功耗,便于生产便携式产品 4易扩展 5优异的性能价格比 本设计采用STC89C51芯片作为硬件核心。STC89C51部具有8KB ROM 存储空间,512字节数据存储空间,带有2K字节的EEPROM存储空间,可以通过串口下载数据。 温度传感器设计温度传感器是温度测量仪表的核心局部,品种繁多。按测量方式

4、可分为接触式和非接触式两大类,按照传感器材料及电子元件特性分为热电阻和热电偶两类。温度传感器的开展大致经历了以下三个阶段;(1)传统的分立式温度传感器(含敏感元件);(2)模拟集成温度传感器/控制器;(3)智能温度传感器。国际上新型温度传感器正从模拟式向数字式、由集成化向智能化、网络化的方向开展。由于本设计是测温电路,可以使用热敏电阻之类的器件利用其感温效应,在将随被测温度变化的电压或电流采集过来,进展 A/D 转换后,就可以用单片机进展数据的处理,在显示电路上,就可以将被测温度显示出来,这种设计需要用到 A/D 转换电路,感温电路比拟麻烦。进而考虑到用温度传感器,在单片机电路设计中,大多都是

5、使用传感器,所以这是非常容易想到的,所以可以采用一只温度传感器 DS18B20,此传感器,可以很容易直接读取被测温度值,进展转换,就可以满足设计要求。2 主要元件介绍2.1 STC89C51介绍 STC89C51引脚介绍 主电源引脚2根VCC(Pin40):电源输入,接5V电源GND(Pin20):接地线外接晶振引脚2根*TAL1(Pin19):片振荡电路的输入端*TAL2(Pin20):片振荡电路的输出端控制引脚4根RST/VPP(Pin9):复位引脚,引脚上出现2个机器周期的高电平将使单片机复位。ALE/PROG(Pin30):地址锁存允许信号PSEN(Pin29):外部存储器读选通信号E

6、A/VPP(Pin31):程序存储器的外部选通,接低电平从外部程序存储器读指令,如果接高电平则从部程序存储器读指令。可编程输入/输出引脚32根STC89C51单片机有4组8位的可编程I/O口,分别位P0、P1、P2、P3口,每个口有8位8根引脚,共32根。P0口Pin39Pin32:8位双向I/O口线,名称为P0.0P0.7P1口Pin1Pin8:8位准双向I/O口线,名称为P1.0P1.7 P2口Pin21Pin28:8位准双向I/O口线,名称为P2.0P2.7 P3口Pin10Pin17:8位准双向I/O口线,名称为P3.0P3.7图1:STC89C51封装图 单片机最小系统当在STC89

7、C51单片机的RST引脚引入高电平并保持2个机器周期时,单片机部就执行复位操作,按键手动复位有电平方式和脉冲方式两种。其中电平复位是通过RST端经过电阻与电源VCC接通而实现的。最小系统如图2所示。图2 单片机最小系统电路电路以STC89C51单片机最小系统为控制核心,测温电路由DS18B20提供,输入局部采用三个独立式按键S1、S2、S3。数码管显示局部。具体电路连接,见附录1。2.2 DS18B20传感器介绍DS18B20引脚介绍图3:DS18B20引脚各引脚功能为:I/O为数据输入/输出端即单线总线,它属于漏极开路输出,外接上拉电阻后,常态下呈高电平。UDD是可供选用的外部电源端,不用时

8、接地,GND为地,NC空脚。DS18B20的部构造DS18B20的部构造主要包括7局部:寄生电源、温度传感器、64位激光loserROM与单线接口、高速暂存器即便筏式RAM,用于存放中间数据、TH触发存放器和TL触发存放器,分别用来存储用户设定的温度上下限值、存储和控制逻辑、位循环冗余校验码CRC发生器。图4:DS18B20部构造2.3 数码管介绍数码管是一种半导体发光器件,其根本单元是发光二极管。数码管按段数分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元多一个小数点显示;按能显示多少个“8可分为1位、2位、4位等等数码管; 按发光二极管单元连接方式分为共阳极数码管和共

9、阴极数码管。共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管,共阳数码管在应用时应将公共极COM接到+5V,当*一字段发光二极管的阴极为低电平时,相应字段就点亮,当*一字段的阴极为高电平时,相应字段就不亮。共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管,共阴数码管在应用时应将公共极COM接到地线GND上,当*一字段发光二极管的阳极为高电平时,相应字段就点亮,当*一字段的阳极为低电平时,相应字段就不亮。 数码管概述图5:数码管数码显示器是一种由LED发光二极管组合显示字符的显示器件,它使用了8个Led发光二极管,其中七个用于显示字符,一个显示

10、小数点,所以通称为七段发光二极管数码显示器。4位一体数码管,其部段已连接好,引脚如下图数码管的正面朝自己,小数点在下方。a、b、c、d、e、f、g、dp为段引脚,S1、S2、S3、S4分别表示四个数码管的位。3 软件设计3.1 程序流程图图6:程序流程图3.2 程序#include #define uint unsigned int#define uchar unsigned char /宏定义#define SET P3_1 /定义调整键#define DEC P3_2 /定义减少键#define ADD P3_3 /定义增加键#define BEEP P3_6 /定义蜂鸣器#define

11、ALAM P1_2/定义灯光报警#define DQ P3_7 /定义DS18B20总线I/Obit shanshuo_st; /闪烁间隔标志bit beep_st; /蜂鸣器间隔标志sbit DIAN = P05; /小数点uchar *=0; /计数器signed char m; /温度值全局变量uchar n; /温度值全局变量uchar set_st=0; /状态标志signed char shang*ian=38; /上限报警温度,默认值为38signed char *ia*ian=5; /下限报警温度,默认值为 5/uchar code LEDData=0*C0,0*F9,0*A4

12、,0*B0,0*99,0*92,0*82,0*F8,0*80,0*90,0*ff;uchar code LEDData=0*5F,0*44,0*9D,0*D5,0*C6,0*D3,0*DB,0*47,0*DF,0*D7,0*CF,0*DA,0*9B,0*DC,0*9B,0*8B;=/=DS18B20=/*延时子程序*/void Delay_DS18B20(int num) while(num-) ;/*初始化DS18B20*/void Init_DS18B20(void) unsigned char *=0; DQ = 1; /DQ复位 Delay_DS18B20(8); /稍做延时 DQ =

13、 0; /单片机将DQ拉低 Delay_DS18B20(80); /准确延时,大于480us DQ = 1; /拉高总线 Delay_DS18B20(14); * = DQ; /稍做延时后,如果*=0则初始化成功,*=1则初始化失败 Delay_DS18B20(20);/*读一个字节*/unsigned char ReadOneChar(void) unsigned char i=0; unsigned char dat = 0; for (i=8;i0;i-) DQ = 0; / 给脉冲信号 dat=1; DQ = 1; / 给脉冲信号 if(DQ) dat|=0*80; Delay_DS1

14、8B20(4); return(dat);/*写一个字节*/void WriteOneChar(unsigned char dat) unsigned char i=0; for (i=8; i0; i-) DQ = 0; DQ = dat&0*01; Delay_DS18B20(5); DQ = 1; dat=1; /*读取温度*/unsigned int ReadTemperature(void) unsigned char a=0; unsigned char b=0; unsigned int t=0; float tt=0; Init_DS18B20(); WriteOneChar(

15、0*CC); /跳过读序号列号的操作 WriteOneChar(0*44); /启动温度转换 Init_DS18B20(); WriteOneChar(0*CC); /跳过读序号列号的操作 WriteOneChar(0*BE); /读取温度存放器 a=ReadOneChar(); /读低8位 b=ReadOneChar(); /读高8位 t=b; t=8; t=t|a; tt=t*0.0625; t= tt*10+0.5; /放大10倍输出并四舍五入 return(t);/=/*延时子程序*/void Delay(uint num) while( -num );/*初始化定时器0*/void

16、InitTimer(void)TMOD=0*1;TH0=0*3c;TL0=0*b0; /50ms晶振12M/*读取温度*/void check_wendu(void)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(m99)m=99;n=9; /设置温度显示上限 /*显示开机初始化等待画面*/void Disp_init(void) P0 = 0*80; /显示-P2 =

17、 0*7F;Delay(200);P2 = 0*DF;Delay(200); P2 = 0*F7;Delay(200);P2 = 0*FD;Delay(200);P2 = 0*FF; /关闭显示/*显示温度子程序*/void Disp_Temperature(void) /显示温度P0 = 0*98; /显示CP2 = 0*7F;Delay(400);P0=LEDDatan; /显示个位P2 = 0*DF;Delay(400);P0 =LEDDatam%10; /显示十位DIAN = 0; /显示小数点P2 = 0*F7;Delay(400);P0 =LEDDatam/10; /显示百位P2

18、= 0*FD;Delay(400);P2 = 0*ff; /关闭显示/*显示报警温度子程序*/void Disp_alarm(uchar baojing)P0 =0*98; /显示CP2 = 0*7F;Delay(200);P0 =LEDDatabaojing%10; /显示十位P2 = 0*DF;Delay(200);P0 =LEDDatabaojing/10; /显示百位P2 = 0*F7;Delay(200);if(set_st=1)P0 =0*CE;else if(set_st=2)P0 =0*1A; /上限H、下限L标示P2 = 0*FD;Delay(200);P2 = 0*ff;

19、/关闭显示/*报警子程序*/void Alarm()if(*=10)beep_st=beep_st;*=0;if(m=shang*ian&beep_st=1)|(m*ia*ian&beep_st=1)BEEP=0;ALAM=0;elseBEEP=1;ALAM=1;/*主函数*/void main(void) uint z; InitTimer(); /初始化定时器 EA=1; /全局中断开关 TR0=1; ET0=1; /开启定时器0 IT0=1; IT1=1; check_wendu(); check_wendu(); for(z=0;z2)set_st=0; if(set_st=0) E*

20、0=0; /关闭外部中断0 E*1=0; /关闭外部中断1 check_wendu(); Disp_Temperature(); Alarm(); /报警检测 else if(set_st=1) BEEP=1; /关闭蜂鸣器 ALAM=1; E*0=1; /开启外部中断0 E*1=1; /开启外部中断1 if(*=10)shanshuo_st=shanshuo_st;*=0; if(shanshuo_st) Disp_alarm(shang*ian); else if(set_st=2) BEEP=1; /关闭蜂鸣器 ALAM=1; E*0=1; /开启外部中断0 E*1=1; /开启外部中断

21、1 if(*=10)shanshuo_st=shanshuo_st;*=0; if(shanshuo_st) Disp_alarm(*ia*ian); /*定时器0中断效劳程序*/void timer0(void) interrupt 1 TH0=0*3c; TL0=0*b0; *+;/*外部中断0效劳程序*/void int0(void) interrupt 0 E*0=0; /关外部中断0 if(DEC=0&set_st=1) doDisp_alarm(shang*ian); while(DEC=0); shang*ian-; if(shang*ian*ia*ian)shang*ian=*

22、ia*ian; else if(DEC=0&set_st=2) doDisp_alarm(*ia*ian); while(DEC=0); *ia*ian-; if(*ia*ian99)shang*ian=99; else if(ADD=0&set_st=2) doDisp_alarm(*ia*ian); while(ADD=0); *ia*ian+; if(*ia*ianshang*ian)*ia*ian=shang*ian; 结论通过对自己这学期所学的知识的回忆,并充分发挥对所学知识的理解和对课程设计的思考及书面表达能力,最终完成了本设计。这为自己今后进一步深化学习,积累了一定珍贵的经历。本

23、次论文设计,使我加深了对单片机的认识,并且熟悉了单片机系统的设计流程,收获丰硕。技术在不断进步,机械式时钟已经被淘汰,电子时代已经到来。做为新时代的我们,更应该提高自身能力,适应新时代的开展。知识来自实践,多从生活中探寻所需要的。参考文献1 权昌,兴富.单片机原理及应用M.:华南理工大学出版社,2007.841022 庆亮.C语言程序设计实用教程M.北京:机械工业出版社,2005.32583 志忠.数字电子技术M.北京:高等教育出版社,2003.1251324 及力.Protel 99 SE原理图与PCB设计教程M.北京:电子工业出版社,2007.891505 徐江海.单片机实用教程M.北京:机械工业出版社,2006.1281566 宴如.模拟电子技术M.北京:高等教育出版社,2008.601047 汪文,林.单片机原理及应用M.:华中科技大学出版社,2007.36688 康华光.电子技术根底数字局部M.北京:高等教育出版社,2008.2032099 欣电子设计从零开场M.北京:清华大学出版社,2005.28102. z.

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号