模拟交通灯控制代码

合集下载

verilog课程设计交通灯

verilog课程设计交通灯

verilog课程设计交通灯一、教学目标本节课的教学目标是使学生掌握Verilog HDL的基本知识,能够使用Verilog编写简单的交通灯控制系统。

具体来说,知识目标包括理解Verilog的基本语法、模块化设计方法以及状态机的设计原理;技能目标包括能够使用Verilog编写交通灯控制器的代码,并能够进行仿真测试;情感态度价值观目标包括培养学生的团队合作意识,提高他们对电子工程的兴趣。

二、教学内容本节课的教学内容主要包括Verilog基础知识、模块化设计方法、状态机设计原理以及交通灯控制系统的实现。

具体来说,首先介绍Verilog的基本语法,包括数据类型、运算符、语句等;然后讲解模块化设计方法,如何将复杂的系统分解为简单的模块,并介绍模块的调用和连接;接着介绍状态机的设计原理,如何根据状态转移图编写状态机的Verilog代码;最后,通过实例讲解如何使用Verilog编写交通灯控制系统的代码,并进行仿真测试。

三、教学方法为了达到本节课的教学目标,将采用多种教学方法相结合的方式进行教学。

首先,通过讲授法,为学生讲解Verilog的基本语法、模块化设计方法和状态机设计原理;然后,通过案例分析法,分析交通灯控制系统的实现过程,让学生加深对知识的理解;接着,通过实验法,让学生动手编写交通灯控制器的Verilog代码,并进行仿真测试,提高他们的实践能力;最后,通过讨论法,让学生分享自己的学习心得,培养他们的团队合作意识。

四、教学资源为了支持本节课的教学内容和教学方法的实施,将准备以下教学资源:教材《Verilog HDL Primer》和相关参考书,用于讲解Verilog的基本语法和设计方法;多媒体教学课件,用于展示交通灯控制系统的原理和实现过程;实验设备,包括计算机和仿真器,用于让学生动手编写代码并进行仿真测试。

此外,还将提供在线编程平台,让学生可以随时随地编写代码并进行调试。

五、教学评估本节课的教学评估将采用多元化的评估方式,以全面、客观、公正地评价学生的学习成果。

交通信号灯模拟(PV操作)

交通信号灯模拟(PV操作)

目录第一章课程设计目的和要求 01.1 课程设计目的 01.2 课程设计要求 (1)第二章课程设计任务内容 02.1课程设计任务 02.2 课程设计原理 02.3 课程设计内容 (4)第三章详细设计说明 (5)3.1 模块描述 (5)3.2 性能描述 (5)3.3 输入项 (6)3.4 输出项 (6)3.5 数据结构 (7)3.6 算法介绍 (7)3.7 流程图 (8)3.7.1 主程序流程图 (8)3.7.2 算法流程图 (9)3.8 接口描述 (11)3.9 限制条件 (13)第四章件使用说明 (13)4.1 系统开发与运行环境 (13)4.2系统的运行说明 (13)4.3 运行结果 (13)第五章课程设计心得体会 (19)附录1:参考文献 (20)附录2:程序清单 (21)交通信号灯模拟第一章课程设计目的和要求1.1 课程设计目的根据学院课程安排,在大三的第一个学期我们开设了操作系统这门课程,操作系统可以说是是计算机系统的核心和灵魂,是计算机系统必不可少的组成部分。

通过学习,对于操作系统的运行方式以及设计理念有了较清楚的认识。

要想真正学好并理解操作系统这门课程,不但需要理解操作系统的概念和原理,还需要加强操作系统实验,上机进行编程实践,现在一学期的课程已经结束,本次课程设计在同学们掌握理解该课程的基础上,对操作系统内部的一些具体项目的实现方法进行实战演练,通过实践将知识彻底掌握。

操作系统课程设计是该课程重要的实践教学环节。

通过这次课程设计,一方面可以使学生更透彻地理解操作系统的基本概念和原理,摆脱抽象的理解,从实践中将理论具体化;另一方面,通过课程设计还可以加强学生的实践能力,培养学生独立分析问题、解决问题、应用知识的能力和创新精神。

本次课程设计的题目为交通信号灯模拟,在熟练掌握课本所讲解的计算机的P 操作和V操作的原理的基础上,利用C++程序设计语言在windows操作系统下模拟实现交通信号灯的模拟,一方面加深对原理的理解,另一方面提高根据已有原理通过编程解决实际问题的能力,为进行系统软件开发和针对实际问题提出高效的软件解决方案打下基础。

DSP交通灯综合控制程序代码

DSP交通灯综合控制程序代码

DSP原理及C程序开发交通灯综合控制实验及程序代码一、实验目的◇熟悉使用ICETECK-F2812-A评估板控制ICETECK-CTR上交通灯的方法◇掌握TMS320F2812DSP定时器的使用和编程◇掌握TMS320F2812DSP外中断的使用和编程二、实验要求1、交通灯控制要求◇交通灯分红黄绿三色,东、南、西、北各一组◇计时显示:8*8点阵显示两位计数◇正常交通控制信号顺序①南北绿灯:东西红灯(20s)②南北绿灯闪烁③南北黄灯④南北红灯,东西黄灯⑤东西绿灯(20s)⑥东西绿灯闪烁⑦东西黄灯⑧返回1循环控制◇紧急情况处理①当任意方向通行剩余时间多于10s,将时间给为10s②正常变换到四面红灯(20s)③直接返回正常信号顺序的下一个通行信号(跳过闪烁绿灯、黄灯状态)2、交通灯模拟利用ICETECK-CTR上的一组发光二极管(共12只,分为东西南北四组、红黄绿三色)的亮灭实现交通信号的模拟;3、计时显示利用ICETEK-CTR上的发光二极管显示阵列模拟显示4、计时利用TMS320F2812DSP片上定时器,定时产生时钟计数,再利用此计数对应具体时间5、紧急情况利用ICETECK-CTR上键盘产生外中断,中断正常信号顺序,模拟突发情况6、程序设计由于控制是由不同的各种状态按顺序发生的,可采用状态机控制方法来实现、◇首先列举所有可能发生的状态◇然后将这些状态编号,按顺序产生这些状态;状态延续的时间用程序控制◇对于突发情况,可采用在正常顺序的控制中插入特殊控制序列的方式完成三、实验步骤1.实验准备(1)连接实验设备:(2)连接实验箱附带的键盘的PS2插头到ICETEK-CTR的“键盘接口”P8。

(3)将ICETEK-CTR板的供电电源开关拨动到“开”的位置。

2.设置Code Composer Studio3.3在硬件仿真(Emulator)方式下运行。

3.启动Code Composer Studio 3.3,选择菜单Debug→Connect ; Debug→Reset CPU。

单片机整套实验及程序(交通灯_跑马灯等)

单片机整套实验及程序(交通灯_跑马灯等)

实验1 跑马灯实验一、实验目的●初步学会Proteus ISIS和uVision2单片机集成开发环境的使用;●初步掌握采用汇编语言与C语言开发单片机系统的程序结构;●掌握80C51单片机通用I/O口的使用;●掌握单片机内部定时/计数器的使用及编程方法以及中断处理程序的编写方法。

二、实验设备及器件●硬件:PC机,HNIST-1型单片机实验系统●软件:Proteus ISIS单片机仿真环境,uVision2单片机集成开发环境三、实验内容●编写一段程序,采用P1口作为控制端口,使与P1口相接的四个发光二极管〔D1、D2、D3、D4〕按照一定的方式点亮。

如点亮方式为:先点亮D1,延时一段时间,再顺序点亮D2……D4,然后又是D4……D1,同时只能有一个灯亮;然后每隔一段时间一次使相邻两个灯亮,三个灯亮,四个灯亮,最后闪烁三次,接着循环变化。

●基于Proteus ISIS仿真环境完成上述功能的仿真。

●基于uVision2单片机集成开发环境与硬件平台完成程序的脱机运行。

四、实验原理图图3.1 跑马灯实验电路原理图电路原理图如上图3.1所示,AT89S52的P1.0~P1.3控制4个发光二极管,发光二极管按照一定次序发光,相邻发光二极管的发光时间间隔可以通过定时器控制,还可以通过软件延时实现。

五、软件流程图与参考程序●主程序流程图如下:●参考程序#include<reg52.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intuchar aa,num,speed,flag;uchar code table[]={0x0e,0x0d,0x0b,0x07};uchar code table1[]={0x0a,0x05,0x09,0x06};uchar codetable2[]={0x0c,0x09,0x03,0x08,0x01,0x0e,0x0c,0x08,0x00};void delay(uint z)//延时函数{uint x;uchar y;for(x=z;x>0;x--)for(y=200;y>0;y--);}void init()//条件初始化函数{ flag=0;speed=10;//控制跑马灯流水速度TMOD=0x01;//中断方式TH0=(65535-50000)/256;TL0=(65536-50000)%256;//初值EA=1;//翻开总中断ET0=1;//翻开外中断0TR0=1;}void main(){init();//调用初始化函数while(1){if(flag){delay(2000);//调用延时函数for(num=0;num<4;num++)//从左至右间隔一个依次闪烁{P1=table[num];delay(2000);}for(num=3;num>0;num--)//从左至右间隔一个依次闪烁{P1=table[num];delay(2000);}for(num=0;num<4;num++)//从左至右间隔两个依次闪烁{P1=table1[num];delay(2000);}for(num=3;num>0;num--)//从左至右间隔两个依次闪烁{P1=table1[num];delay(2000);}for(num=0;num<6;num++)//两个,三个,四个跑马灯依次闪烁{P1=table2[num];delay(2000);}for(num=0;num<5;num++)//闪烁5次{P1=0xff;//全暗delay(2000);P1=0X00;//全亮delay(2000);}speed=speed-3;//变速if(speed==4){speed=10;}}}}void timer0() interrupt 1//中断函数{TH0=(65535-50000)/256;TL0=(65536-50000)%256;aa++;if(aa==speed){aa=0;flag=1;}}六、实验思考题●请用汇编指令完本钱实验内容,深刻理解汇编语言程序设计结构。

作弊代码

作弊代码
ASNAEB = Clear Wanted Level 清除所有的星星
AFZLLQLL = Sunny Weather 晴空万里
ICIKPYH = Very Sunny Weather 阳光灿烂
ALNSFMZO = Overcast Weather 阴云密布
AUIFRVQS = Rainy Weather 细雨绵绵
BIFBUZZ = Gangs Control the Streets 黑帮控制街道
-------------------------------------------------------------
刷新车辆类
AIWPRTON = Spawn Rhino 刷新一辆坦克
CQZIJMB = Spawn Bloodring Banger 刷新一辆Bloodring Banger
NINJATOWN = Ninja Theme 忍者模式
BEKKNQV = Slut Magnet 吸引女性
STATEOFEMERGENCY = Riot Mode 暴动模式
CRAZYTOWN = Funhouse Theme 乐趣屋模式
SJMAHPE = Recruit Anyone (9mm) 给任何人9mm冲锋枪
JQNTDMH = Spawn Rancher 刷新一辆Rancher
VROCKPOKEY = Spawn Racecar 刷新一辆Racecar
VPJTQWV = Spawn Racecar 刷新一辆Racecar#2
WHERESTHEFUNERAL = Spawn Romero 刷新一辆Romero
BTCDBCB = Fat 主角变胖
KVGYZQK = Skinny 主角变得皮包骨

51单片机c语言交通灯设计报告

51单片机c语言交通灯设计报告

xxxxxxxxx基于AT89S52交通灯设计学院:电子信息工程专业班级: xxxxxxxxxxxxxx姓名: xx xx学号: xxxxxxxxxxx指导老师: xxxxxxxxxx摘要交通灯在我们日常生活中随处可见,它在交通系统中处于至关重要的位置。

交通灯的使用大大减少了交通繁忙路口的事故发生,给行人和车辆提供一个安全的交通环境,人们的生命和财产安全有了保障。

本设计旨在模拟十字路口的交通灯,以AT89S51单片机为基础,结合按键和数码管等元器件设计出一个简单且完全的交通灯系统。

关键词:交通灯 AT89S52 单片机目录一、设计任务 (4)二、AT89S52单片机及其他元器件简介 (4)(1)AT89S52单片机 (4)三、系统硬件电路设计 (6)(1)时钟电路设计 (6)(2)复位电路设计 (6)(3)灯控制电路设计 (7)(4)按键控制电路设计 (7)四、元件清单及实物图 (8)1、程序清单 (8)2、原理图 (9)五、实验心得 (9)附1 源程序代码 (10)附2 原理图 (16)一、设计任务(1)、设计一个十字路口的交通灯控制电路,要求南北方向和东西方向两条交叉道路上的车辆交替运行,每次通行时间都设30秒,时间可设置修改。

(2)、在绿灯转为红灯时,要求黄灯先亮5秒钟,才能变换运行车道,且黄灯亮时,要求每秒亮一次。

(3)、有紧急车辆要求通过时,系统要能禁止东西和南北两条路上所有的车辆通行。

二、AT89S52单片机及其他元器件简介(1)AT89S52单片机AT89S52是一种低功耗、高性能CMOS8位微控制器。

片上Flash允许程序存储器在系统可编程,亦适于常规编程器。

在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。

AT89S52具有以下标准功能:8K字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6位向量2级中断结构,全双工串行口,片内晶振及时钟电路。

交通灯设计-8255-8254(附连线图和源代码)

交通灯设计-8255-8254(附连线图和源代码)

西安郵電學院硬件课程设计报告题目:微机原理与接口课程设计;^院系名称:计算机学院专业名称:软件工程班级:软件0802学生姓名:王晶晶学号(8位): 04085047指导教师:刘军设计起止时间:2011年05月23日~2011年05月27日[一、设计目的通过可编程并行接口芯片8255A和可编程定时器/计数器芯片8253/8254以及中断控制器 8259实现十字路口交通灯的模拟控制,进一步掌握并行接口和定时器/计数器及数码管控制的实际应用。

二、设计内容1.用试验台提供的发光二极管(红绿黄各两支,共六支)作为南北路口(红绿黄各一支)和东西路口(红绿黄各一支)的模拟交通灯。

2.用可编程并行接口芯片8255A控制模拟交通灯的亮与灭和数码管的倒计时显示。

3.用可编程定时器/计数器芯片8253实现模拟交通灯亮与灭的时间延迟控制。

4.用数码管作为模拟交通灯亮与灭的时间延迟控制的倒计时显示。

'5.用汇编语言编程使六个灯按交通灯变化规律“亮/灭”。

交通灯变化规律要求:① 南北路口的绿灯,东西路口的红灯同时亮30秒,且数码管30秒倒计时显示。

② 南北路口的黄灯闪烁3秒(三亮三灭),同时东西路口的红灯继续亮,且数码管3秒倒计时显示。

③ 南北路口的红灯,东西路口的绿灯同时亮20秒,且数码管20秒倒计时显示。

④ 南北路口的红灯继续亮,同时东西路口的黄灯闪烁3秒(三亮三灭),且数码管3秒倒计时显示。

⑤ 转①重复⑥按压“东西紧急键”,则东西方向绿灯,南北方向红灯;再次按压“东西紧急键”,解除东西紧急通行状态。

(“东西紧急键”可是键盘键,亦可是逻辑开关键)⑦按压“南北紧急键”,则南北方向绿灯,东西方向红灯;再次按压“南北紧急键”,解除南北紧急通行状态。

(“南北紧急键”可是键盘键,亦可是逻辑开关键)"⑧按 <ESC>键退出程序。

备注:1、按键用 8255A 芯片的 PC 口实现或用键盘模拟实现。

2、8253定时到可以通过8259,用中断的方式实现定时器。

十字路口交通灯Proteus仿真

十字路口交通灯Proteus仿真

《微机原理与接口技术》课程设计报告题目:十字路口交通灯设计学院:信息工程学院专业:通信工程目录1、摘要 (1)2、硬件电路图 (2)3、AT89C51功能介绍 (3)4、交通灯程序设计思路 (5)5、交通灯运行流程图 (6)6、源代码函数说明 (6)7、交通灯设置红绿灯时间结果图 (8)8、心得与体会 (9)9、源程序代码 (10)摘要十字道口的红绿灯是交通法规的无声命令,是司机和行人的行为准则。

十字道口的交通红绿灯控制是保证交通安全和道路畅通的关键。

当前,国内大多数城市正在采用“自动”红绿交通灯,它具有固定的“红灯—绿灯”转换间隔,并自动切换。

它们一般由“通行与禁止时间控制显示、红黄绿三色信号灯和方向指示灯”三部分组成。

通常,生活中常见的红绿灯控制为,红灯六十秒,绿灯四十五秒,黄灯三秒等,因道路,车辆,城市交通规划而异,此次,基于proteus仿真十字路口的交通灯控制系统,设定南北方向绿灯15秒,黄灯5s,东西方向绿灯10s,黄灯5s。

系统基于MSC-51系列单片机89C51为中心器件来设计交通灯,显示器件为LED 红绿灯,LCD数码管。

采用c51编程,简单易懂,将功能模块化,除了可以实现红绿灯按要求变化,还通过proteus里的按钮,设置了键盘函数,可以按要求调整红绿灯亮的时间,并且还有重置(初始化)按钮。

一.功能概述1.设计任务:交通灯的硬件设计和软件设计2.设计目的:(1).初步了解和认识51单片机的工作原理,引脚图。

(2).掌握单片机相关接口技术和相关外围芯片的特性。

( 3 ).通过实际的设计程序,查找资料,调试程序,熟悉keil和proteus软件仿真,理解并熟悉模块化程序设计方法和调试。

3.基本要求:利用单片机的定时器产生秒信号,控制十字路口的红、绿、黄灯交替点亮和熄灭,并且用 4 只LED 数码管显示十字路口两个方向的剩余时间。

当东西方向亮绿灯时,南北方向红灯亮起;反之,如果南北方向亮绿灯,同时东西方向亮绿灯;绿灯亮时车辆行驶,红灯亮时车辆停止。

plc交通信号灯控制实验报告

plc交通信号灯控制实验报告

竭诚为您提供优质文档/双击可除plc交通信号灯控制实验报告篇一:交通灯pLc控制实验报告交通灯的pLc控制实验报告学院:自动化学院班级:0811103姓名:张乃心学号:20XX213307实验目的1.熟悉pLc编程软件的使用和程序的调试方法。

2.加深对pLc循环顺序扫描的工作过程的理解。

3.掌握pLc的硬件接线方法。

4.通过pLc对红绿灯的变时控制,加深对pLc按时间控制功能的理解。

5.熟悉掌握pLc的基本指令以及定时器指令的正确使用方法。

实验设备1.含可编程序控制器microLogix1500系列pLc的Demo 实验箱一个2.可编程序控制器的编程器一个(装有编程软件的pc 电脑)及编程电缆。

3.导线若干实验原理交通指挥信号灯图I/o端子分配如下表注:pLc的24VDc端接Demo模块的24V+;pLc的com端接Demo模块的com。

系统硬件连线与控制要求采用1764-L32Lsp型号的microLogix1500可编程控制器,进行I/o端子的连线。

它由220VAc供电,输入回路中要串入24V直流电源。

1764系列可编程控制器的产品目录号的各位含义如下示。

1764:产品系列的代号L:基本单元24:32个I/o点(12个输入点,12个输出点)b:24V 直流输入w:继电器输出A:100/240V交流供电下图为可编程控制器控制交通信号灯的I/o端子的连线图。

本实验中模拟交通信号灯的指示灯由24V直流电源供电。

o/2-o/4为南北交通信号灯,o/5-o/7为东西交通信号灯。

实现交通指挥信号灯的控制,交通指挥信号灯的布置,控制要求如下:(1)信号灯受一个启动开关控制,当启动开关接通时,信号灯系统开始正常工作,且先南北红灯亮,东西绿灯亮。

当启动开关断开时,所有信号灯熄灭。

(2)南北红灯维持25秒。

在南北红灯亮的同时东西绿灯也亮,并维持20秒。

到20秒时,东西绿灯闪亮,闪亮3秒后熄灭。

在东西绿灯熄灭时,东西黄灯亮,并维持2秒。

AT89S51单片机控制红、绿、黄交通灯亮及闪烁时间与顺序。

AT89S51单片机控制红、绿、黄交通灯亮及闪烁时间与顺序。

桂林电子科技大学微机单片机接口设计报告指导老师:吴兆华学生:冯贤明学号: 092011133桂林电子科技大学机电工程学院一设计题目 (1)二设计目的要求和意义 (1)2.1设计目的要求 (1)2.2 系统设计意义 (1)三系统硬件电路图设计 (2)3.1 系统结构框图 (2)3.2 系统硬件电路图 (2)3.3 电路设计PCB图 (3)四程序流程图与源代码 (4)4.1 程序流程图 (4)4.2 程序源代码 (4)五系统功能分析与说明 (5)5.1 微处理器 (5)5.2 复位电路的设计 (9)5.3 二极管输出电路 (9)5.4 晶振电路 (10)5.5 制作PCB图 (10)六设计体会 (12)七参考文献 (13)一设计题目按桂林市微笑堂十字街的交通规则用AT89S51单片机控制红、绿、黄交通灯亮及闪烁时间与顺序。

二设计目的要求和意义2.1设计目的要求1通过单片机最小系统的设计,了解常用单片机应用系统开发手段和过程,进一步熟悉和掌握单片机的结构和工作原理,并能初步掌握一般单片机控制系统的编程和应用,从而进一步加深对单片机理论知识的理解。

2 掌握单片机内部功能模块。

如定时器/计数器、中断系统、存储器、I/O口等;3 掌握单片机的接口及相关外围芯片的特性、使用与控制方法;4 掌握单片机的编程方法,调试方法;5 掌握单片机应用系统的构建和使用,为以后设计和实现单片机应用系统打下良好的基础。

6.学会使用并熟练掌握电路绘制软件Protel99SE(或DXP);7.掌握电路图绘制及PCB图布线技巧。

2.2 系统设计意义1、在系统掌握单片机相应基础知识的前提下,熟悉单片机最小应用系统的设计方法及系统设计的基本步骤。

2、完成所需单片机最小应用系统原理图设计绘制的基础上完成系统的电路图设计。

3、完成系统所需的硬件设计制作,在提高实际动手能力的基础上进一步巩固所学知识。

4、进行题目要求功能基础上的软件程序编程,会用相应软件进行程序调试和测试工作。

交通信号灯控制程序代码

交通信号灯控制程序代码
MOV SECOND2,#2 ;南北路口计时显示初值2s
LCALL DISPLAY
WAIT6: LCALL STATE6 ;调用状态6
JNB TF0,WAIT6 ;查询100ms到否
CLR TF0
MOV TH0,#3CH ;恢复T0定时初值100ms
SECOND1 EQU 30H ;东西路口计时寄存器
SECOND2 EQU 31H ;南北路口计时寄存器
DBUF EQU 40H ;显示码缓冲区1
TEMP EQU 44H ;显示码缓冲区2
LED_G1 BIT P2.1 ;东西路口绿灯
LED_Y1 BIT P2.2 ;东西路口黄灯
WAIT5: LCALL STATE5 ;调用状态5
JNB TF0,WAIT5 ;查询100ms到否
CLR TF0
MOV TH0,#3CH ;恢复T0定时初值100ms
MOV TL0,#0B0H
DJNZ R4,WAIT5 ;判断200ms到否?未到继续状态5
MOV TL0,#0B0H
DJNZ R2,WAIT1 ;判断1s到否?未到继续状态1
MOV R2,#20 ;置50ms计数初值
DEC SECOND1 ;东西路口显示时间减1s
DEC SECOND2 ;南北路口显示时间减1s
LCALL DISPLAY
DJNZ R3,WAIT6 ;状态6维持2s
LJMP LOOP ;大循环
;**********************************************
STATE1: ;状态1 源自 SETB LED_G1 ;东西路口绿灯亮
CLR LED_Y1

模拟交通灯实验报告

模拟交通灯实验报告

单片机综合实验报告题目: 模拟真实交通灯班级:姓名:学号:指导老师:时间:一、实验内容:用8255芯片的PA、PB口低四位做输出口,控制十二个发光二极管燃灭,模拟十字路口交通灯管理,并利用数码显示器进行倒计时显示(采用单片机内部定时器定时)。

通过外部中断能使交通灯暂停运行,并点亮4个红灯。

通过16*16点阵中的图形模拟控制行人过马路的人形“走”、“停”指示灯,可参考下图所示。

选做增加项目:在交通灯开始之前可通过开关对红绿灯亮灭时间的初始值进行增、减设定或者交通灯暂停时加上乐曲报警。

二、实验电路及功能说明电路:74LS138译码器电路8255与发光二极管连线图数码LED显示器电路(不需接线)16×16LED点阵显示电要求:交通灯亮灭过程同“8255控制交通灯实验”,倒计时显示只需两位数(0~99),用定时器定时进行倒计时,每秒钟减1。

在16*16点阵中显示的人形“走”、“停”标志可自定义,由专门软件可转换为相应显示代码,不需自己推理。

三、实验程序流程图:主程序:子程序:详细程序请参考程序清单。

四、实验结果分析对程序进行仿真可以观察到:点阵中交替显示如图(a)、(b)所示图像,且交替显示时间为30秒。

当显示图像为(a)时,表示可以容行人通过,限时30秒;当显示图像为(b)时,表示不容行人通过,也限时30秒。

如此,在十字路口各置一对点阵即可模拟实景。

五、心得体会通过此次实验,对单片机的I/O口的使用的条件有了更深的理解,对单片机的各个管脚功能的理解也加深了,以及在常用编程设计思路技巧的掌握方面也向前迈了一大步。

这次的课程设计让我把单片机的理论知识应用在实践中,实现了理论和实践相结合,从中更懂得理论是实践的基础,实践有助于检验理论的正确性的道理,对我以后参加工作或者继续学习深造将产生巨大的帮助和影响。

六、程序清单#include <reg51.h>#include <absacc.h>#define uchar unsigned char#define uint unsigned int#define ROW1 XBYTE[0XFFE3]#define ROW2 XBYTE[0XFFE0]#define COL1 XBYTE[0XFFE2]#define COL2 XBYTE[0XFFE1]#define PA XBYTE[0xffd8]#define PB XBYTE[0xffd9]#define CTL XBYTE[0xffdb]#define SEG XBYTE[0xffdc]#define BIT XBYTE[0xffdd]#define allredend 10#define ewredend 2*ewstarter+allredend#define snyellowend ewredend+10#define snredend snyellowend+2*snstarter#define ewyellowend snredend+10sbit KEY1=P1^0;sbit KEY2=P1^1;sbit KEY3=P1^2;sbit P32=P3^2;uchar tongBu;uchar code ewTable[]={0xb6,0x75,0xf3,0xf7,0xae,0x9e,0xbe};uchar code nsTable[]={0xd,0xd,0xc,0xd,0xb,0x7,0xf};//uchar tempa,tempb;int time=1,cnt,change,intflag,inttime=1,ewstarter=10,snstarter=15;int tempseg;uchar key1=0;uchar buffer[]={0,0,0,0,0,0};uchar table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff};/*-- 行走--*//*-- 宽度x高度=16x16 --*/uchar code led1[]={0x01,0x80,0x02,0x40,0x02,0x40,0x01,0x80,0x03,0xC0,0x06,0x60,0x0A,0x50,0x0A,0x5 0,0x0B,0xD0,0x12,0x48,0x02,0x40,0x02,0x60,0x04,0x20,0x04,0x20,0x08,0x20,0x18,0x60};/*-- 停止--*//*-- 宽度x高度=16x16 --*/uchar code led2[]={0x01,0x80,0x02,0x40,0x02,0x40,0x01,0x80,0x07,0xE0,0x7E,0x7E,0x02,0x40,0x02,0x40 ,0x03,0xC0,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x03,0xC0};/*-- 文字: 高--*//*-- Fixedsys12; 此字体下对应的点阵为:宽x高=16x16 --uchar code led2[]={0x02,0x00,0x01,0x00,0xFF,0xFE,0x00,0x00,0x0F,0xE0,0x08,0x20,0x0F,0xE0,0x00,0x0 0,0x7F,0xFC,0x40,0x04,0x4F,0xE4,0x48,0x24,0x48,0x24,0x4F,0xE4,0x40,0x14,0x40,0x08};*/ void delayshort(){char n;for(n=50;n>0;n--);}uchar changeleft(uchar led){uchar temp;temp=0;temp|=(led<<7)&0x80;temp|=(led<<5)&0x40;temp|=(led<<3)&0x20;temp|=(led<<1)&0x10;temp|=(led>>1)&0x08;temp|=(led>>3)&0x04;temp|=(led>>5)&0x02;temp|=(led>>7)&0x01;return(temp);}void led16_16display(uchar *table,uchar length){uchar i=length/2,scan1=0x1,scan2=0x1;for(i=0;i<16;i++){if(i<8){ROW1=0;ROW2=0;COL1=scan1;COL2=0;ROW1=changeleft(table[2*i]);ROW2=table[2*i+1];COL1=scan1;COL2=0;delayshort();scan1<<=1;}else{ROW1=0;ROW2=0;COL1=0;COL2=scan2;ROW1=changeleft(table[2*i]);ROW2=table[2*i+1];COL1=0;COL2=scan2;delayshort();scan2<<=1;}}}void changeseg(){if(key1==0){buffer[3]=10;buffer[0]=10;buffer[5]=tempseg%10;buffer[4]=tempseg/10;buffer[2]=tempseg%10;buffer[1]=tempseg/10;}else if(key1==1){buffer[3]=10;buffer[0]=10;buffer[5]=ewstarter%10;buffer[4]=ewstarter/10;buffer[2]=ewstarter%10;buffer[1]=ewstarter/10;}else{buffer[3]=10;buffer[0]=10;buffer[5]=snstarter%10;buffer[4]=snstarter/10;buffer[2]=snstarter%10;buffer[1]=snstarter/10;}}void timer1()interrupt 3{static uchar temp=0x20,cnt1;TH1=(65536-1000)/256;TL1=(65536-1000)%256;changeseg();SEG=0xff;SEG=table[buffer[cnt1]];cnt1++;if(cnt1==6)cnt1=0;BIT=temp;temp>>=1;if(temp==0)temp=0x20;}void int_0()interrupt 0{delayshort();if(P32==0){PA=0xB6;PB=0xd;PT0=1;PT1=1;intflag=1;while(inttime<=20)led16_16display(led2,32);inttime=1;intflag=0;PT0=0;PT1=0;PA=ewTable[tongBu];PB=nsTable[tongBu];}}void timer0()interrupt 1{TH0=(65536-50000)/256;TL0=(65536-50000)%256;cnt++;if(cnt==5){cnt=0;if(intflag==1){inttime++;tempseg=10-inttime/2;}else{time++;if(time<=allredend){tongBu=0;PA=ewTable[tongBu];PB=nsTable[tongBu];tempseg=allredend/2-(time+1)/2;}else if((time>allredend)&&(time<=ewredend)){tongBu=1;PA=ewTable[tongBu];PB=nsTable[tongBu];tempseg=ewstarter+allredend/2-(time+1)/2;}else if((time>ewredend)&&(time<=snyellowend)){if(change==0){tongBu=2;PA=ewTable[tongBu];PB=nsTable[tongBu];change=1;}else{tongBu=3;PA=ewTable[tongBu];PB=nsTable[tongBu];change=0;}tempseg=ewstarter+allredend/2+5-(time+1)/2;}else if((time>snyellowend)&&(time<=snredend)){tongBu=4;PA=ewTable[tongBu];PB=nsTable[tongBu];tempseg=ewstarter+allredend/2+5+snstarter-(time+1)/2;}else if((time>snredend)&&(time<=ewyellowend)){if(change==0){tongBu=5;PA=ewTable[tongBu];PB=nsTable[tongBu];change=1;}else{tongBu=6;PA=ewTable[tongBu];PB=nsTable[tongBu];change=0;}tempseg=ewstarter+10+allredend/2+snstarter-(time+1)/2;}else{tongBu=1;time=allredend+1;PA=ewTable[tongBu];PB=nsTable[tongBu];tempseg=ewstarter+allredend/2-(time+1)/2;}}}}void key(){uchar keynum;keynum=~(P1|0XF8);switch(keynum){case 0x1:while(KEY1==0)led16_16display(led2,32);key1++;TR0=0;if(key1==3){key1=0;TR0=1;}break;case 0x2:while(KEY2==0)led16_16display(led2,32);if(key1==1){ewstarter++;if(ewstarter==100)ewstarter=0;}if(key1==2){snstarter++;if(snstarter==100)snstarter=0;}break;case 0x4:while(KEY3==0)led16_16display(led2,32);if(key1==1){ewstarter--;if(ewstarter==-1)ewstarter=99;}if(key1==2){snstarter--;if(snstarter==-1)snstarter=99;}break;default:break;}}void main(){IE=0x8b;IT0=1;TMOD=0x11;TH0=(65536-50000)/256;TL0=(65536-50000)%256;TH1=(65536-1000)/256;TL1=(65536-1000)%256;CTL=0x80;tongBu=0;TR1=1;PA=ewTable[tongBu];PB=nsTable[tongBu];tempseg=allredend/2-(time+1)/2;TR0=1;while(1){key();if(intflag==0){if(key1==0){if(time<=allredend)led16_16display(led2,32);else if(time>allredend&&time<=snyellowend)led16_16display(led1,32);else if(time>snyellowend&&time<=ewyellowend)led16_16display(led2,32);}elseled16_16display(led2,32);}}}。

单片机控制交通灯程序代码

单片机控制交通灯程序代码

单片机控制交通灯程序代码第一篇:单片机控制交通灯程序代码毕业设计程序源代码ORG 0000H;主程序的入口地址LJMP MAIN;跳转到主程序的开始处ORG 0003H;外部中断0的中断程序入口地址ORG 000BH;定时器0的中断程序入口地址LJMP T0_INT;跳转到中断服务程序处ORG 0013H;外部中断1的中断程序入口地址MAIN : MOV SP,#50HMOV IE,#8EH;CPU开中断,允许T0中断,T1中断和外部中断1中断MOV TMOD,#51H;设置T1为计数方式,T0为定时方式,且都工作于模式1 MOV TH1,#00H;T1计数器清零MOV TL1,#00HSETB TR1;启动T1计时器SETB EX1;允许INT1中断SETB IT1;选择边沿触发方式MOV DPTR ,#0003HMOV A, #80H;给8255赋初值,8255工作于方式0MOVX @DPTR, A AGAIN: JB P3.1,N0;判断是否要设定东西方向红绿灯时间的初值,若P3.1为1 则跳转MOV A,P1JB P1.7,RED;判断P1.7是否为1,若为1则设定红灯时间,否则设定绿灯时间MOV R0,#00H;R0清零MOV R0,A;存入东西方向绿灯初始时间MOV R3,ALCALL DISP1LCALL DELAYAJMP AGAIN RED:MOV A,P1ANL A,#7FH;P1.7置0MOV R7,#00H;R7清零MOV R7,A;存入东西方向红灯初始时间MOV R3,ALCALL DISP1LCALL DELAYAJMP AGAIN毕业设计;------------N0:SETB TR0;启动T0计时器MOV 76H,R7;红灯时间存入76H N00:MOV A,76H;东西方向禁止,南北方向通行MOV R3,AMOV DPTR,#0000H;置8255A口,东西方向红灯亮,南北方向绿灯亮MOV A,#0DDHMOVX @DPTR, A N01:JB P2.0,B0 N02:SETB P3.0CJNE R3,#00H,N01;比较R3中的值是否为0,不为0转到当前指令处执行;------黄灯闪烁5秒程序------N1:SETB P3.0MOV R3,#05HMOV DPTR,#0000H;置8255A口,东西,南北方向黄灯亮MOV A,#0D4HMOVX @DPTR,A N11:MOV R4,#00H N12:CJNE R4,#7DH,$;黄灯持续亮0.5秒N13:MOV DPTR,#0000H;置8255A口,南北方向黄灯灭MOV A,#0DDHMOVX @DPTR,A N14:MOV R4,#00HCJNE R4,#7DH,$;黄灯持续灭0.5秒CJNE R3,#00H,N1;闪烁时间达5秒则退出;-----------------------------N2:MOV R7,#00HMOV A,R0;东西通行,南北禁止MOV R3,AMOV DPTR,#0000H;置8255A口,东西方向绿灯亮,南北方向红灯亮MOV A,#0EBHMOVX @DPTR,A N21:JB P2.0,T03N22:CJNE R3,#00H,N21;------黄灯闪烁5秒程序------N3:MOV R3,#05HMOV DPTR,#0000H;置8255A口,东西,南北方向黄灯亮毕业设计MOV A,#0E2HMOVX @DPTR,A N31:MOV R4,#00HCJNE R4,#7DH,$;黄灯持续亮0.5秒N32:MOV DPTR,#0000H;置8255A口,南北方向黄灯灭MOV A,#0EBHMOVX @DPTR,A N33:MOV R4,#00HCJNE R4,#7DH,$;黄灯持续灭0.5秒CJNE R3,#00H,N3;闪烁时间达5秒则退出SJMP N00;------闯红灯报警程序------B0:MOV R2,#03H;报警持续时间3秒 B01:MOV A,R3JZ N1;若倒计时完毕,不再报警CLR P3.0;报警CJNE R2,#00H,B01;判断3秒是否结束SJMP N02;------1秒延时子程序-------N7:RETI T0_INT:MOV TL0,#9AH;给定时器T0送定时10ms的初值MOV TH0,#0F1HINC R4INC R5CJNE R5,#0FAH,T01;判断延时是否够一秒,不够则调用显示子程序MOV R5,#00H;R5清零DEC R3;倒计时初值减一DEC R2;报警初值减一 T01:ACALL DISP;调用显示子程序RETI;中断返回;------显示子程序------DISP: JNB P2.4,T02 DISP1:MOV B,#0AHMOV A,R3;R3中值二转十显示转换DIV ABMOV 79H,AMOV 7AH,B DIS:MOV A,79H;显示十位毕业设计MOV DPTR,#TABMOVC A,@A+DPTRMOV DPTR,#0002HMOVX @DPTR,AMOV DPTR,#0001HMOV A,#0F7HMOVX @DPTR,ALCALL DELAY DS2:MOV A,7AH;显示个位MOV DPTR,#TABMOVC A,@A+DPTRMOV DPTR,#0002HMOVX @DPTR,AMOV DPTR,#0001HMOV A,#0FBHMOVX @DPTR,ARET;------东西方向车流量检测程序------T03: MOV A,R3SUBB A,#00H;若绿灯倒计时完毕,不再检测车流量JZN3JB P2.0,T03INC R7CJNE R7,#64H,E1MOV R7,#00H;中断到100次则清零 E1:SJMP N22;------东西方向车流量显示程序------T02: MOV B,#0AH MOVA,R7;R7中值二转十显示转换DIV ABMOV 79H,AMOV 7AH,B DIS3: MOV A,79H;显示十位MOV DPTR,#TABMOVC A,@A+DPTRMOV DPTR,#0002HMOVX @DPTR,AMOV DPTR,#0001H毕业设计MOV A,#0F7HMOVX @DPTR,ALCALL DELAY DS4:MOV A,7AH;显示个位MOV DPTR,#TABMOVC A,@A+DPTRMOV DPTR,#0002HMOVX @DPTR,AMOV DPTR,#0001HMOV A,#0FBHMOVX @DPTR,ALJMP N7;------延时4MS子程序----------DELAY: MOV R1,#0AH LOOP: MOV R6,#64HNOP LOOP1: DJNZ R6,LOOP1DJNZ R1,LOOPRET;------字符表------TAB:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FHEND第二篇:单片机实现交通灯控制智能交通灯设计与实现基于单片机的智能交通灯控制系统的设计与实现,系统能够根据十字路口双车道车流量的情况控制交通讯号灯按特定的规律变化。

《PLC编程与应用(三菱)》项目二任务四十字路口红绿灯的 PLC 控制

《PLC编程与应用(三菱)》项目二任务四十字路口红绿灯的 PLC 控制

任务四 十字路口红绿灯的 PLC 控制
二、功能图程序向梯形图程序的转化
1、使用“启—保—停”电路模式的编程方法 例1:如图 2-4-12 所示为某组合机床的工作台动作示意图, 初始状态时停在左极限位置,限位开关SQ3被压下。按下启动按 钮SB,工作台的运动按照“快进—工进—快退—原位停止”的顺 序工作。快进时电磁阀YV1和YV2 同时通电,工进时YV2 单独 通电,快退时YV3 通电。试用M 指令编写流程图和PLC 程序。
的必要条件。
图 2-4-4 转换符号
任务四 十字路口红绿灯的 PLC 控制
一、顺序控制设计法
3、顺序功能图的构成规则 控制系统功能图的绘制必须满足以下规则: (1)、步与步不能直接相连,必须用转换分开。 (2)、转换与转换不能直接相连,必须用步分开。 (3)、步与转换、转换与步之间的连接 采用有向线段,从上向下画时, 可以省 略箭头;从下向上画时, 必须画上箭头 ,以表示方向。 (4)、一个功能图至少要有一个初始状 态, 在顺序功能图中一般应有由状态和 有向线段组成的闭环。 如图2-4-5 所示 为一个三步状态构成的顺序功能图。
图 2-4-2 状态的图形符号
任务四 十字路口红绿灯的 PLC 控制
一、顺序控制设计法
2、顺序功能图
(1)、步
①初始步
与系统的初始状态相对应的步称为初
始步,初始步是功能图运行的起点,一个控
制系统至少要有一个初始步。如图2-4-2
(b)所示。
②活动步
图 2-4-2 状态的图形符号
当系统正处于某一步所在的阶段时,该
步处于活动状态,称该步为“活动步”。
③与步对应的动作或命令 在每个稳定
的状态下,一般会有相应的动作。动作

Verilog实验报告交通灯

Verilog实验报告交通灯

Verilog实验报告---第四次交通灯班级:集电0802班:鹏学号:04086057序号:16一、规(1)具有开关功能:当reset=0时红绿灯关闭,使主支干道六个灯全灭;(2)具有四个功能:当reset=1且func=2’b00时,主干道和支路正常计数;且func=2’b01时,支干道一直绿灯,主干道一直红灯;且func=2’b10时,主干道一直绿灯,支干道一直红灯;且func=2’b11时,主干道和支干道一直黄灯闪;(3)计数器频率:运行频率2Hz计数器;(4)信号灯种类:红、黄、绿;(5)信号灯计执行时间关系:主干道:绿灯常亮+绿灯闪+黄灯=支干道:红灯常亮;此设计中:主干道:绿灯常亮=57s,T绿灯闪=3s,T黄灯亮=3s支干道:绿灯常亮=15s,T绿灯闪=3s,T黄灯亮=3s(6)信号灯到计时功能:信号灯预置后,开始执行2Hz计数器;(7)信号灯跳转功能:当各信号灯计时至T时在下一个时钟信号上升沿到来时自动转为下一状态;(8)信号灯各状态跳转关系:绿-黄-红-绿;二、输入输出定义reset,clk, func[1:0] ,green[1:0],red[1:0],yellow[1:0]信号名宽度输入/输出管脚描述reset 1 input L13 红绿灯总开关clk 1 input C9 freq:50MHz func 2 input N17/H18 控制红绿灯功能green[1] 1 output D11 主绿green[0] 1 output E11 支绿red[1] 1 output F11 主红red[0] 1 output F12 支红yellow[1] 1 output C11 主黄yellow[0] 1 output E12 支黄三、模块设计状态转移图:四、测试代码module frequency_divider_small(reset,clk,out); //重写一个小分频模块测试交通灯主模块功能input reset,clk;output out;reg [1:0] temp;reg out;always (posedge clk or negedge reset)if (!reset)temp<=2'b00;elsetemp<=(temp==2'b11)?2'b00:temp+2'b01;always (temp)out=(temp==2'b11);endmodulemodule test_traffic_light;reg reset,clk;reg [1:0] func;wire [1:0] green;wire [1:0] red;wire [1:0] yellow;traffic_lightsimulation(.reset(reset),.clk(clk),.func(func),.green(green),.red(red),.yellow(yellow));always #10 clk=~clk;initialbeginreset=0;clk=1;func=2'b00;#20 reset=1;#21000 func=2'b01;#10000 func=2'b10;#10000 func=2'b11;endendmodule波形:五、源代码module frequency_divider(reset,clk,out);//分频模块,把50MHz时钟分成半秒计时器input reset,clk;output out;reg [5:0] mol1,mol2;reg [6:0] mol3,mol4;reg out1,out2,out3,out;always (posedge clk or negedge reset)//把25000000分成40*40*125*125if(!reset)mol1<=6'd0;elsemol1<=(mol1==6'd39)?6'd0:mol1+6'd1;always (posedge clk or negedge reset)if(!reset)mol2<=6'd0;else if(out1)mol2<=(mol2==6'd39)?6'd0:mol2+6'd1;always (posedge clk or negedge reset)if(!reset)mol3<=7'd0;else if(out2)mol3<=(mol3==7'd124)?7'd0:mol3+7'd1;always (posedge clk or negedge reset)if(!reset)mol4<=7'd0;else if(out3)mol4<=(mol4==7'd124)?7'd0:mol4+7'd1;always (mol1 or mol2 or mol3 or mol4)beginout1=(mol1==6'd39);out2=((mol2==6'd39)&&out1);out3=((mol3==7'd124)&&out2);out=((mol4==7'd124)&&out3);endendmodulemodule traffic_light(reset,clk,func,green,red,yellow);//交通灯主模块input reset,clk;input [1:0] func;output [1:0] green,red,yellow;reg [1:0] green,red,yellow;reg [2:0] state;reg [6:0]t;wire in;parameter greentime1=6'd57;//主干道绿灯时间parameter greentime0=6'd27;//支干道绿灯时间parameter yellowtime=3'd3;//黄灯时间,绿灯闪时间frequency_divider fenpin(.reset(reset),.clk(clk),.out(in));//调用分频模块always (posedge clk or negedge reset)if(!reset)begint<=7'd0;state<=3'd1;green<=2'b00;red<=2'b00;yellow<=2'b00;endelseif(in)//分频器结果当主模块始能if(func==2'b00)//选择不同功能控制开关if(cnt==7'd0)case(state)//选择不同状态3'd1:begint<=greentime1<<1;state<=3'd2;green<=2'b10;red<=2'b01;yellow<=2'b00;end3'd2:begint<=yellowtime<<1;state<=3'd3;end3'd3:begint<=yellowtime<<1;state<=3'd4;green<=2'b00;red<=2'b01;yellow<=2'b10;end3'd4:begint<=greentime1<<1;state<=3'd5;green<=2'b01;red<=2'b10;yellow<=2'b00;endt<=yellowtime<<1;state<=3'd6;end3'd6:begint<=yellowtime<<1;state<=3'd1;green<=2'b00;red<=2'b10;yellow<=2'b01;endendcaseelsebegint<=cnt-7'd1;//倒计数,计数结束进入下一状态case(state)3'd3:green[1]<=cnt[0];//主干道绿灯闪3'd6:green[0]<=cnt[0];//支干道绿灯闪endcaseendelse if(func==2'b10)//主干道常绿,支干道常红begint<=0;state<=3'd1;green<=2'b10;red<=2'b01;yellow<=2'b00;endelse if(func==2'b01)//主干道常红,支干道常绿begint<=0;state<=3'd1;green<=2'b01;red<=2'b10;yellow<=2'b00;endelse if(func==2'b11)//主干道,支干道黄灯一直闪begint<=0;state<=3'd1;green<=2'b00;yellow[1]<=~yellow[1];yellow[0]<=~yellow[1];endendmodule。

交通灯控制系统C程序代码

交通灯控制系统C程序代码
delay(100); //延时
i=v%100/10; //暂存十位
P0=led_seg_code[i];
P2=0xfd;
delay(100); //延时
-----------
void timer1() interrupt 3 //T1中断
{ T1_cnt++;
EW_red=1 ;//东西方向红灯
break;
}
}
}
}
//-------------------------
main()
{//初始化各变量
cnt_sn=init_sn[0];
cnt_ew=init_ew[0];
T1_cnt=0;
state_val_sn=0; //启动后,默认工作在序号为1 的状态
if (state_val_ew>2) state_val_ew=0;
cnt_ew=init_ew[state_val_ew];
switch (state_val_ew) //根据状态值,刷新各信号灯的状态
{ case 0: EW_green=1 ;//东西方向绿灯
EW_yellow=1;//东西方向黄灯
//晶振:11.0592M T1-250微秒溢出一次
/*变量的定义:
show_val_sn,show_val_ew: 显示的值0-59
state_val_sn,state_val_ew: 状态值 南北方向0-绿灯亮;1-黄灯亮;2-红灯亮
T1_cnt: 定时器计数溢出数
cnt_sn,cnt_ew: 倒计时的数值
init_sn[3],init_ew[3] 倒计时

交通信号灯控制器代码及说明

交通信号灯控制器代码及说明

课程设计报告课程名称: FPGA现代数字系统设计设计名称:交通信号灯控制器姓名: * * *学号: ********** 专业:通信指导教师:* * *起止日期: 2010.12.25 - 2011.1.9课程设计任务书设计名称:一、设计目的和意义通过应用Verilog语言在QuartusⅡ软件平台上设计交通信号灯控制器,并借助硬件来测试仿真效果。

通过课程设计,熟悉硬件编程语言的应用,特别是有限状态机的灵活使用,为以后进一步的学习实践打下良好的基础。

二、设计原理(1) 主、支干道用传感器检测车辆到来情况,实验电路用逻辑开关代替。

(2) 选择1HZ时钟脉冲作为系统时钟。

(3) 45s、25s、5s定时信号可用顺计时,也可用倒计时,计时起始信号由主控电路给出,每当计满所需时间,启、闭三色信号灯,并启动另一计时电路。

(4) 交通灯状态变化如表1及图1所示:表1:交通灯状态图图1:交通灯状态图(5) 交通灯设计输入信号4个:CLK(时钟),EN(使能),EMERGENCY(紧急),BCHECK(检测) ;输出信号4个:LAMPA(主干道信号灯),LAMPB(支干道信号灯),ACOUNT(主干道计数器),BCOUNT(支干道计数器)。

交通灯控制原理如图2所示。

图2:交通灯原理图三、详细设计步骤(1) 确定4个输入信号与4个输出信号,具体见图2;(2) 将50MHZ时钟分频为1MHZ;(3) 设计红黄绿3中信号灯切换的时间及顺序;(4) 设计支路检测状态下的信号灯切换;(5) 设计紧急(EMERGENCY)状态下信号灯的切换;(6) 程序使用3always块[1],详细代码如下:module traffic_control(CLK,EN,EMERGENCY,BCHECK,LAMPA,LAMPB,ACOUNT,BCOUNT);output[2:0] ACOUNT,BCOUNT;output[2:0] LAMPA,LAMPB;reg clk1;input CLK,EN,EMERGENCY,BCHECK;reg[2:0] numa,numb;reg tempa,tempb;reg[25:0]count;reg[2:0] counta,countb;reg[2:0] ared,ayellow,agreen,aleft,bred,byellow,bgreen,bleft;reg[2:0] LAMPA,LAMPB;/* 信号定义与说明:CLK:为同步时钟;EN:使能信号,为1 的话,则控制器开始工作;LAMPA:控制A 方向四盏灯的亮灭;其中,LAMPA0~LAMPA2,分别控制A 方向的绿灯、黄灯和红灯;LAMPB:控制B 方向四盏灯的亮灭;其中,LAMPB0 ~ LAMPB2,分别控制B 方向的绿灯、黄灯和红灯;ACOUNT:用于A 方向灯的时间显示,8 位BCOUNT:用于B 方向灯的时间显示,8 位*/always @(posedge CLK ) //将50MHZ时钟分频为1MHZbeginif(count==49999999)begincount<=0;clk1<=~clk1;endelsecount<=count+1;endassign ACOUNT=numa;assign BCOUNT=numb;always @(EN )if(!EN)beginared <=6;ayellow <=2;agreen <=4;bred <=6;byellow <=2;bgreen <=4;endalways @(posedge clk1)//该进程控制A 方向beginif(EMERGENCY) //EMERGENCY高电平有效,手动控制beginnuma<=0;LAMPA<=4;counta<=0;tempa<=0;endelse if(EN)beginif(!tempa)//亮灯begintempa<=1;case(counta)//控制亮灯的顺序0: begin numa<=agreen; LAMPA<=1; counta<=1; end1: begin numa<=ayellow; LAMPA<=2; counta<=2; end2: begin numa<=ared; LAMPA<=4; counta<=0; enddefault: LAMPA<=4;endcaseendelse //倒计时beginif(numa>2) numa<=numa-1;if(numa==2) begin numa<=1;tempa<=0;if ((BCHECK) &&(counta==2)) counta<=0;end/*if(numa>1)if(numa[3:0]==0)beginnuma[3:0]<=4'b1001;numa[7:4]<=numa[7:4]-1;endelse numa[3:0]<=numa[3:0]-1;if (numa==2)begin tempa=0;if ((!BCHECK )&& (counta==1)) counta<=0;end*/endendelsebeginLAMPA<=3'b100;counta<=0; tempa<=0;endendalways @(posedge clk1)//该进程控制B 方向的四种灯beginif(EMERGENCY) //EMERGENCY高电平有效,手动控制beginnumb<=0;LAMPB<=4;countb<=0;tempb<=0;endelse if (EN)beginif(!tempb)begintempb<=1;case (countb)0: begin numb<=bred; LAMPB<=4; countb<=1; end1: begin numb<=bgreen; LAMPB<=1; countb<=2; end2: begin numb<=byellow; LAMPB<=2; countb<=0; enddefault: LAMPB<=4;endcaseendelsebeginif(numb>2) numb<=numb-1;if(numb==2) begin numb<=1;tempb<=0;if ((BCHECK )&& (countb==1)) countb<=0;end/*if(numb>1)if(!numb[3:0])beginnumb[3:0]<=9;numb[7:4]<=numb[7:4]-1;endelse numb[3:0]<=numb[3:0]-1;if(numb==2)begin tempb=0;if ((!BCHECK) && (countb==1)) countb<=0;end*/endendelsebeginLAMPB<=3'b100;tempb<=0; countb<=0;endendendmodulemodule四、结果分析程序仿真效果如图3和图4所示:为观察方便,将红黄绿灯显示时间分别缩短,图中[4]表示红灯亮,[2]表示黄灯亮,[1]表示绿灯亮,BCHECK信号代表支干道检测状况,低电平表示检测到有车辆正常通过,EMERGENCY代表紧急状态信号,低电平表示紧急信号无效。

单片机课程设计交通灯设计

单片机课程设计交通灯设计

目录一、设计目的 (2)二、设计任务和要求 (2)三、设计原理分析 (2)四、硬件资源及其分配 (3)五.硬件图 (6)六、程序框图 (7)七、程序 (8):八、调试运行 (13)九、仿真截图 (13)十、设计心得体会 (15)一、设计目的1、通过单片机课程设计,熟练掌握汇编语言的编程方法,将理论联系到实践中去,提高我们的动脑和动手的能力。

2、通过交通信号灯控制系统的设计,掌握定时/计数器及中断的使用方法,和简单程序的编写,最终提高我们的逻辑抽象能力。

二、设计任务和要求任务:设计一个能够控制十二盏交通信号灯的模拟系统要求:利用单片机的定时器定时,令十字路口的红绿灯交替点亮和熄灭,并用LED灯显示倒计时间。

1、东西绿灯亮,南北红灯亮2、黄灯亮3、东西红灯亮,南北绿灯亮三、设计原理分析1、首先了解实际交通灯的变化情况和规律。

假设一个十字路口如上图所以,为东南西北走向。

初始状态0:为东西绿灯亮,南北红灯亮;然后转状态1:东西绿灯亮黄灯亮,南北红灯亮黄灯亮;过后转状态2:东西红灯亮,南北绿灯亮;再转状态3:东西红灯亮黄灯亮,南北绿灯亮黄灯亮。

一段时间后,又循环至状态0。

中间可通过中断按钮产生中断,跳入中断程序执行中断。

2、对于交通信号灯来说,应该有东西南北共四组灯,但由于同一道上的两组的信号灯的显示情况是相同的,所以只要用两组就行了,因此,采用单片机内部的I/O口上的P1口中的6个引脚即可来控制6个信号灯。

3、通过编写程序,实现对发光二极管的控制,来模拟交通信号灯的管理。

每延时一段时间,灯的显示情况都会按交通灯的显示规律进行状态转换。

4、通过延时时间送显,可以在原有的交通信号灯系统的基础上,增添其倒计时间的显示功能,实现其功能的扩展。

5.通过脉冲中断编写中断程序,可实现中断。

四、硬件资源及其分配主要用到的硬件:P1口、P3口、LED数码管、LED发光二级管、定时器T0硬件分配:2、P3口中的P3.0(RXD)和P3.1(TXD)作特殊用途,数据(倒计时时间)从RXD端输入,TXD端输出。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

//功能:模拟交通灯控制C51参考程序
具体实现功能:
1、正常时信号灯控制:
(1)初始状态东西南北全为红灯(5s);
(2)东西绿灯、南北红灯(10s);
(3)东西绿灯闪烁3次,南北红灯;
(4)东西黄灯、南北红灯(2s);
(5)东西红灯、南北绿灯(10s);
(6)东西红灯,南北绿灯闪烁3次;
(7)东西红灯,南北黄灯(2s);
(8)转(2)。

2、特殊情况下,东西方向绿灯放行(5s)
3、紧急情况下,如有急救车通过时,东西和南北两个方向的交通灯全为红灯(10s),急救车通过后恢复正常信号。

紧急情况优先级高于特殊情况。

4、其他提高部分:实现智能交通灯控制(略,自行考虑并编写)
(1)各路口红绿灯点亮时间可调整;
(2)数码管显示各路口的点亮时间并作每秒减“1”操作;
(3)左转灯设计。

(4)自己设想一些特殊情况并加以处理。

分析:
按键S1、S2模拟紧急情况和特殊情况的发生,当S1、S2为高电平(不按按键)时,表示正常情况。

当S1为低电平(按下按键)时,表示紧急情况,将S1信号接至INT0脚(P3.2)即可实现外部中断0的中断申请。

当S2为低电平(按下按键)时,表示特殊情况,将S2信号接至INT1脚(P3.3)即可实现外部中断1的中断申请。

程序设计:
由上述流程图,程序需要多个不同延时时间,2s、5s、10s等,假定信号灯闪烁时亮灭时间各为0.5s,则可将0.5s延时作为基本的延时时间。

#include <reg51.h>
unsigned char t0, t1; //定义全局变量,用来保存延时时间循环次数
//函数名:delay0_5s1
//函数功能:用T1的方式1编制0.5秒延时程序,假定系统采用12MHz晶振,定
// 时器1、工作方式1定时50ms,再循环10次即可定时到0.5秒
//形式参数:无
//返回值:无
void delay0_5s1( )
{
for(t0=0;t0<0x0a;t0++) // 采用全局变量t0作为循环控制变量
{
TH1=0x3c; // 设置定时器初值
TL1=0xb0;
TR1=1; // 启动T1
while(!TF1); // 查询计数是否溢出,即定时50ms时间到,TF1=1
TF1=0; // 50ms定时时间到,将定时器溢出标志位TF1清零
}
}
//函数名:delay_t1
//函数功能:实现0~127.5秒的延时
//形式参数:unsigned char t;
// 延时时间为0.5秒×t(0~255)
//返回值:无
void delay_t1(unsigned char t)
{
for(t1=0;t1<t;t1++) // 采用全局变量t0作为循环控制变量
delay0_5s1();
}
//函数:int_0
//函数功能:外部中断0中断函数,紧急情况处理,当CPU响应外部中断0的中断请求时,// 自动执行该函数,实现两个方向红灯同时亮10秒
//形式参数:无
//返回值:无
void int_0( ) interrupt 0 // 紧急情况中断
{
unsigned char i,j,k,l,m;
i=P1; // 保护现场,暂存P1口、t0、t1、TH1、TH0
j=t0;
k=t1;
l=TH1;
m=TL1;
P1=0xdb; // 两个方向都是红灯
delay_t1(20); // 延时10秒
P1=i; // 恢复现场,恢复进入中断前P1口、t0、t1、TH1、TH0
t0=j;
t1=k;
TH1=l;
TL1=m;
}
//函数:int_1
//函数功能:外部中断1中断函数,特殊情况处理,当CPU响应外部中断1的中断请求时,// 自动执行该函数,实现东西方向放行5秒
//形式参数:无
//返回值:无
void int_1( ) interrupt 2 // 特殊情况中断
{
unsigned char i,j,k,l,m;
EA=0; //关中断
i=P1; // 保护现场,暂存P1口、t0、t1、TH1、TH0
j=t0;
k=t1;
l=TH1;
m=TH0;
EA=1; // 开中断
P1=0xf3; // 东西方向放行
delay_t1(10); // 延时5秒
EA=0; // 关中断
P1=i; // 恢复现场,恢复进入中断前P1口、t0、t1、TH1、TH0
t0=j;
t1=k;
TH1=l;
TH0=m;
EA=1; //开中断
}
void main( ) //主函数
{
unsigned char k;
TMOD=0x10; // T1工作在方式1
EA=1; // 开放总中断允许位
EX0=1; // 开外部中断0中断允许位
IT0=1; // 设置外部中断0为下降沿触发
EX1=1; // 开外部中断1中断允许位
IT1=1; // 设置外部中断1为下降沿触发
P1=0xdb; // 两个方向都是红灯
delay_t1(10); // 延时5秒
while(1)
{
P1=0xf3; // A绿灯,B红灯,延时10秒
delay_t1(20);
for(k=0;k<3;k++) // A绿灯闪烁3次
{
P1=0xf3;
delay0_5s1(); // 延时0.5秒
P1=0xfb;
delay0_5s1(); // 延时0.5秒
}
P1=0xeb; // A黄灯,B红灯,延时2秒
delay_t1(4);
P1=0xde; // A红灯,B绿灯,延时10秒
delay_t1(20);
for(k=0;k<3;k++) // B绿灯闪烁3次
{
P1=0xde;
delay0_5s1(); // 延时0.5秒
P1=0xdf;
delay0_5s1(); // 延时0.5秒
}
P1=0xdd; // A红灯,B黄灯,延时2秒
delay_t1(4);
}
}。

相关文档
最新文档