




已阅读5页,还剩20页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单片机交通灯控制系统一、 功能分析第一、设计说明本设计的意义在于通过具体的控制系统的设计,掌握微机控制系统设计的一般方法和处理问题的思路,特别是一些常用的技术手段。在实践教学环节中,积累设计经验,开拓思维空间,全面提高个人的综合能力第二、设计目标1、实现交通灯控制系统的基本功能;2、可以通过按键调整主次干道的通行时间;3、系统具有较强的稳定性;4、系统可根据需要附加一些功能;第三、总体设计方案硬件功能设计1、用二极管显示红绿黄等;2、用数码管显示十字路口两个方向的剩余时间;3、用单片机的定时器产生秒信号,控制十字路口的红绿黄灯交替点亮和熄灭;4、用按键设置两个方向的通行时间(绿灯点亮时间)和暂缓黄灯通行时间(黄灯点亮的时间)二、 软件模块 软件模块功能设计1、主程序负责初始化以及循环扫描键盘;2、定时器0负责闪烁以及数码管的闪烁;3、定时器1负责计数以及数码管的循环显示,交通灯的循环点亮;4、键盘扫描模块负责获得键号并转到相应的程序进行处理;5、键盘处理模块负责调整交通的通行以及暂缓通行时间系统工作流程设计1、系统启动后,系统按程序给定的时间工作,即东西向通行60秒,南北向通行40秒,黄灯亮4秒,工作模式如表1所示。首先东西向通行,然后南北向通行,如此循环。2、通行时间的设置:当需要更改主、次干道的通行时间时,可以用设置键、增加键、减少键”进行设置。第一次按“设置键”时,东西向的绿灯亮,东西向的LED数码管显示当前东西向的通行时间,并且按每秒3次的频率闪烁(每秒钟亮3次暗3次),其余的信号指示灯和南北向的LED数码管熄灭,此时可以用“增加键”和“减少键”来改变南北向的通行时间,每按一次键,数码管的显示时间增加1秒或减少1秒,长按键(按下的时间超过1秒钟以上),则数码管显示的时间按每秒钟增加或减少10的速度快速变化。 第二次按“设置键”时,东西向的黄灯亮,东西向的数码管显示当前东西向黄灯的点亮时间,并且按每秒3次的频率闪烁,其余的信号指示灯和南北向的数码管熄灭,此时可以用“增加键”和“减少键”来改变东西向黄灯的点亮时间。 第三次按“设置键”时,南北向的绿灯亮,南北向的数码管显示当前南北向绿灯的通行时间,并且按每秒3次的频率闪烁,其余的信号指示灯和东西向的数码管熄灭,此时可以用“增加键”和“减少键”来改变南北向绿灯的通行时间。 第四次按“设置键”时,南北向的黄灯亮,南北向的数码管显示当前南北向黄灯的点亮时间,并且按每秒3次的频率闪烁,其余的信号指示灯和东西向的数码管熄灭,此时可以用“增加键”和“减少键”来改变南北向黄灯的点亮时间。第五次按“设置键”时,系统退出设置状态,回到交通信号灯状态,并且东西向先通行,南北向后通行。“设置键”的功能如表2所示。 交通灯工作模式设置键的功能三、硬件电路设计 1、器件选择元件名参数备注AT89C511单片机8255A2可编程外设接口LED-RED、GREEN、YELLOW3红绿黄LED7SEG-MPX2-CC42位共阴极数码管RES220、1K电阻BUTTON5按钮74LS3736锁存器2、系统原理图设计 3、主要器件应用简介AT89C51单片机AT89C51单片机与8051系列单片机全兼容,但其内部带有4KB的FLASH ROM,设计时无需外接程序存储器。单片机各口的应用:P1口负责控制交通灯,P0口负责给8255a传送数据以及给锁存器传递8255a的地址,P2口为8255a的地址以及选择8255a,P3口负责控制按键;可编程外设接口8255a8255a可编程并行接口芯片有三个输入输出端口,即A口、B口和C口,对应于引脚PA7PA0、PB7PB0和PC7PC0。其内部还有一个控制寄存器,即控制口。有三种工作方式:方式0,方式1,方式28255A方式控制选择字D7D6D5D4D3D2D1D0控制字标识位A口方式选择A口I/O选择C高4位I/O选择B口方式选择B口I/O选择C低4位I/O选择1:方式控制0:C位操作00:方式001:方式110:方式21 : IN0 : OUT1 : IN0 : OUT0:方式01:方式11 : IN0 : OUT1 : IN0 : OUT8255A各口的应用:PA负责传输南北向数码管的值,PB负责传输东西向数码管的值,PC负责控制东西向、南北向数码的暗灭,控制寄存器(假设为PD)负责控制8255a的工作方式,此系统中值为0x80,即无条件传输方式;74ls37374LS373 是一种带三态门的8D锁存器,1D-8D为8个输入端,1Q-8Q为8个输出端,LE为数据打入端:当LE为“1”时,锁存器输出状态同输入状态;当LE由“1”变“0”时,数据打入锁存器,OE为输出允许端:当OE=0时,三态门打开;当OE=1时,三态门关闭,输出高阻。因为P0口为数据线、地址线复用,所以用一个锁存器将8255a的地址所存;四、 软件设计1、 主程序模块设计2、按键扫描模块设计3、按键处理模块设计短按键(时间小于0.5s,值加1)长按键(时间大于0.5s小于1s,值加10)持续按键(时间大于1s,值每隔1s加10)设置键处理增加键处理减少键处理4、数码管显示、闪烁模块设计5、数码管计数,数码管切换、交通灯切换模块设计五、 程序清单/*/* 单片机交通灯控制系统 */ /*/ #include at89x51.h#include absacc.h#define PA_ADDR XBYTE0x7ffc#define PB_ADDR XBYTE0x7ffd#define PC_ADDR XBYTE0x7ffe#define PD_ADDR XBYTE0x7fff#define SN_LED_RED P1_3#define SN_LED_GREEN P1_5#define SN_LED_YELLOW P1_4#define EW_LED_RED P1_0#define EW_LED_GREEN P1_2#define EW_LED_YELLOW P1_1/定义8255A的地址unsigned char led = 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;char set_value4 = 60,4,40,4; /设置数码管的显示值,依次为东西向绿灯、东西向黄灯、南北向绿灯、南北向黄灯unsigned char sign4=1,0,0,0; /标志变量,用于控制LED的顺序unsigned char disp_ew,disp_sn; /数码管的显示值unsigned char falsh_sign,direction_sign,flash_count; /控制数码管闪烁unsigned int secnum; /时间计数unsigned char key; /键值,实现一键多功能void delay_ms(unsigned int a);void add_process();void sub_process();void set_process();void scan_key();void init();/*延时函数*/void delay_ms(unsigned int a)unsigned char i;while(a-)i=70;while(i-);/* 按键处理模块 */*增加数码管的值*/void add_process()delay_ms(600);if(!P3_4)delay_ms(500);if(P3_4)if(key = 1)set_value0 = set_value0 + 10;if(set_value0 99)set_value0 = set_value0 % 10;disp_ew = set_value0;if(key = 2)set_value1+;if(set_value1 9)set_value1 = 0;disp_ew = set_value1;if(key = 3)set_value2 = set_value2 + 10;if(set_value2 99)set_value2 = set_value2 % 10;disp_sn = set_value2;if(key = 4)set_value3+;if(set_value3 9)set_value3 = 0;disp_sn = set_value3; while(!P3_4)if(key = 1)set_value0 = set_value0 + 10;if(set_value0 99)set_value0 = set_value0 % 10;disp_ew = set_value0;if(key = 2)set_value1+;if(set_value1 9)set_value1 = 0;disp_ew = set_value1;if(key = 3)set_value2 = set_value2 + 10;if(set_value2 99)set_value2 = set_value2 % 10;disp_sn = set_value2;if(key = 4)set_value3+;if(set_value3 9)set_value3 = 0;disp_sn = set_value3;delay_ms(1200);elsewhile(!P3_4);if(key = 1)set_value0+;if(set_value0 99)set_value0 = 0;disp_ew = set_value0;if(key = 2)set_value1+;if(set_value1 9)set_value1 = 0;disp_ew = set_value1;if(key = 3)set_value2+;if(set_value2 99)set_value2 = 0;disp_sn = set_value2;if(key = 4)set_value3+;if(set_value3 9)set_value3 = 0;disp_sn = set_value3;/*减少数码管的值*/void sub_process()delay_ms(600);if(!P3_5)delay_ms(500);if(P3_5)while(!P3_5);if(key = 1)set_value0 = set_value0 - 10;if(set_value0 0)set_value0 = set_value0 + 100;disp_ew = set_value0;if(key = 2)set_value1-;if(set_value1 0)set_value1 = 9;disp_ew = set_value1;if(key = 3)set_value2 = set_value2 - 10;if(set_value2 0)set_value2 = set_value2 + 100;disp_sn = set_value2;if(key = 4)set_value3-;if(set_value3 0)set_value3 = 9;disp_sn = set_value3;while(!P3_5)if(key = 1)set_value0 = set_value0 - 10;if(set_value0 0)set_value0 = set_value0 + 100;disp_ew = set_value0;if(key = 2)set_value1-;if(set_value1 0)set_value1 = 9;disp_ew = set_value1;if(key = 3)set_value2 = set_value2 - 10;if(set_value2 0)set_value2 = set_value2 + 100;disp_sn = set_value2;if(key = 4)set_value3-;if(set_value3 0)set_value3 = 9;disp_sn = set_value3;delay_ms(1200);elsewhile(!P3_5);if(key = 1)set_value0-;if(set_value0 0)set_value0 = 99;disp_ew = set_value0;if(key = 2)set_value1-;if(set_value1 0)set_value1 = 9;disp_ew = set_value1;if(key = 3)set_value2-;if(set_value2 0)set_value2 = 99;disp_sn = set_value2;if(key = 4)set_value3-;if(set_value3 5)key = 1;if(key = 1)disp_ew = set_value0;P1 = 0xfb;direction_sign = 1;if(key = 2)disp_ew = set_value1;P1 = 0xfd;direction_sign = 1;if(key = 3)disp_sn = set_value2;P1 = 0xdf;direction_sign = 2;if(key = 4)disp_sn = set_value3;P1 = 0xef;direction_sign = 2;if(key = 5)disp_sn = set_value0 + set_value1;disp_ew = set_value0;P1 = 0xf3;falsh_sign = 0;ET1 = 1;TR1 = 1;/* 按键扫描模块 */*扫描键盘*/void scan_key()while(P3_2 & P3_4 & P3_5);delay_ms(15);if(!P3_2)set_process();if(!P3_4)add_process();if(!P3_5)sub_process();else return ;/*定时器中断0,用于显示数码管的值*/void disp_t0(void) interrupt 1TR0 = 0;if(falsh_sign = 1)flash_count+;if(flash_count 16 & flash_count = 32)flash_count = 0; else PC_ADDR = 0xee;if(disp_sn 99)PA_ADDR = 0x40;if(disp_ew 99)PB_ADDR = 0x40;if(disp_sn = 99)PA_ADDR = leddisp_sn/10;if(disp_ew 99)PA_ADDR = 0x40;if(disp_ew 99)PB_ADDR = 0x40;if(disp_sn = 99)PA_ADDR = leddisp_sn%10;if(disp_ew = 99)PB_ADDR = leddisp_ew%10;delay_ms(2);TH0 = 0xD8; TL0 = 0xF0;TR0 = 1;/* 数码管显示、数码管显示切换、交通灯切换模块 */ /*用于显示LED以及计数*/void disp_count_t1(void) interrupt 3TH1 = 0x3C;TL1 = 0xB0;secnum+;if(secnum = 20)disp_sn-;disp_ew-;if(disp_ew = 0 & sign0 = 1)disp_ew = set_value1;EW_LED_GREEN = 1;EW_LED_YELLOW = 0;sign1 = 1;sign0 = 0;if(disp_ew = 0 & sign1 = 1)disp_ew = set_value2 + set_value3;disp_sn = set_value2;SN_LED_RED = 1;EW_LED_YELLOW = 1;EW_LED_RED = 0;SN_LED_GREEN = 0;sign2 = 1;sign1 = 0;if(disp_sn = 0 & sign2 = 1 )disp_sn = set_value3;SN_LED_GREEN = 1;SN_LED_YELLOW = 0;si
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 芜湖历年教资试题及答案
- 考生心理与复习效率的互动税务师试题及答案
- 吸痰器操作试题及答案
- 纳税申报表填写技巧试题及答案
- 图书管理员信息资源保护试题及答案
- 招财人员测试题及答案
- 激光探伤技术在工业中的应用试题及答案
- 育婴师心理发展考题及答案
- 激光在环境监测中的应用试题及答案
- 发明专利的可专利性分析试题及答案
- 成矿预测课件
- GB∕T 2518-2019 连续热镀锌和锌合金镀层钢板及钢带
- 线切割每日点检表A0
- 年产美甲贴100万张新建项目环境影响报告表
- 信息时代的研究生 学习与创新能力培养
- 起重机防摇摆控制PPT课件
- 第十一章 地役权
- 西门子Siemens 840D参数详解
- DLT 596-2021 电力设备预防性试验规程
- 风机基础土方开挖专项施工方案
- 诗歌朗诵《诗意中国》
评论
0/150
提交评论