基于单片机控制的交通灯设计(含完整C程序 原理图)_第1页
基于单片机控制的交通灯设计(含完整C程序 原理图)_第2页
基于单片机控制的交通灯设计(含完整C程序 原理图)_第3页
基于单片机控制的交通灯设计(含完整C程序 原理图)_第4页
基于单片机控制的交通灯设计(含完整C程序 原理图)_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

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

3、提示:时间设置一定是要遵循以下规律:红灯时间绿灯时间黄灯时间;任务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接口,以及1个1

5、4位可编程定时器/计数器。可直与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与单片机sst8

6、9e58rd的接口如图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) traffi

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

9、变量的值,然后在中断和主函数中用变量的值来选择执行的程序段程序流程图如下:开始初始化执行交通灯功能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,0x0f6;un

10、signed 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=0;unsi

11、gned 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(unsigned in

12、t 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) delay(2000

13、0); 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=20) tra

14、ffic_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*2+yello

15、w) 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() interrupt 2

16、 /外部中断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; case 2: g

17、reen=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不仅是模拟电路,数字电路,模/数混合电路的设计与仿真平台,更是目前世界上最先进,最完整的多种型号单片机系统的设计与仿真平台。它真正实现了在计算机上完成从原理图设计,电路分析与仿真,单片机代码级调试与仿真,系统测试与功能验证到形成pcb的完整的电子设计,研发过程。在本次实习中主要用到isis功能模块,isis是单片机与外设的设计,仿真和协同仿真环境,它提供了进行设计的方法,为单片机系统的实时交互式仿真提供了结构体系;为单片机编辑源程序,产生目标代码提供了管理系统。(2). 在本次实习中主要遇到两个大的问题,一个是在交通灯进阶模块,如何通过按键实现交通灯时间的修改,起初准备把整个修改时间的功能实现都放在一个外部中断中实现,进入中断就进入了交通灯时间的修改,可实现起来比较困难,最后

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论