基于单片机课程设计.doc
《基于单片机课程设计.doc》由会员分享,可在线阅读,更多相关《基于单片机课程设计.doc(83页珍藏版)》请在咨信网上搜索。
基于单片机课程设计(完整资料) (可以直接使用,可编辑 优秀版资料,欢迎下载) 基于51单片机课程设计报告 院 系:电子通信工程 团 组:电子设计大赛1组 姓 名: 指导老师: 2012/8/15 目录 一、摘要……………………………… 3 二、系统方案的设计………………… 3 三、硬件资源………………………… 5 四、 硬件总体电路搭建…………… 13 五、程序流程图…………………………14 六、设计感想…………………………… 14 七、参考文献……………………………16 附录………………………………………17 附录 1 程序代码………………………………17 一、摘要 本设计以STC89C51单片机为核心的温度控制系统的工作原理和设计方法。温度信号由温度芯片DS18B20采集,并以数字信号的方式传送给单片机。文中介绍了该控制系统的硬件部分,包括:温度检测电路、温度控制电路。单片机通过对信号进行相应处理,从而实现温度控制的目的。文中还着重介绍了软件设计部分,在这里采用模块化结构,主要模块有:数码管显示程序、键盘扫描及按键处理程序、温度信号处理程序、led控制程序、超温报警程序。 关键词:STC89C51单片机 DS18B20温度芯片 温度控制 ,LED报警提示. 二、系统方案的设计 1、设计要求 基本功能: 不加热时实时显示时间,并可手动设置时间; 设定加热水温功能。人工设定热水器烧水的温度,范围在20~70度之间,打开开关后,根据设定温度与水温确定是否加热,及何时停止加热,可实时显示温度; 设定加热时间功能。限定烧水时间,加热时间内超过温度上限或低于温度下限报警,并可实时显示温度。 2、系统设计的框架 本课题设计的是一种以STC89C51单片机为主控制单元,以DS18B20为温度传感器的温度控制系统。该控制系统可以实时存储相关的温度数据并记录当前的时间.其主要包括:电源模块、温度测量及调理电路、键盘、数码管显示、指示灯、报警、继电器及单片机最小系统。 图1 系统设计框架 3 工作原理 温度传感器 DS18B20 从设备环境的不同位置采集温度,单片机STC8951 获 取采集的温度值,经处理后得到当前环境中一个比较稳定的温度值,再根据当前设定的温度上下限值,通过加热和降温对当前温度进行调整。当采集的温度经处理后超过设定温度的上限时,单片机通过三极管驱动继电器开启降温设备 (压缩制冷器) ,当采集的温度经处理后低于设定温度的下时 , 单片机通过三极管驱动继电器开启升温设备 (加热器) ,这里采用通过LED1和LED2取代!!! 当由于环境温度变化太剧烈或由于加热或降温设备出现故障,或者温度传感头出现故障导致在一段时间内不能将环境温度调整到规定的温度限内的时候,单片机通过三极管驱动扬声器发出警笛声,这里采用HLLED提示。 加热器 继电器2 三、硬件资源 1、器件选择: 1。51单片机一块STC89c51 STC8951 是一个低功耗,高性能CMOS 8位单片机,片内含8k Bytes ISP(In—system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS—51指令系统及STC8951引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的STC8951可为许多嵌入式控制应用系统提供高性价比的解决方案。STC8951具有如下特点:40个引脚,8k Bytes Flash片内程序存储器,128 bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信,片内时钟振荡器。 此外,STC8951设计和配置了振荡频率可为0Hz并可通过软件设置省电模式。空闲模式下,CPU暂停工作,而RAM定时计数器,串行口,外中断系统可继续工作,掉电模式冻结振荡器而保存RAM的数据,停止芯片其它功能直至外中断激活或硬件复位.同时该芯片还具有PDIP、TQFP和PLCC等三种封装形式,以适应不同产品的需求. 由于系统控制方案简单 ,数据量也不大 ,考虑到电路的简单和成本等因素 ,因此在本设计中选用 STC8951单片机作为主控芯片。主控模块采用单片机最小系统是由于STC8951芯片内含有8 kB的 E2PROM ,无需外扩存储器 ,电路简单可靠 ,其时钟频率为 0~24 MHz ,并且价格低廉 ,批量价在 10元以内。 其单片机的外围引脚有40个,分别是:第20脚和40脚分别是电源,即GND和Vcc;第9脚是复位脚RST;第18脚是时钟XTAL2脚,片内振荡电路的输出端;第19脚是时钟XTAL1脚,片内振荡电路的输入端;第29脚:~PSEN脚,当访问外部程序存储器时,此引脚输出负脉冲选通信号,PC的16位地址数据将出现在P0和P2口上;第30脚:ALE/~PROG,当访问外部数据存储器时,ALE(地址锁存)的输出用于锁存地址的低字节;第31脚:~EA/Vpp为程序存储器内外部选通信号;P0^0-P0^7.P1^0—P1^7。P2^0-P2^7.P3^0-P3^7.这32个引脚为数据的输出及输入引脚,即I/0口;单片机图如下: 2、8位7段共阴数码管一个 7段数码管一般由8个发光二极管组成,其中由7个细长的发光二极管组成数字显示,另外一个圆形的发光二极管显示小数点。 当发光二极管导通时,相应的一个点或一个笔画发光。控制相应的二极管导通,就能显示出各种字符,尽管显示的字符形状有些失真,能显示的数符数量也有限,但其控制简单,使有也方便。发光二极管的阳极连在一起的称为共阳极数码管,阴极连在一起的称为共阴极数码管,如图4.9所示. 共阴数码管 共阴数码管的编码为:0x3F,0x0C,0x76,0x5E,0x4D,0x5B,0x7B,0x0E,0x7F,0x5F,0x6F,0x79,0x33,0x7C,0x73,0x63 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ,A , B, C, D, E, F 3、温度显示DS18B20一个 DS18B20采用3脚TO—92封装或8脚的SOIC封装,如图1所示。各引脚的功能:GND为电压地;DQ为单数据总线;V为电源电压;NC为空引脚. 图1DS18B20引脚图 DS18B20的DQ单数据总线与单片机P3.7连接,GND电压地、V电源电压分别和电压地和5伏直流电源连接.本文设计的系统主机只对一个DS18B20进行操作,因此不需要读取ROM编码以及匹配ROM编码,只要跳过ROM命令,就可以进行如下温度转换和读取操作。 (1)CCH—跳过ROM,直接向DS18B20发送温度变换命令. (2)44H—读暂存器。读内部RAM中9字节的温度数据. (3)BEH—写暂存器。发出向内部RAM的第2、3字节写上、下限温度数据命令,紧跟该命令之后,再传送两字节数据。 DS18B20在出厂时默认配置为12位,其中最高位为符号位,即温度值共11位,单片机在读取数据时,一次会读两字节共16位,读完后将低11位的二进制数转换为十进制后再乘以0.0625变为所测的温度值。另外,还需要判断温度的正负。前5个数字为符号位,这5位同时变化,我们只需判断11位就可以了。前5位为1时,读取的温度为负值,且测到的数值需要取反再加一再乘以0。0625才可以得到实际的温度值。前5位为0时,读取的温度为正值,只要将测得的数值乘以0.0625即可得到实际温度值. 由于提前给DS18B20赋了上限、下限值,所以当温度超过上限或者不足下限时,会伴有LED灯闪烁和蜂鸣器响作为警报. 4、按键 在按下键时,实际情况下,都会出现抖动。其直观图如下: 按键消抖一般采用硬件和软件消抖两种方法。硬件消抖是利用电路滤波的原理实现,软件消抖是通过按键延时来实现。在微机系统中一般都采用软件延时的消抖方法,本文用的是软件延时的消抖方法。 5、74HC573锁存器 高性能硅门 CMOS 器件 SL74HC573 跟 LS/AL573 的管脚一样。器件的输入是和标准 CMOS 输出兼容的;加上拉电阻,他们能和 LS/ALSTTL 输出兼容。 当锁存使能端LE为高时,这些器件的锁存对于数据是透明的(也就是说输出同步)相当于图上的Dx-Qx相通,I/0口可以进行数据交换。当锁存使能变低时,符合建立时间和保持时间的数据会被锁存。在这里我们是将LE接高电平,把锁存器当作驱动器,驱动数码管的显示; 6、晶振 其晶振的运用,在这地方我们用的是12MHz,主要用在单片机的最小系统中,参照单片机最小系统图示; 7. 电阻.电容。导线等 (一)单片机最小系统电路 在课题设计的温度控制系统设计中,控制核心是STC89C52单片机,该单片机为51系列增强型8位单片机,它有32个I/O口,片内含4K FLASH工艺的程序存储器,便于用电的方式瞬间擦除和改写,而且价格便宜,其外部晶振为12MHz,一个指令周期为1μS。使用该单片机完全可以完成设计任务,其最小系统主要包括:复位电路、震荡电路以及存储器选择模式(EA脚的高低电平选择),电路如下图2所示: 图2 单片机最小系统 (二)温度传感器电路 采用一线制数字温度传感器DS18B20来作为本课题的温度传感器。传感器输出信号进4.7K的上拉电阻直接接到单片机的P1.0引脚上。 DS18B20温度传感器是美国达拉斯(DALLAS)半导体公司推出的应用单总线技术的数字温度传感器。该器件将半导体温敏器件、A/D转换器、存储器等做在一个很小的集成电路芯片上.本设计中温度传感器之所以选择单线数字器件DS18B20,是在经过多方面比较和考虑后决定的,主要有以下几方面的原因: (1)系统的特性:测温范围为20℃~70℃ ,测温精度为士0.5℃;温度转换精度9~12位可变,能够直接将温度转换值以16位二进制数码的方式串行输出;12位精度转换的最大时间为750ms;可以通过数据线供电,具有超低功耗工作方式。 (2)系统成本:由于计算机技术和微电子技术的发展,新型大规模集成电路功能越来越强大,体积越来越小,而价格也越来越低。一支DS18B20的体积与普通三极管相差无几,价格只有十元人民币左右。 (3)系统复杂度:由于DS18B20是单总线器件,微处理器与其接口时仅需占用1个I/O端口且一条总线上可以挂接几十个DS18B20,测温时无需任何外部元件,因此,与模拟传感器相比,可以大大减少接线的数量,降低系统的复杂度,减少工程的施工量. (4)系统的调试和维护:由于引线的减少,使得系统接口大为简化,给系统的调试带来方便。同时因为DS18B20是全数字元器件,故障率很低,抗干扰性强,因此,减少了系统的日常维护工作。 DS18B20温度传感器只有三根外引线:单线数据传输总线端口DQ ,外供电源线VDD,共用地线GND。DS18B20有两种供电方式:一种为数据线供电方式,此时VDD接地,它是通过内部电容在空闲时从数据线获取能量,来完成温度转换,相应的完成温度转换的时间较长。这种情况下,用单片机的一个I/O口来完成对DS18B20总线的上拉.另一种是外部供电方式(VDD接+5V),相应的完成温度测量的时间较短. 在本设计中采用外部供电方式实现DS18B20传感器与单片机的连接,其接口电路如图4所示。 图4 温度传感器接口 (三)按键接口电路 本课题设计采用的键盘模块,其接口原理图如下图8所示: 图8 键盘模块电路 四、 硬件总体电路搭建 五、程序流程图 六、设计感想 首先通过此次课程设计,让我们对所学的计算机控制技术理论知识更加熟悉了解,对理论学习时没有掌握牢固的一些知识以及一些在学习中存在的漏洞进行学习并加以弥补,也让我们明白学习一门课程就要认真地对待,掌握牢固,并要在实践中加以运用。只有能运用自如的知识才是属于自己的东西。 比较熟练,在学习此软件过程中其次,此次课程设计我们尝试用proteus软件进行仿真设计。对于proteus,我们之前对它的一些应用比较熟悉,所以此次运用起来通过查找图书馆的资料以及在网上的学习让我们意外收获了一些其他的知识,拓展了知识面,也丰富了自己的阅历。 第三,通过这次课程设计,我们学会了单片机完成某一项功能,需要从两个方面入手:一是软件的实现即汇编语言程序的编写,二是硬件电路的实现。两方面比较,程序编写时相对较难的一部分。我们团组认为这是一个建模的过程,即将实际的控制问题转换成我们所熟悉的数学模型,这是一个很抽象的问题,有时真的是难以想象。所以我们觉得这种困难最好的解决办法就是通过平时的积累,多多学习。 此次设计培养了我们对于计算机控制设计的一些兴趣,当看着自己设计的东西,通过仿真可以出现自己期望的结果时,那种愉悦的心情是前所未有的,同时当出现问题,通过自己查找资料检查电路之后排除问题的过程也锻炼了我们对于学习的一种深入和坚持,锻炼了我们独立思考的能力和最初的创新意识,让我们真正体会到学习的乐趣。 第五,我们再次巩固了一些以前的东西,仿真软件的运用,课程设计的书写,计算机的一些应用软件的应用,以及对word的了解也更深入了. 最后一点,也使最深刻的体会,就是在设计过程中,基本上用到的都是我们学过的一些原理,所以学以致用在这次设计中可谓体现的淋漓尽致,要把所学的知识联系起来综合运用。这些都将成为我们以后的工作学习的铺路石,使我们在大学里收获的最实用的东西,而不是仅仅只是纸上谈兵,而是通过我们亲自动手来完成的经验对每个人来说都是一笔财富,所以这次《单片机控制技术》课程设计对我们来说绝对是一次难得的锻炼的机会。 七、参考文献 [1] 马彪 《单片机应用技术》同济大学出版社 [2] 郭天祥《 51单片机C语言教程》 电子工业出版社 [3] 陈海宴 《51单片机原理及应用》北京航空航天大学出版社 附录……………………………………… 附录 1 程序代码……………………………… 1:main主函数 #include"ds18b。h" #include〈reg52.h> sbit add=P3^0; //ﻩ 加 sbit cut=P3^1;ﻩ//ﻩ 减 sbit set=P3^2;ﻩ//ﻩ设置 sbit p00=P0^0; sbit p01=P0^1; sbit p02=P0^2; sbit p03=P0^3;ﻩ //ﻩ //位选控制 声明 sbit p04=P0^4; sbit p05=P0^5; sbit p06=P0^6; sbit p07=P0^7; sbit Lled=P2^0; //低于温度下限值 此灯点亮 sbit Hled=P2^1; //高于温度上限值 此灯点亮 sbit LHled=P2^2; // 达到加热预设时间此灯点亮 unsigned char tab4[4]={0};ﻩ //ﻩ 定义一个tab4号数组用来存放温度的上限值与下限值 unsigned char tab8[9]={0};ﻩﻩ // unsigned char tab9[6]={0}; // 定义一个tab9号数组用来存放用户的给定的加热时间 unsigned char code tab7[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdF,0xbF,0x7F}; //位选控制 查表的方法控制 unsigned char code tab[]={ﻩ0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6};//共阳数码管数字码 uchar tab1[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0}; //定义一个tab1号数组用来存放温度转换值 unsigned char shi=10,fen=35,miao,L; //你懂得 不用多讲 unsigned char LED;ﻩ //定义一个char变量用来控制数码管上的秒的闪烁 unsigned char tt,i,flag=0; unsigned int wen; //定义一个无符号整形变量用来存放温度返回值 unsigned char TH,TL;ﻩ //存放用户的设定的温度上下限值 void delay (unsigned int Z)//ﻩ 延时函数 { unsigned int x,y; for(x=Z;x〉0;x-—) for(y=110;y〉0;y--); ﻩ } void init ()ﻩ//初始化 ﻩ { P2=0xff; P3=0xff; TMOD=0x11; //开启定时器 0,1 TH1=(65536-5000)/256;//5Ms TL1=(65536—5000)%256; EA=1; ET1=1; //你懂得不用多讲 TR1=1; TH0=(65536—50000)/256;//50Ms TL0=(65536-50000)%256; ET0=1; //你懂得不用多讲 TR0=1; ﻩ } void main () { init (); //初始化I/O端口即定时器0.1; ﻩ while(1) { if((flag==0)||(flag==1)) //当第一次按下设置键 进入手动设置当前时间 ﻩﻩ { ﻩ ﻩtab8[4]=fen/10; tab8[5]=fen%10; tab8[6]=shi/10;tab8[7]=shi%10; ﻩﻩﻩ wen=dispaly(); ﻩ ﻩ tab1[2]=wen/100; ﻩtab1[1]=wen%100/10; //你懂得不用多讲 ﻩ tab1[0]=wen%10; ﻩﻩﻩﻩ tab8[8]=tab1[2]*10+tab1[1]; ﻩﻩ for(L=0;L<50;L++) ﻩ ﻩ ﻩfor(i=0;i<8;i++) ﻩ ﻩﻩ{ ﻩﻩ P1=0; P1=tab[tab1[1]];ﻩp00=0;p01=1;p02=1;p03=1;p04=1;p05=1;p06=1;p07=1;delay_ms(2); ﻩ ﻩ P1=tab[tab1[2]]; ﻩp00=1;p01=0;p02=1;p03=1;p04=1;p05=1;p06=1;p07=1; delay_ms(2); ﻩ if(LED>=20) { P1=0x02; ﻩp00=1;p01=1;p02=1;p03=1;p04=1;p05=0;p06=1;p07=1; delay_ms(2); } ﻩﻩ ﻩﻩ if(LED>=40) { LED=0; P1=0x02; ﻩp00=1;p01=1;p02=1;p03=1;p04=1;p05=1;p06=1;p07=1; delay_ms(2); } ﻩﻩﻩ ﻩ if(flag==1) { P1=0x02; ﻩp00=1;p01=1;p02=1;p03=1;p04=1;p05=0;p06=1;p07=1; delay_ms(2); } ﻩ ﻩﻩ P1=tab[tab8[6]];ﻩp00=1;p01=1;p02=1;p03=1;p04=1;p05=1;p06=1;p07=0; delay_ms(2); ﻩ ﻩﻩ P1=tab[tab8[7]];ﻩp00=1;p01=1;p02=1;p03=1;p04=1;p05=1;p06=0;p07=1; delay_ms(2); ﻩ ﻩﻩﻩ P1=0x9c; p00=1;p01=1;p02=0;p03=1;p04=1;p05=1;p06=1;p07=1; delay_ms(2); ﻩ ﻩ ﻩ P1=tab[tab8[4]]; p00=1;p01=1;p02=1;p03=1;p04=0;p05=1;p06=1;p07=1; delay_ms(2); ﻩ ﻩ P1=tab[tab8[5]];ﻩp00=1;p01=1;p02=1;p03=0;p04=1;p05=1;p06=1;p07=1; delay_ms(2); } ﻩ ﻩ } ﻩ ﻩ ﻩﻩ if((flag==2)|(flag==3))//当第二或者第三次按下设置键 进入温度上下限门槛设置 ﻩ ﻩ {ﻩ ﻩ ﻩ tab4[2]=tab8[2]/100; tab4[1]=tab8[2]%100/10; tab4[0]=tab8[2]%10; //Hﻩtab[2] ﻩ ﻩ tab4[6]=tab8[3]/100; tab4[5]=tab8[3]%100/10; tab4[4]=tab8[3]%10;ﻩ//Lﻩ tab[3] ﻩﻩ for(i=0;i<8;i++) ﻩﻩ ﻩ ﻩ { ﻩ ﻩ //动态扫描 ﻩﻩ ﻩP1=tab[tab4[i]]; if(i==3) P1=0x6e ; if(i==7) P1=0x1c ; ﻩ ﻩﻩ ﻩP0=tab7[i]; ﻩ ﻩ delay(5); ﻩ ﻩ } ﻩﻩ ﻩ } ﻩﻩ ﻩ if(flag==4)//当第四次按下设置键 进入用户给定加热时间设置 ﻩ {ﻩ ﻩﻩﻩﻩﻩ tab9[1]=TL%10;tab9[2]=TL/10;tab9[4]=TH%10;tab9[5]=TH/10; ﻩ ﻩ ﻩﻩ for(i=0;i<8;i++) ﻩﻩ ﻩ ﻩ { ﻩ ﻩ ﻩ ﻩP1=tab[tab9[i]]; if((i==3)||(i==0)) P1=0x02; if((i==7)||(i==6)) P1=0x02; ﻩﻩ P0=tab7[i]; ﻩ ﻩ delay(5); ﻩ ﻩ } ﻩﻩ } ﻩ } } void timer1() interrupt 3 { TH0=(65536—5000)/256;//5Ms TL0=(65536—5000)%256; ﻩﻩﻩﻩ ﻩ ﻩ ﻩ ﻩ ﻩ ﻩ ﻩ //开辟一个每隔5Ms扫描按键 检测是否邮件按下 if(add==0) { delay(10); if(add==0){ while(!add) ; if(flag==4)TL++;if(flag==1) {fen++; if(fen==60) fen=0;}if (flag==2)tab8[2]++;if(flag==3)tab8[3]++; } ﻩﻩ} //你懂得不用多讲 if(cut==0) { delay(10); if(cut==0){ while(!cut) ; if(flag==4)TH++;if(flag==1) {shi++; if(shi==24) shi=0;}if (flag==2)tab8[2]-—; if(flag==3)tab8[3]--; } ﻩ }ﻩ ﻩ ﻩ //你懂得不用多讲 if(set==0) { delay(10); if(set==0){ while(!set) ;flag++;if(flag==5)flag=0;ﻩ} ﻩ } ﻩ if(flag==1) { TR0=0; } if(flag==3) { TR0=1; } //当第一次按下设置键关闭定时器0, if(tab8[8]<=tab8[3]) Lled=0; else Lled =1; ﻩ//判断当前温度是否低于预设温度ﻩ 若是开启LED提示 if(tab8[8]〉=tab8[2])Hled=0; else Hled =1; ////你懂得不用多讲 if(TL〉=60) TL=0; if(TH>=24) TH=0; if((fen>=TL)&&(shi>=TH)) LHled=0; else LHled=1; //判断用户预设加热时间是否达到 若是 开启LED } void timer0() interrupt 1 { TH1=(65536-50000)/256; TL1=(65536—50000)%256; //你懂得不用多讲ﻩ ﻩ ﻩﻩ ﻩﻩ ﻩ ﻩ ﻩﻩ ﻩﻩﻩﻩ tt++; LED++; if(tt〉=18) {tt=0;miao++; } if(miao==60) {fen++; miao=0;ﻩ} ﻩ if(fen==60){shi++; fen=0;} if(shi==24) shi=0; } 2:ds18B20.h库文件 #include”ds18b。h” #include<reg52.h〉 #include<intrins。h〉 #define uchar unsigned char #define uint unsigned int sbit DQ=P3^7; //// 定义p37用来操控DS18B20 void delay_us(uint a) //微妙机延时子函数 { do { _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); }while(——a); } void delay_ms(uint a) //毫秒级延时子函数 { uchar x,y; for(x=a;x>0;x——) for(y=110;y>0;y—-); } uchar ds18b20_reset()//复位DS18B20 { uchar a; DQ=0; delay_us(60); DQ=1; delay_us(9); if(DQ) a=1; delay_ms(2); return a; } void ds18b20_write(uchar a) //写 { uchar i; for(i=0;i〈8;i++) { DQ=0; if(a&0x01) DQ=1; else DQ=0; delay_us(5); DQ=1;//至高下一位数据准备 a>〉=1; } } uchar ds18b20_read() //读 { uchar j,b; for(j=0;j〈8;j++) { DQ=0; b>〉=1; DQ=1; if(DQ) b=b|0x80; delay_us(2); DQ=1;ﻩ//至高为下一位数据 准备 } return b; } unsigned int dispaly()ﻩ ///启动温度转化 并返回温度转换至 { uint H,L; ds18b20_reset(); ds18b20_write(0xcc); ds18b20_write(0x44); delay_ms(20); ds18b20_reset(); ds18b20_write(0xcc); ds18b20_write(0xbe); L= ds18b20_read(); H= ds18b20_read(); H=H*256+L; H=H*0.625; return H; }ﻩ 3:18B20头文件 #ifndef __DS18B20_H__ #define __DS18B20_H__ #define uchar unsigned char #define uint unsigned int uint output(void); void delay_ms(uint a); #endif 摘要 近年来,随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新.在实时检测和自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用,正在不断的应用到实际生活中,并且根据具体硬件结构软硬件结合,加以完善。 十字路口车辆穿梭,行人熙攘,车行车道,人行人道,有条不紊.那么靠什么来实现这井然秩序呢?靠的就是交通信号灯的自动指挥系统。交通信号灯控制方式很多。本系统采用MCS-51系列单片机STC89C51为中心器件来设计交通灯控制器,实现了通过信号灯对路面状况的智能控制。从一定程度上解决了交通路口堵塞、车辆停车等待时间不合理、急车强通等问题。系统具有结构简单、可靠性高、成本低、实时性好、安装维护方便等优点,有广泛的应用前景。 关键词:交通灯 单片机 数码管 一 .总体设计思路 1.1设计目的及思路 设计目的 了解交通灯管理的基本工作原理,熟练掌握STC89C51的工作原理和应用编程,熟悉STC89C51单片机并行接口的各种工作方式和应用,并了解计数器/定时器的工作方式和应用编程外部中断的方法,掌握多位LED显示问题的解决。 设计思路 (1)分析目前交通路口的基本控制技术,提出自己的交通控制的初步方案. (2)确定系统交通控制的总体设计,增加了倒计时显示提示。 (3)进行显示电路. (4)进行软件系统的设计。 1.2 实际交通灯显示时序及状态转换的理论分析 图1所示为红绿灯转换的状态图。 S2 S1 S4 S3 图1 红绿灯状态转换图 状态 S1 S2 S3 S4 时间 30s 5s 30s 5s 东西道 红灯亮 红灯亮 绿灯亮 黄灯亮 南北道 绿灯亮 黄灯亮 红灯亮 红灯亮 表1 十字路口指示灯燃亮方案 说明: (1)当东西方向为红灯,此道车辆禁止通行,东西道行人可通过;南北道为绿灯,此道车辆通过,行人禁止通行。时间为60秒。 (2)黄灯闪烁5秒,警示车辆和行人红、绿灯的状态即将切换. (3)当东西方向为绿灯,此道车辆通行;南北方向为红灯,南北道车辆禁止通过,行人通行。 时间为80秒. 东西方向车流大 通行时间长。 (4)这样如上表的时间和红、绿、黄出现的顺序依次出现这样行人和车辆就能安全畅通的通行。 (5)此表可根据车流量动态设定红绿灯初始值。 共四种状态,分别设定为S1、S2、S3、S4,交通灯以这四种状态为一个周期,循环执行如下图所示: 图2 交通灯状态循环图 程序就是在上述四种状态下循环转化的。一个周期四个状态,在正常模式下共花费1分10秒。 二.具体设计方案 2.1方案要求: 本设计要求与交通信号实际控制一致,采用LED模拟信号灯,信号灯分东西、南北二组,分别有红、黄、绿三色。其工作状态由程序控制,启动、停止按钮分别控制信号灯的启动与停止。白天/黑夜转换开关可对信号进行控制转换。并且要求能用两位数码管(或者一位数码管)来显示红灯或者绿灯等待的时间,在黄灯的时候数码管不显示。信号灯的控制要求如下: ⑴假设东西方向交通繁忙为主干道,车流量为南北交通的两倍.因此东西方向的绿灯通行时间为是南北方向上的两倍。 ⑵开始时东西方向绿灯先亮,南北为红灯。 ⑶按下启动按钮开始工作,,按下停止按钮,停止工作.白天/黑夜转换开关闭合时为黑夜工作状态,这时只有黄灯来回闪烁,断开为白天工作状态。白天工作状态要求:东西方向绿灯亮40s,然后黄灯闪三下(1下/秒,共5秒),然后红灯亮20s,而南北方向为红灯亮40s然后绿灯亮20s,然后黄灯也闪三下;如此周期循环下去。 示意图 2。2方案分析 根据十字路口交通灯的要求,可将本系统分为三个模块,第一模块是控制模块,主要负责整个系统的控制和运算,从而使各模块正常工作,第二个模块式显示模块包括LED灯和数码管;第三是电源模块,给各模块提供电源,让各模块工作。其系统设计结构如图: 图3.系统设计结构图 2。3 89C51单片机引脚功能说明 89C51外部引脚图:(可以直接拷入ASM程序文件中,作注释使用,十分方便) ┏━┓┏━┓ P1.0 ┫1 ┗┛40┣ Vcc ﻫ P1.1 ┫2 39┣ P0.0 P1.2 ┫3 38┣ P0.1 ﻫ P1。3 ┫4 37┣ P0。2 P1.4 ┫5 36┣ P0.3 P1.5 ┫6 35┣ P0.4 P1.6 ┫7 34┣ P0.5 ﻫ P1。7 ┫8 33┣ P0。6 ﻫ RST/Vpd ┫9 32┣ P0.7 ﻫ RXD P3.0 ┫10 31┣ —EA/Vpp(内1/外0 程序地址选择)ﻫ TXD P3.1 ┫11 30┣ ALE/—P(地址锁存输出)ﻫ -INT0 P3.2 ┫12 29┣ -PSEN (外部程序读选通输出) -INT1 P3。3 ┫13 28┣ P2。7 ﻫ T0 P3.4 ┫14 27┣ P2。6 T1 P3.5 ┫15 26┣ P2.5 —WR P3。6 ┫16 25┣ P2。4- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 课程设计 完整 资料
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【二***】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【二***】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【二***】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【二***】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文