单片机交通灯方案_第1页
单片机交通灯方案_第2页
单片机交通灯方案_第3页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

1、目录1. 课设题目12. 设计环境13. 设计要求14. 设计相关知识 14.1硬件设计 14.2软件应用25. 主程序设计 36. 系统实现14乙仿真运行148. 设计心得.6 19. 参考文献6 11. 设计题目:基于51单片机的交通灯设计2. 设计环境1. 装有 Windows系统、keil C51v6.12中文完全版和 proteus7.5 仿真环境的PC机一台。2. AT89C51单片机最小实现电路及配套发光二极管电路。3. 设计要求1. 编程要求:主程序利用C语言编写。2. 实现功能:使用AT89C5仲片机控制4个方向的交通灯 红、黄、绿)并用数 码管显示其时间。3. 实验现象:状

2、态一:主干道、支干道均亮红灯 5秒;状态二:主干道亮绿灯30秒、支干道亮红灯;状态三:主干道绿灯闪3次转亮黄灯、支干道亮红灯3秒;状态四:主干道亮红灯、支干道亮绿灯 25秒;状态五:主干道亮红灯、支干道绿灯闪 3次转亮黄灯3秒;返回到第二个状态4. 设计相关知识4.1硬件设计1.AT89C51 简介:AT89C51是一种带4K字节闪存可编程可擦除只读存储器的低电压、高性 能CMOS 8位微处理器。它是一种带 2K字节闪存可编程可擦除只读存储器的 单片机。AT89C51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵 活性高且价廉的方案。2. 2位8段数码管工作原理:2位8段数码管电路采用“

3、共阴”连接,阴极公共端 <COM由晶体管推动。如图4-3所示:段码和位码,段码即段选信号 SEG,它负责数码管显示 的内容,图中ag、dp组成的数据<a为最低位,dp为最高 位)就是段码。位码即位选信号 DIG,它决定哪个数码管工作,哪个数码管不工作。当需要某一位数码管显示数字时,只需要先选中这位 数码管的位信号,再给显示数字的段码4.2软件应用 1.Proteus7.5 简介:Proteus软件不仅具有EDA工具软件的仿真功能,还能仿真单片机及外围 器件Proteus从原理图布图、代码调试到单片机与外围电路协同仿真,一键切 换到PCB设计,真正实现了将电路仿真软件、PCB设计软件

4、和虚拟模型仿真软件三合一的设计平台,其处理器模型支持 8051、 HC11、 PIC10/12/16/18/24/30/DsPIC33、AVR ARM 8086 和 MSP430等。在编译方面,它支持IAR、Keil和MPLA爵多种编译器。2. Keil C51 开发系统简介:Keil C51是51系列兼容单片机C语言软件开发系统,与汇编相比,C语言 在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。KeilC51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面,生成的目标代码效率非常之高,多数语句生成的汇编代码紧凑,容易理解。在开发大型软件时更能体现其高级

5、语言的优势5. 主程序设计11.0952M晶振#include<reg51.h>/ 头文件#include<intrins.h>/ 头文件#define uchar unsigned char/ 宏定义#define uint unsigned int/ 宏定义sbit RED ZHU = P1A0。sbit YELLOW_ZHU = PM1 。sbit GREEN_ZHU = P1A2 。 sbit RED_ZHI = P1A3 。 sbit YELLOW_ZHI = P1A4 。 sbit GREEN_ZHI = P1A5 。uint aa, bai,shi,ge,

6、bb 。 / 定义变量/* 数码管显示 0-9*/uinttable=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f/* 子函数声明 */void delay(uint z> 。void delay0(uint z>。/void init(uint a>。void display(uint ge,uint shi>。void xtimer0(> 。voidinit1(>。voidinit2(>。voidinit3(>。voidinit4(>。voidinit5(>。void xint

7、1(> 。code。主函数 *void xint0(> 。 void LED_ON(> 。 void LED_OFF(> 。 /* void main(>P0=0XFF。P1=0xFF。P2=0xFF。EA=1。/ 打开外部中断EX1=1。/ 允许外部中断 1 中断IT仁0。/INTO为沿触发方式init1(> 。while(1>init2(>。 / 第 2 个状态init3(>。 /第 3 个状态init4(>。 /第 4 个状态init5(>。 /第 5 个状态5Svoid init1(>/ 第一个状态:主干道、支干道

8、均亮红灯 uint temp 。temp=6。 / 变量赋初值TMOD=0xOI定时器0工作于方式1TH0=0x4c。TL0=0x00。 / 定时器赋初值EA=1。 / 开外部中断ET0=1。/ 开定时中断TR0=1。/ 开定时器 0 while(1>RED_ZHU=0/第一个状态主干道、支干道均亮红灯 5SRED_ZHI=0GREEN_ZHUMGREEN_ZHI=1YELLOW_ZHU=1YELLOW_ZHI=1 if(aa=20>/ 定时 20*50MS=1Saa=0。/ 定时完成一次后清 0 temp- 。/ 变量自增/delay(10> 。 if(temp>25

9、0>/ 定时 100Stemp=6。/ 变量清 0 break 。shi=temp%100/10。/ 显示十位ge=temp%10。/ 显示个位display(ge,shi> 。void init2(>第二个状态:主干道亮绿灯 30S支干道亮红灯uint temp 。temp=31。/ 变量赋初值TMOD=0x0。/定时器0工作于方式1TH0=0x4c。TL0=0x00。 / 定时器赋初值EA=1。 / 开外部中断ET0=1。 / 开定时中断TR0=1。 / 开定时器 0while(1>RED_ZHU=1RED_ZHI=0GREEN_ZHU=0GREEN_ZHI=1YE

10、LLOW_ZHU=1/第二个状态:主干道亮绿灯30S、支干道亮红灯YELLOW_ZHI=1 if(aa=20>/ 定时 20*50MS=1Saa=0。/ 定时完成一次后清 0temp- 。/ 变量自增 if(temp=3>/ 定时 100Stemp=30。/ 变量清 0break 。shi=temp%100/10。/ 显示十位 ge=temp%10。/ 显示个位display(ge,shi>3Svoid init3(> / 第三个状态:主干道绿灯闪 3 次转亮黄灯、支干道亮红灯 uint temp 。temp=4。 / 变量赋初值TMOD=0x0。/定时器0工作于方式1

11、TH0=0x4c。TL0=0x00。 / 定时器赋初值EA=1。 / 开外部中断ET0=1。 / 开定时中断TR0=1。 / 开定时器 0while(1>RED_ZHI=0GREEN_ZHU=1/YELLOW_ZHU=YELLOW_ZHUif(aa=20>/ 定时 20*50MS=1Saa=0。 / 定时完成一次后清 0 temp- 。 / 变量自增YELLOW_ZHU=YELLOW_ZHUif(temp>200>/ 定时 100Stemp=4_ / 变量清 0break _shi=temp%1 00/1 0 _ / 显示十位ge=temp%10。/ 显示个位displ

12、ay(ge,shi> 。void init4(>/ 第四个状态:主干道亮红灯、支干道亮绿灯 25Suint temp 。temp=26。/ 变量赋初值TMOD=0x0。/定时器0工作于方式1TH0=0x4c。TL0=0x00。 / 定时器赋初值EA=1。 / 开外部中断ET0=1。 / 开定时中断TR0=1。 / 开定时器 0while(1>RED_ZHU=0RED_ZHI=15SYELLOW_ZHU=1/ 第一个状态主干道、支干道均亮红灯GREEN_ZHI=0if(aa=20>/ 定时 20*50MS=1Saa=0。/ 定时完成一次后清 0temp- 。/ 变量自增

13、if(temp=3>/ 定时 100S temp=25。/ 变量清 0break 。shi=temp%100/10。/ 显示十位 ge=temp%10。/ 显示个位display(ge,shi> 。void init5(>/ 第五个状态:主干道亮红灯、支干道绿灯闪 3 次转亮黄灯 3Suint temp 。temp=4。 / 变量赋初值TMOD=0x0。/定时器0工作于方式1TH0=0x4c。TL0=0x00。 / 定时器赋初值EA=1。 / 开外部中断ET0=1。 / 开定时中断TR0=1。 / 开定时器 0while(1>RED_ZHI=1RED_ZHU=0GREE

14、N_ZHU=1GREEN_ZHI=1/YELLOW_ZHI=YELLOW_ZHIif(aa=20>/ 定时 20*50MS=1Saa=0。/ 定时完成一次后清 0 temp- 。/ 变量自增YELLOW_ZHI=YELLOW_ZHIif(temp>200>/ 定时 100S temp=4。 / 变量清 0break 。shi=temp%100/10。/ 显示十位ge=temp%10。/ 显示个位display(ge,shi> 。/* 显示子函数 */void display(uint ge,uint shi>P0=0xfd。P2=tableshi 。/ 显示十位d

15、elay0(5> 。P0=0xfe。P2=tablege 。/ 显示个位delay0(5> 。void xint0(> interrupt 2 /外部中断1,这里用2是INT1的优先级为0LED_ON(>。void LED_ON(>/ 外部中断 0显示子程序RED_ZHI=0RED_ZHU=0GREEN_ZHI=1GREEN_ZHU=1YELL0W_ZHI=1 YELLOW_ZHU=1 delay0(1000> 。return 。/* 定时中断子函数 */void xtimer0(> interrupt 1TH0=0x4c。TL0=0x00。aa+。/

16、* 延时子函数 */void delay0(uint z>uint i,j 。for(i=0 。 i<z 。 i+>for(j=0 。 j<110。 j+>。/* 500ms 延时函数 晶振:11.0592MHz */void delay(unsigned char j>unsigned char k 。unsigned int i 。for( 。 j>0 。 j->for(i=1250i>0 。 i->k>0。k-> o.< 丨D6匚1$LED-G P!ITMy TECTaD1L£b-HED-TECT*f

17、or(k=1806. 系统实现1.使用keil C 51 编写程序;2将编好的程序“ .C ”文件用Keil C 51转换成“ .hex ”文件;3. 画出设计系统仿真图;3. 打开proteus7.5,将画好的仿真图载入,鼠标右击图中的51单片机选择“编辑属性”,在Program File中载入之前的“ .hex ”文件,再点击“调试”中的“开始”或点击软件左下角的“卜”,即仿真开始运行;4. 观察运行现象是否与设计结果相符;5. 确定设计后,按图焊接硬件电路;6. 测试硬件电路。7. 仿真运行D6gjr ,卜*2 CM 盹网 P73QM9 RW11 FIIAIJ FZ»I3 P2

18、SAH P21SIH-FDOCa FD IMDIFD2AE>Z Hl JANH14ADdHJMT5XXT A Li亠2fI-aT©CT>A'raKvi TB«T-LED-yBllDM -sTBCih-占8 孟LCt-flCDV&T -eTitCD- -T -lTV> i>TEJ2-D1UED-HED 'iTEKD-LE&-Ht:. rT&T-LEIM7HEEflLEfr-YELUWI :-FT-D5D4Cl 邛 町既n06!込KM口 jm*:! n VTD PJ-BHTD F3131ITI KJTD W&TI f3£ Rl/fflT|£107?TiF|£IO7?TiFp-乂Z1LV "IDS l£D>HEI 打晒D11'LEHOKM 峠T師LflHSREE

温馨提示

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

评论

0/150

提交评论