1、 目录第一章 系统总体方案选择与说明1第二章 系统结构框图与工作原理22.1设计框架图22.2工作原理2第三章 各单元硬件设计说明33.1 主控芯片80C5133.3 A/D转换集成电路主芯片080853.4 光报警系统63.5 声报警系统73.6 LCD1602显示系统7第四章 软件设计84.1 软件总体设计84.2各子程序设计94.2.1 自检程序94.3.2 八路模数转换存入getdata104.3.3 检测程序10 4.3.4 LCD头文件程序10第五章 调试115.1软件模拟调试115.2硬件接线及调试11第六章 总结13附录A 源程序清单15附录B 源程序清单15附录C 参考文献2
2、0第一章 系统总体方案选择与说明随着社会工业的发展,生活水平的提高,人们的安全防范意识也越来越强,特别是在工业的生产中,安全的需求愿望也更大。传统的安防手段渐渐不能满足人们在工程工业生产安防智能化的需求。于是工业安防产品的更新与改良就在所难免了。本系统就是基于这个社会的大环境,从工业生产的需求出发,设计出来的的一种多路控制的工业现场报警器,以实现智能安全防范报警的目的。 我们通过单片机工业现场报警系统是对工业现场的有害气体进行检测,一旦有害气体的浓度超过容许的气体浓度范围,系统闪光响铃报警。通过传感器对工业现场有害气体浓度的检测从而转换成相应的电压值,又通过A/D模数转换器ADC0808将传感
3、器的电压值的模拟信号转换为数字信号,然后所转换的数字量接到单片机80C51的P0口,最后单片机对接入的数字信号做出反应,判断所测有害气体的浓度是否超标,超标则做出闪光响铃的报警指示,处于安全范围保持正常状态不变。第二章 系统结构框图与工作原理2.1设计框架图 图2-1 设计框图2.2工作原理单片机工业现场报警器主要由气体传感器、信号调理、A/D模数转换器、80C51单片机和闪光响铃报警等几部分构成。八种有害气体分别对应八个滑动变阻器模拟测量,然后接到A/D模数转换器的IN0至IN7端,作为A/D模数转换器的输入。再将A/D模数转换器的输出端D0D7接到80C51单片机的P0口,将闪光响铃报警电
4、路接到80C51单片机的P3.7口,从而构成气体检测报警系统。当气体传感器检测的浓度值大于或等于所设定的气体浓度值,通过A/D模数转换成高电平送到80C51单片机的P0口,从而使P3.7=0,闪光响铃就启动了,从而完成了气体的检测。第三章 各单元硬件设计说明3.1 主控芯片80C51这次课程设计的主要是围绕80C51而设计的,所以有必要先对它做一个简单介绍,80C51引脚图如下图所示: 图3-1 80C51外部管脚图80C51是INTEL公司MCS-51系列单片机中最基本的产品,属于标准的MCS-51的HCMOS产品。它结合了HMOS的高速和高密度技术及CHMOS的低功耗特征,它继承和扩展了M
5、CS-48单片机的体系结构和指令系统。 80C51内置中央处理单元、128字节内部数据存储器RAM、32个双向输入/输出(I/O)口、2个16位定时/计数器和5个两级中断结构,一个全双工串行通信口,片内时钟振荡电路。此外,80C51还可工作于低功耗模式,可通过两种软件选择空闲和掉电模式。掉电模式下,保存RAM数据,时钟振荡停止,同时停止芯片内其它功能。3.2 电平输入电路设计因为要输入电平,也就是要模拟传感器输入的气体浓度检测信号,我们要用电平的变化来模拟,电平的输入我们通过ADC0808输入端后,输出端接AT89C51单片机的P1口的8个端口,这里我们只需要8个可调电阻就可以实现,具体电路图
6、如下图:图3-2 滑动变阻器模拟传感器的输入3.3 A/D转换集成电路主芯片0808A/D转换由集成电路0808完成。0808具有8路模拟输入端口,地址线(23-25脚)可决定对哪一路模拟输入作A/D转换。0808的管脚图如下: 图3-3 ADC0808外部管脚 A/D转换电路采用了常用的8位8通道数模转换专用芯片ADC0809,电路如图5所示。气体传感器的输出分别接到ADC0809的IN0至IN7。ADC0809的通道选择地址A,B,C分别由89C51的P0.0P0.2经地址锁存器74LS373输出提供。当P2.7=0时,与写信号WR共同选通ADC0809。图中ALE信号与ST信号连在一起,
7、在WR信号的前沿写入地址信号,在其后沿启动转换。图中ADC0809的转换结束状态信号EOC接到89C51的INT1引脚,当A/D转换完成后,EOC变为高电平,表示转换结束,产生中断。在中断服务程序中,将转换好的数据送到指定的存储单元。3.4 光报警系统光报警电路在单片机P3口的控制下,通过74LS138译码芯片,然后根据不同情况发出不同的光报警信号。8个灯分别用共阳极的二级管接通,只要有低电平信号指示灯就会发光。某一种气体超标时,其对应的指示灯就会发光,下图为第二种气体的报警。 图3-4 光报警电路图3.5 声报警系统 我们把蜂鸣器设计成通过P2.7输出,通过P2.7来输出报警声音,图示为PN
8、P型三极管,当基极输入低电平时,集电极和发射极导通,蜂鸣器发出声响,向工作人员发出报警。图3-5 声报警电路3.6 LCD1602显示系统 我们把 LCD显示器的8个输入端接AT89C51的P1口8个输入端,即可实时显示相应的气体浓度,第2种气体NO超标时电路图。 图3-6 LCD显示电路图 第四章 软件设计4.1 软件总体设计系统复位后,首先要进行初始化,包括对各个控制用寄存器的初始化、设置中断服务程序的入口地址、设置堆栈等。流程图如图4-1所示: 开始系统初始化气体浓度取样数模转换器信号处理气体浓度超标?报警装置报警返回YN4.2各子程序设计4.2.1 自检程序我们通过C语言编写自检程序,
9、单片机通电,通过单片机P3口控制8个LED移位点亮,并且延时800,然后P3.7口控制蜂鸣器延时发出声响,以检测LED和蜂鸣器是否能正常工作,以下为自检程序:void test()char i;for(i=0;i8;i+) P3=tdi;delay(800);P37=1;for(i=0;i3;i+)alarm();delay(1500);4.3.2 八路模数转换存入getdata我们通过滑动变阻输入不同的电平,然后通过ADC0808把信号输给单片机的P1口,我们通过C语言编写程序把信号存入getdata。void adc() char i,m=1;for(i=0;i8;i+) P2=tdi|0
10、x0f;ST=0;ST=1;ST=0;delay(10); while(EOC=0);getdatam=P0;delay(10);m+; 4.3.3 检测程序我们通过C语言编程中IF语句,判断P0口输入 的电平信号是否超过预先设定的值,如果超过则使FLAG=0,从而实现报警。void check()char i;for(i=1;iwarni-1)flag=1;number=i; /记录超过指标的通道;break;elseflag=0;4.3.4 LCD1602头文件程序我们利用单片机C语言编程的可移植性,通过#include这条语句可以调用LCD1602的头文件,LCD1602液晶模块的头文件
11、,在我们使用液晶模块时 必须加入头文件才可以,由于篇幅有限,可自行网上查阅资料。第五章 调试单片机应用系统的调试包括硬件调试和软件调试。由于硬件和软件是交织在一起的,硬件调试和软件调试并不能完全分开,所以要将两者结合起来进行调试和调整。许多硬件错误是在软件调试过程中被发现和纠正的。一般方法是先排除明显的硬件故障,再进行软、硬件综合调试。下面分别介绍我这次设计的意见和软件调试过程:5.1软件模拟调试 一、在Proteus软件中绘制出硬件电路图。根据系统设计要求,选择元器件,设计出硬件电路图,如附录B所示。二、编写系统程序。根据系统要求,画流程图。在WAVE中编程,过程中先将各模块搞好,分别调试各
12、模块,调试好后,编写主程序,将各系统结合,使成为系统软件。各模块调试后,在调试主程序,看是否能实现系统功能。 三、硬件和软件电路的联合模拟调试在Proteus软件中进行。先将编译好的HEX文件加载到80C51中,在运行硬件电路,不断调试,若没达到要求,进行相应修改,直到符合要求。5.2硬件接线及调试虽然软件模拟调试是非常重要的,但是还是纸上谈兵啊,真正要到了调试的时候,这又是一个比设计还头痛的事,我们说它令人头痛是有原因的,按理是通的,但调试不一定可以出来,甚至于设计是错误的,调试是设计的试金石啊!单片机系统进行软件盒硬件调试成功后最后一步是进行硬件的连接和物制作,我们的硬件调试是在试验台上进
13、行的,虽然与设计的电路不太相同,不过可以适当修改源程序,以适应实验台的要求。一 根据实验台情况和设计要求连接电路图。二 在连接的电路上,进行模块测试,就是用简单的程序进行调试以确定电路连接正确。三 将修改后的程序下载到单片机里,可以用伟福仿真系统,进行单步和断点调试。四 将运行结果和实验现象与预定值进行比较,再适当修改程序以达到要求。第六章 总结两周的单片机课程设计对我收益匪浅,让我系统性地认识和全面地掌握了单片机技术,让我将平常学的汇编语言和编程方法学以致用,使我的汇编能力有了很大提高和进步,让我对单片机外围接口设备有了深入细致的了解。第一周,我们寻找有关的资料和课题小组成员间一起交流看法和
14、讨论设计方案,进行设计的总体规划,理清课程设计思路。但是将这些具体的方案落实到每一个设计环节和步骤中,难免会出现意想不到错误,这就需要我们在进行设计的过程中利用所掌握的知识认真排查错误原因,多方面的思考问题的关键不断地改正自己的设计不足之处和错误。此外,对硬件电路的工作原理和单片机知识的掌握是进行下一步的软件设计的关键。比如要想实现数码管的动态显示就需要了解数码管是采用共阴接法还是共阳的接法,这个对设置数码管显示代码是很重要的。其次,要能够实现动态显示就需要了解单片机上的I/O口接线端。这次课程设计能顺利的完成任务很大程度上是因为在软件设计之前对硬件的设计及工作原理有了细致的了解。第二周,进入
15、了软件设计方案和具体的编程和调试运行阶段。在这个阶段中,对系统的需求分析和如何采用模块化设计思想是设计方案主要解决的问题。在这一周遇到最大的问题就是用汇编语言去编写程序会变得冗长复杂,我想,如果用C语言的来编写应该能很好的解决问题。最后,现在经过两周后,经过实践的操作和调试,对中断和查询等都有了更深的了解。通过设计,巩固所学课程,使所学知识牢固掌握并灵活运用。在整个课程设计中,非常感谢我的指导老师寻大勇老师给予我很多指导性的意见,在软件设计和仿真过程中,也帮助我解决很多实际问题。本次课程设计必将成为自己以后学习道路上的宝贵的实践经验。附件 A原理图附录B 源程序清单#include#inclu
16、de #define uchar unsigned char #define uint unsigned intunsigned char dispbuf5;unsigned char getdata8; /存储八路模数转换后的结果unsigned int temp;unsigned int temp1;unsigned char count;unsigned char d=0;char cancel=0;uchar number;uint code warn=250,125,125,125,125,125,125,125;/设定各个有害气体的指标uchar code td=0x04,0x14
17、,0x24,0x34,0x44,0x54,0x64,0x74;/通道先择数组uchar code *gas=CO ,NO ,NO2 ,SO2 ,SO3 ,CH4 ,C6H6 ,HCHO ; /有害气体名称uchar code ok=Everything is OK;sbit ST=P30;sbit OE=P21;sbit EOC=P23;sbit CLK=P33;sbit P32=P32;/按钮sbit P34=P34; / 4 5 6 ls138地址sbit P35=P35;sbit P36=P36;sbit P37=P37; /控制使能端sbit BEEP=P27;char flag=0;
18、 /检测到指标高于设定值是flag=1void delay(uint i) unsigned char j = 0; for(i;i0;i-) for( j=0;j250;j+); void TimeInitial() TMOD=0x10; TH1=(65536-200)/256; TL1=(65536-200)%256;/定时200us EA=1; ET1=1; TR1=1;void adc() char i,m=1; for(i=0;i0;i-)BEEP=BEEP;delay(2);BEEP=BEEP;delay(2);void test()char i;for(i=0;i8;i+) P3
19、=tdi; delay(800);P37=1;for(i=0;i3;i+)alarm();delay(1500);void check()char i;for(i=1;iwarni-1)flag=1;number=i; /记录超过指标的通道;break;elseflag=0; void display()temp=100*getdatanumber/51;dispbuf4=%;dispbuf3=temp%10+0x30;/取个位dispbuf2=temp/10%10+0x30;/取十位dispbuf1=.;dispbuf0=temp/100%10+0x30;/取百位write_str(0x80
20、,gasnumber-1);/显示write_str(0x80+0x0b,dispbuf);void main()test();/自检/P3=0xff; TimeInitial();/定时器初始化; LCD_Init(); /1602初始化EA=1;EX0=1;while(1) adc();/启动AD转换check();/检查是否超标cancel=0; while(flag=1) P32=1; display();/ 显示超过指标的信息 P3=tdnumber-1; P37=0; if(cancel=0)/判断停止报警按键是否按下alarm(); /报警音delay(600); P3=0x0f
21、|tdnumber-1; adc(); /启动AD转换 check(); /检查是否超标 P37=1;write_str(0x80,ok); cancel=0; void inter(void) interrupt 0 using 1 cancel=1; /停止报警键按下,cancel=1;void t1(void) interrupt 3 using 2 TH1=(65536-200)/256; TL1=(65536-200)%256; CLK=CLK; 附录C 参考文献1教材单片微型计算机技术 刘国荣 编 机械工业出版社2单片微型计算机原理、应用及接口技术 张迎新 编 国防工业出版社3单片
22、机实用系统设计技术 房小翠 编 国防工业出版社4单片机应用系统设计 何立民 编 北航出版社5单片机原理及接口技术 曹琳琳编 国防科技大学出版社9 谢宜仁.单片机实用技术问答M.人民邮电出版社 , 200220电气信息学院课程设计评分表项 目评 价设计方案的合理性与创造性硬件制作或软件编程完成情况*硬件制作测试或软件调试结果*设计说明书质量设计图纸质量答辩汇报的条理性和独特见解答辩中对所提问题的回答情况完成任务情况独立工作能力组织纪律性(出勤率)综合评分 指导教师签名:_ 日 期:_ 注:表中标*号项目是硬件制作或软件编程类课题必填内容;此表装订在课程设计说明书的最后一页。课程设计说明书装订顺序:封面、任务书、目录、正文、评分表、附件(非16K大小的图纸及程序清单)。