课程设计-C51交通灯设计_第1页
课程设计-C51交通灯设计_第2页
课程设计-C51交通灯设计_第3页
课程设计-C51交通灯设计_第4页
课程设计-C51交通灯设计_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

1、* 大 学本科综合课程设计报告交通灯设计题 目 _指导教师_辅导教师_学生姓名_学生学号_信息科学技术_院(部)_ 专业_班2017 1 6_年 _月 _日目录一引言31.1设计目的31.2功能需求分析3二应用器件简介32.1 STC80C51单片机32.2 定时器功能简介72.2.1定时器介绍72.2.2定时器工作原理82.2.3定时器的设置82.3 动态数码管内部电路102.4 交通灯内部电路11三实验113.1实验代码及注释113.2实验连线及图片203.3程序下载21四心得体会21五参考文献22一引言交通灯有两种,给机动车看的叫机动车灯,通常指由红、黄、绿(绿为蓝绿)三种颜色灯组成用来

2、指挥交通通行的信号灯。绿灯亮时,准许车辆通行,黄灯黄闪时,已越过停止线的车辆可以继续通行;没有通过的应该减速慢行到停车线前停止并等待,红灯亮时,禁止车辆通行。给行人看的叫人行横道灯,通常指由红、绿(绿为蓝绿)二种颜色灯组成用来指挥交通通行的信号灯,红灯停,绿灯行。1.1设计目的进一步了解C语言和单片机的使用,了解其好处和可用性,掌握基本的程序设计过程和技巧,掌握基本的分析问题、利用计算机求解问题的能力,具备初步的高级语言程序设计能力。为后续毕业设计打下坚实基础。 通过该交通灯的设计,培养独立思考、综合运用所学有关相应知识的能力,更好地巩固相关课程学习的内容,强化上机动手编程能力,体验理论与实践

3、相结合的过程。1.2功能需求分析根据红黄绿灯正确的指引人们穿过十字路口,保证交通的流畅。二应用器件简介2.1 STC80C51单片机 80C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROMFlash Programmable and Erasable Read Only Memory)的低电压、高性能CMOS8位微处理器,俗称单片机。单片机的可擦除只读存储器可以反复擦除100次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的89C51是一种高效微控制器,89C205

4、1是它的一种精简版本。89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。主要特性与MCS-51 兼容4K字节可编程闪烁存储器寿命:1000写/擦循环数据保留时间:10年全静态工作:0Hz-24MHz三级程序存储器锁定128*8位内部RAM32可编程I/O线2个16位定时器/计数器5个中断源可编程串行通道低功耗的闲置和掉电模式片内振荡器和时钟电路管脚说明VCC:供电电压。GND:接地。P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的低八位。在FIASH

5、编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。P1口:P1口是一个内部上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为低八位地址接收。P2口:P2口是一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存

6、储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流,这是由于上拉的缘故。P3口也可作为AT89C51的一些特殊功能口,如下表所示:管脚 备选功能P3.0 RXD(串行输入口)P3.1 TXD(串行输出口)P3.2 /INT0

7、(外部中断0)P3.3 /INT1(外部中断1)P3.4 T0(记时器0外部输入)P3.5 T1(记时器1外部输入)P3.6 /WR(外部数据存储器写选通)P3.7 /RD(外部数据存储器读选通)P3口同时为闪烁编程和编程校验接收一些控制信号。RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部

8、数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。/EA/VPP:当/EA保持低电平时,则在此期间为外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器读取外部ROM数据。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,单片机读取内

9、部程序存储器。(扩展有外部ROM时读取完内部ROM后自动读取外部ROM)。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2:来自反向振荡器的输出。振荡器XTAL1和XTAL2分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL2应不接。由于输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。芯片擦除整个PEROM阵列和三个锁定位的电擦除可通过正确的控制信号组合,并保持ALE管脚

10、处于低电平10ms 来完成。在芯片擦操作中,代码阵列全被写“1”且在任何非空存储字节被重复编程以前,该操作必须被执行。此外,AT89C51设有稳态逻辑,可以在低到零频率的条件下静态逻辑,支持两种软件可选的掉电模式。在闲置模式下,CPU停止工作。但RAM,定时器,计数器,串口和中断系统仍在工作。在掉电模式下,保存RAM的内容并且冻结振荡器,禁止所用其他芯片功能,直到下一个硬件复位为止。结构特点8位CPU;片内振荡器和时钟电路;32根I/O线;外部存贮器寻址范围ROM、RAM64K;2个16位的定时器/计数器;5个中断源,两个中断优先级;全双工串行口;布尔处理器;图2-1 51单片机的结构框图2.

11、2 定时器功能简介2.2.1定时器介绍:80c51单片机内有两个可编程的定时/计数器T0、T1。它们是一个16位计数器,分别由一个高8位和一个低8位的寄存器组成的。TMOD是定时/计数器的工作方式寄存器,确定工作方式和功能;TCON是控制寄存器,控制T0、T1的启动和停止及设置溢出标志图2-2 TCON与TMOD寄存器的内部结构2.2.2定时器工作原理定时/计数器实质上是一个加1计数器。它随着计数器的输入脉冲进行自加1,也就是每来一个脉冲,计数器就自动加1,,当加到计数器为全1时,再输入一个脉冲就使计数器回零,且计数器的溢出使相应的中断标志位置1,向CPU发出中断请求(定时/计数器中断允许时)

12、。如果定时/计数器工作于定时模式,则表示定时时间已到;如果工作于计数模式,则表示计数值已满。2.2.3定时器的设置图2-3 TMOD设置方式GATE:门控制0时:仅有运行控制位TRx来控制定时/计数器的开启。1时:由TRx和外部中断脉冲计数。(用于计算外部中断负跳变 的次数)C/T:计数器模式和定时器模式选择0时:选择定时器模式1时:选择为计数器模式图2-4 定时器工作方式图2-5 TCON设置方式IT0和IT1是设置外部中断的触发方式。当其为0时,为低电平触发方式当其为1时,为负跳变触发方式。IE0和IE1是外部中断标志位其他的是定时/计数器的控制。TF0和TF1是定时器的中断标志。TR1和

13、TR0是打开相应的定时器2.3 动态数码管内部电路图2-6 静态数码管结构图2.4 交通灯内部电路图2-7 交通灯结构图三实验3.1实验代码及注释/* 实验名 : 动态显示数码管实验* 使用的IO : * 实验效果 : 数码管显示76543210。* 注意 :当位选用P1口的时候注意可能会有一位不亮,那么调整J21*/#include/-定义使用的IO口-/#define GPIO_DIG P0#define GPIO_PLACE P1#define GPIO_TRAFFIC P2sbit RED10 = P20; /上人行道红灯sbit GREEN10 = P21; /上人行道绿灯sbit

14、RED11 = P22;sbit YELLOW11= P23;sbit GREEN11 = P24;sbit RED00 = P30;/右人行道红灯sbit GREEN00 = P31;/右人行道绿灯sbit RED01 = P25;sbit YELLOW01= P26;sbit GREEN01 = P27;/-定义全局变量-/unsigned char code DIG_PLACE8 = 0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f;/位选控制 查表的方法控制unsigned char code DIG_CODE17 = 0x3f,0x06,0x5b,0x4

15、f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;/0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的显示码unsigned char DisplayData8; /用来存放要显示的8位数的值unsigned char Time, Second; /用来存放定时时间/-声明全局函数-/void DigDisplay(); /动态显示函数void Timer0Cofig(void);/* 函 数 名 : main* 函数功能 : 主函数* 输 入 : 无* 输 出 : 无*/void main(void)Se

16、cond = 1;Timer0Cofig();while(1)if(Second = 70)Second = 1;/-宝田路通行,30秒-/if(Second 31)DisplayData0 = 0x00;DisplayData1 = 0x00;DisplayData2 = DIG_CODE(30 - Second) % 100 / 10;DisplayData3 = DIG_CODE(30 - Second) %10;DisplayData4 = 0x00;DisplayData5 = 0x00;DisplayData6 = DisplayData2;DisplayData7 = Displ

17、ayData3;DigDisplay();/-宝田路通行-/GPIO_TRAFFIC = 0xFF; /将所有的灯熄灭RED00 = 1;GREEN00 = 1;GREEN11 = 0; /宝田路绿灯亮GREEN10= 0; /宝田路人行道绿灯亮RED01 = 0; /前进路红灯亮RED00 = 0; /前进路人行道红灯亮/-黄灯等待切换状态,5秒-/else if(Second 36) DisplayData0 = 0x00;DisplayData1 = 0x00;DisplayData2 = DIG_CODE(35 - Second) % 100 / 10;DisplayData3 = D

18、IG_CODE(35 - Second) %10;DisplayData4 = 0x00;DisplayData5 = 0x00;DisplayData6 = DisplayData2;DisplayData7 = DisplayData3;DigDisplay();/-黄灯阶段-/GPIO_TRAFFIC = 0xFF; /将所有的灯熄灭RED00 = 1;GREEN00 = 1;YELLOW11 = 0; /宝田路黄灯亮RED10= 0; /宝田路人行道红灯亮YELLOW01 = 0; /前进路红灯亮RED00 = 0; /前进路人行道红灯亮/-前进路通行-/else if(Second

19、66) DisplayData0 = 0x00;DisplayData1 = 0x00;DisplayData2 = DIG_CODE(65 - Second) % 100 / 10;DisplayData3 = DIG_CODE(65 - Second) %10;DisplayData4 = 0x00;DisplayData5 = 0x00;DisplayData6 = DisplayData2;DisplayData7 = DisplayData3;DigDisplay();/-黄灯阶段-/GPIO_TRAFFIC = 0xFF; /将所有的灯熄灭RED00 = 1;GREEN00 = 1

20、;RED11 = 0; /宝田路红灯亮RED10 = 0; /宝田路人行道红灯亮GREEN01 = 0; /前进路绿灯亮GREEN00 = 0; /前进路人行道绿灯亮/-黄灯等待切换状态,5秒-/else DisplayData0 = 0x00;DisplayData1 = 0x00;DisplayData2 = DIG_CODE(70 - Second) % 100 / 10;DisplayData3 = DIG_CODE(70 - Second) %10;DisplayData4 = 0x00;DisplayData5 = 0x00;DisplayData6 = DisplayData2;

21、DisplayData7 = DisplayData3;DigDisplay();/-黄灯阶段-/GPIO_TRAFFIC = 0xFF; /将所有的灯熄灭RED00 = 1;GREEN00 = 1;YELLOW11 = 0; /宝田路黄灯亮RED10= 0; /宝田路人行道红灯亮YELLOW01 = 0; /前进路红灯亮RED00 = 0; /前进路人行道红灯亮/* 函 数 名 : DigDisplay* 函数功能 : 使用数码管显示* 输 入 : 无* 输 出 : 无*/void DigDisplay()unsigned char i;unsigned int j;for(i=0; i8; i+)GPIO_PLACE = DIG_PLACEi; /发送位选P1GPIO_DIG = DisplayDatai; /发送段码P0j = 10; /扫描间隔时间设定while(j-);GPIO_DIG = 0x00; /消隐/* 函 数 名 : Timer0Cofig* 函数功能 : 配置定时器* 输 入 : 无* 输 出 : 无*/void Timer0Cofig(void)TMOD = 0x01; /定时器0选择工作方式1 TH0 = 0x3C; /设置初始值,定时50MS TL0 = 0xB0; EA = 1; /

温馨提示

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

评论

0/150

提交评论