基于单片机控制的交通灯设计含完整C程序 原理图 .doc

上传人:sccc 文档编号:4854915 上传时间:2023-05-20 格式:DOC 页数:18 大小:487.02KB
返回 下载 相关 举报
基于单片机控制的交通灯设计含完整C程序 原理图 .doc_第1页
第1页 / 共18页
基于单片机控制的交通灯设计含完整C程序 原理图 .doc_第2页
第2页 / 共18页
基于单片机控制的交通灯设计含完整C程序 原理图 .doc_第3页
第3页 / 共18页
基于单片机控制的交通灯设计含完整C程序 原理图 .doc_第4页
第4页 / 共18页
基于单片机控制的交通灯设计含完整C程序 原理图 .doc_第5页
第5页 / 共18页
点击查看更多>>
资源描述

《基于单片机控制的交通灯设计含完整C程序 原理图 .doc》由会员分享,可在线阅读,更多相关《基于单片机控制的交通灯设计含完整C程序 原理图 .doc(18页珍藏版)》请在三一办公上搜索。

1、实 习 报 告电子与信息工程学院课 程 设 计 报 告(2010 2011学年 第 2 学期)课程名称: 单片机课程设计 班 级: 学 号: 姓 名: 指导教师: 2011年 03月1、 目的实习是在教师指导下,学生运用所学理论知识及实验方法解决实际问题的一种实践活动,通过这些活动培养学生分析问题和解决问题的能力。具体表现在构造一个控制系统框架的能力;检索和阅读文献资料的能力;综合运用所学专业知识使之对所设计系统具有独立调试的能力和故障处理的能力;绘图能力;计算机运用能力;逻辑思维能力与形象思维能力;文字及口头表达的能力;撰写实习报告的能力2、 内容和要求任务1:交通灯(1)基本要求:以单片机

2、为核心设计一个完整的交通灯模拟系统。所谓模拟就是以每组有绿,红,黄色3支共两组发光二极管表示交通信号灯,数码管2只共两组以递减的方式表示各色信号灯的时间。在双干线路口上,交通信号灯的变化是定时的。假定: 放行线,绿灯亮放行25秒,黄灯亮警告5秒,然后红灯亮禁止。 禁止线,红灯亮禁止30 秒,然后绿灯亮放行。使两条路线交替地成为放行线和禁止线,就可以实现定时交通控制。假定以P1口线接6支发光二极管(即交通信号灯),因为电路中有反相器的关系,所以口线输出高电平则“信号灯”熄灭,口线输出低电平则“信号灯“亮。(2)进阶要求一:在基本要求的基础上,要求红绿灯时间可通过按键设置,例如红灯60秒,绿灯52

3、秒,黄灯8秒。提示:时间设置一定是要遵循以下规律:红灯时间绿灯时间黄灯时间;任务2:秒表要求:至少包括4个功能:时间清零;启动计时;暂停计时;继续计时;计时最小单位0.1 秒,最大计时时间999.9秒3过程(如实际程序开发、电子制作,详细说明有关原理、开发过程、调试过程、结果)一交通灯芯片介绍SST89E58RD:是8位FLASH FLEX51系列单片机。FLASH FLEX51是在高级FLASH CMOS半导体工艺下设计和生产出来的单片机产品之一。单片机有40K片内FLASH EEPROM程序存储器,它利用SST的超级FLASH专利技术,这些都是SST的领先技术。超级FLASH存储器被分为两

4、个独立的程序存储器块,基本FLASH Block0占用32K字节片内程序存储空间,二级FLASH Block1占用8K字节的片内程序存储器空间;8K字节的二级FLASH块能被映射到32K字节低地址空间它也能从程序计数器中被隐藏掉而用做一个独立的类似EEPROM的数据存储器。其具有以下特点:兼容80C51系列,内置超级FLASH存储器的单片机;工作电压Vdd=4.55.5;1K*8的内部RAM(256Bytes+768Bytes,可以放心使用C语言编程)等。8155:Intel8155是可编程RAM/IO芯片,为40脚双列直插式封装。有256*8位静态RAM,2个8位和1个6位可编程并行I/O接

5、口,以及1个14位可编程定时器/计数器。可直与MCS-51单片机相接,是MCS-51单片机应用系统中应用最多的芯片之一其内部结构图和引脚图如图1所示图11.数码管显示模块在交通灯系统中,四位数码管是用来显示交通灯倒计时时间的,一路显示放行线时间,一路显示禁止线时间四位数码管的电路如图2:图2四位八段数码管,属共阴逆序,高电平有效,所以不带小数点的0-f的段码如下:0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H,0FEH,0F6H,0EEH,3EH,9CH,7AH,9EH,8EH;PROTEUS 仿真图如图3:图3四位数码管的显示使用了并行扩展芯片8155,8155与

6、单片机SST89E58RD的接口如图4图48155的高8位数据地址线与单片机的P0口相连,CE与AD15相连,IO/M与AD8相连数码管的八位段选与PB口相连,四位位选与PA口相连。用C语言初始化8155和显示程序如下:#define PA8155 XBYTE0x7101#define PB8155 XBYTE0x7102#define COM8155 XBYTE0x7100COM8155=0x03;2发光二极管模块用两组分别为红黄绿共六盏LED灯来模拟实际的交通信号灯,时间上遵循红灯时间等于绿灯时间加黄灯时间。LED灯是低电平有效,硬件电路图如图5所示:图5LED的控制是在定时器0的中断中实

7、现的,每一秒时间到后,会根据实时时间(current_time)与红黄绿时间比较,来确定相应的两盏灯亮,程序如下所示: if(current_timegreen)/主绿灯和从红灯时间 Allocate(green-current_time)*100+green+yellow-current_time); P1=0xf3; else if(current_timegreen+yellow)/主黄从红 Allocate(green+yellow-current_time)*100+green+yellow-current_time); P1=0xf5; else if(current_time2)

8、 traffic_mode=0;EA=1;4.程序流程图如下:开始初始化1S到?进入定时器中断0LED及数码管显示Traffic_mode=1?状态1按键处理按键是否按下状态2Traffic_mode=2?主流程图K1按下进入修改选择状态进入加状态K3按下进入减状态K4按下返回按键流程图二秒表秒表的要求是至少包括4个功能:时间清零;启动计时;暂停计时;继续计时;计时最小单位0.1 秒,最大计时时间999.9秒数码管显示模块见一中“数码管显示模块”,此处略;程序主流程图如下:开始初始化复位键?暂停暂停键?显示时间结束 秒表主流程图三将两个程序合并将两个程序合并需要用一个变量来判断,我们选择扫描P

9、1.7口来设定变量的值,然后在中断和主函数中用变量的值来选择执行的程序段程序流程图如下:开始初始化执行交通灯功能Mode=2?执行秒表功能Mode =1?四合并后的程序如下:#include /头文件#include#include #include#define PA8155 XBYTE0x7101 /数码管位选地址#define PB8155 XBYTE0x7102 /数码管段选地址#define COM8155 XBYTE0x7100unsignedcharcode Table16=0X0FC,0X60,0X0DA,0X0F2,0X66,0X0B6,0X0BE,0X0E0,0X0FE,0

10、X0F6;unsigned char Buf4=0,0,0,0;/数据缓冲区sbit BTN=P17;sbit inte0=P32;sbit add=P34;sbit minus=P35;unsigned int mode=1; unsigned int traffic_count=0; /交通灯变量unsigned int traffic_mode=0;unsigned int current_time=0;unsigned int green=25;unsigned int yellow=5;unsigned int time_count=0; /秒表变量unsigned int time

11、=0;unsigned int reset; /复位标志位bit i=0; /启停标志位void delay(unsigned int t)/延迟函数 while(t-);void DISP_LED(unsigned char *Bufptr)/ 数码管显示 unsigned char disi;unsigned char BitCT=0X10; for(disi=0;disi4;disi+) PA8155=BitCT; PB8155=Table*Bufptr+(disi=1 & mode=2); BitCT=BitCT1;/左移一位delay(500); void Allocate(unsi

12、gned int a)/ 数据分配 Buf3=a/1000; Buf2=a%1000/100; Buf1=a%100/10; Buf0=a%10;unsigned char ChKey(bit Key)/ 键值扫描函数 if(Key=0) delay(20000); if(Key=0) return 1; void Testmode()/键值扫描函数 if(ChKey(BTN)=1) mode+; if(mode=3) mode=1; Allocate(mode*10); unsigned char scankey (unsigned char sec)/加减实现函数 if(!add) del

13、ay(20000); sec+; if(!minus) delay(20000); sec-; return sec;void Ex0() interrupt 0 /外部中断0if(mode=1) /EA=0; if(!inte0) delay(2500); if(!inte0) traffic_mode+; if(traffic_mode=3) traffic_mode=0; /EA=1; else if(mode=2) reset=1;void timer0() interrupt 1 /定时器0中断 if(mode=1) traffic_count+; if(traffic_count=

14、20) traffic_count=0; current_time=(current_time+1)%(2*yellow+2*green); if(current_timegreen) Allocate(green-current_time)*100+green+yellow-current_time); P1=0xf3; else if(current_timegreen+yellow) Allocate(green+yellow-current_time)*100+green+yellow-current_time); P1=0xf5; else if(current_timegreen*

15、2+yellow) Allocate(2*green+2*yellow-current_time)*100+green*2+yellow-current_time); P1=0xde; else Allocate(2*green+2*yellow-current_time)*100+2*green+2*yellow-current_time); P1=0xee; else if(mode=2) time_count+; if(time_count=2) time_count=0; time+; Allocate(time); TH0=0x4b; TL0=0x40;void Ex1() inte

16、rrupt 2 /外部中断1 if(mode=2) i=i;void main() TMOD=0x01; TH0=0x4b; TL0=0x40; IP=0x01; EA=1; ET0=1; EX0=1; IT0=1; EX1=1; IT1=1; COM8155=0x03; TR0=1; Allocate(green*100+green+yellow);while(1) while(mode=1)/交通灯 Testmode(); switch(traffic_mode) case 1: yellow=scankey(yellow); Allocate(yellow*100); break; ca

17、se 2: green=scankey(green); Allocate(green); break; DISP_LED(Buf); while(mode=2) /秒表 Testmode(); if(i=1) TR0=1; else TR0=0; if(reset=1) /当接收到复位信号后令各缓冲区清零,同时停止计时 time=0; reset=0; i=0; TR0=0; Allocate(0); DISP_LED(Buf);五完整的硬件电路图图7秒表的实现是在上图的基本上去掉LED部分,在独立按键控制模块换成下面的图8图84.小结(1).通过这次实现我熟悉了51单片机C语言程序的编写和单

18、片机设计仿真工具PROTEUS的使用。用C编写程序比汇编更符合人们的思考习惯,开发者可以摆脱与硬件无必要的接触,更专心的考虑功能和算法而不是考虑一些细节问题,这样就减少了开发和调试的时间。C语言具有良好的程序结构,适用于模块化程序设计,因此采用C语言设计单片机应用系统程序时,首先要尽可能地采用结构化的程序设计方法,将功能模块化,由不同的模块完成不同的功能;PROTEUS不仅是模拟电路,数字电路,模/数混合电路的设计与仿真平台,更是目前世界上最先进,最完整的多种型号单片机系统的设计与仿真平台。它真正实现了在计算机上完成从原理图设计,电路分析与仿真,单片机代码级调试与仿真,系统测试与功能验证到形成

19、PCB的完整的电子设计,研发过程。在本次实习中主要用到ISIS功能模块,ISIS是单片机与外设的设计,仿真和协同仿真环境,它提供了进行设计的方法,为单片机系统的实时交互式仿真提供了结构体系;为单片机编辑源程序,产生目标代码提供了管理系统。(2). 在本次实习中主要遇到两个大的问题,一个是在交通灯进阶模块,如何通过按键实现交通灯时间的修改,起初准备把整个修改时间的功能实现都放在一个外部中断中实现,进入中断就进入了交通灯时间的修改,可实现起来比较困难,最后设计思路是在中断中只实现一个判断变量值的设定,在主函数中通过判断这个变量值并调用加减函数来选择修改状态;另一个是如何把两个程序合并到一个程序中并通过按键来选择,在没有参考程序的情况下,这个实现确实不容易,参考一个相关程序发现原理很简单,就是通过扫描一个IO口来设置一个变量的值,在主函数和中断中都需要实现的程序通过这个变量的值来选择具体执行那个程序。参考文献1李广弟等.单片机基础 M.北京:北京航空航天大学出版社,2010 .2龚运新.单片机C语言开发技术M.北京:清华大学出版社,2006.3张靖武等.单片机系统PROTEUS设计与仿真M.北京:电子工业出版社,2007.成绩日期批阅人- 17 -

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

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号