交通灯单片机Word格式文档下载.docx

上传人:b****7 文档编号:22191322 上传时间:2023-02-03 格式:DOCX 页数:17 大小:136.73KB
下载 相关 举报
交通灯单片机Word格式文档下载.docx_第1页
第1页 / 共17页
交通灯单片机Word格式文档下载.docx_第2页
第2页 / 共17页
交通灯单片机Word格式文档下载.docx_第3页
第3页 / 共17页
交通灯单片机Word格式文档下载.docx_第4页
第4页 / 共17页
交通灯单片机Word格式文档下载.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

交通灯单片机Word格式文档下载.docx

《交通灯单片机Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《交通灯单片机Word格式文档下载.docx(17页珍藏版)》请在冰豆网上搜索。

交通灯单片机Word格式文档下载.docx

指导教师评语:

设计题目:

基于单片机的交通灯控制器设计

一、要求

交通灯控制器可通过利用D板的元器件,stc12c5608ad单片机,CH452,共阴极数码管,按键,LED灯显示电路(外扩)可完成。

二、分析

中华人民共和国道路交通安全法实施条例第三十八条,机动车信号灯和非机动车信号灯表示:

绿灯亮时,准许车辆通行,但转弯的车辆不得妨碍被放行的直行车辆、行人通行;

黄灯亮时,已越过停止线的车辆可以继续通行;

红灯亮时,禁止车辆通行。

本设计通过红黄绿灯显示。

初始状态时,主次干道都显示红灯,按按键1后开始按照下表所示执行

序号

灯的颜色时间(s)

说明:

依次循环

1

红31

绿26

2

黄5

3

4

按下键1,中断实现。

功能:

出现紧急情况时,需要让交通道路紧急停止。

按下键1时,数码管显示停止,并且主次干道分别显示红红,交通情况处于停滞状态。

再按一下键1,则交通灯从原始状态开始执行。

按按键2时,显示SOS,求助信号,再按一下保持刚才状态继续执行。

三、设计

1、硬件设计(包括设计方案及说明、完整的硬件连接图等)

交通灯控制系统可用单片机直接控制信号灯的状态变化,又接入数码管就可以显示倒计时以提醒驾驶者,更具人性化。

增加按键中断,可以对紧急事件进行控制。

单片机电路主要完成的任务是控制红绿灯的规律转换,数码管显示和中断延时控制。

整个系统由单片机电路、数码管倒计时显示电路、LED红绿灯、中断按键、电源和串口通讯等部分构成。

系统硬件框图如图所示。

图1系统硬件框图

由于本系统的设计是在D版基础上进行的扩展,所以只需扩展电阻,发光二极管即可。

图2D版的原理图

图3外扩电路

2、软件编程

一、紧急电路设计

N

Y

Y

图4紧急电路设计

二、第二扩展程序

三、交通灯总程序

#include<

reg52.h>

#defineuintunsignedint

#defineucharunsignedchar

sbitDOUT=P2^1;

sbitLOAD=P2^0;

sbitDIN=P2^2;

sbitDCLK=P2^3;

sbitAA=P2^6;

//蜂鸣器变量

sbita1=P1^0;

//g绿

sbita2=P1^1;

//y黄

sbita3=P1^2;

//r红

sbitb1=P1^3;

sbitb2=P1^4;

sbitb3=P1^5;

//r红灯低电平有效

#defineTim0_H(65536-18432)/256//定时器0初值,高8位(10ms)

#defineTim0_L(65536-18432)%256//定时器0初值,低8位(10ms)

unsignedcharTim0_Counter=0;

unsignedcharT_Second=0;

volatileunsignedcharT_Zhu=31;

//易变的变量主干道

volatileunsignedcharT_Ci=26;

//次干道

unsignedintcodedisplay[8]={0x0800,0x0900,0x0a00,0x0b00,0x0c00,0x0d00,0x0f00,0x0e00};

//定义了8位数组

unsignedcharcodeBCD[16]={0xbe,0x24,0xea,0xe6,0x74,0xd6,0xde,0xa4,0xfe,0xf6,0x40,0xD6,0x00,0xf0,0x9a,0xd8};

//显示的符号

//0123456789//-s黑oCF

unsignedcharkey=0;

bitFlash_Flag=1;

//刷新显示标志

unsignedintnum;

//按键值

bitchoice=1;

voidCH451_Write(uintdat)//CH452显示子程序

{

uinti;

LOAD=1;

for(i=12;

i>

0;

i--)

{

DCLK=0;

if((dat&

0x01)==0x01)

DIN=1;

elseDIN=0;

DCLK=1;

dat=dat>

>

1;

}

LOAD=0;

}

//*******初始化***************************************//

voidCH451_Init(void)//初始化

DIN=0;

CH451_Write(0x201);

CH451_Write(0x403);

CH451_Write(0x50f);

/*-----------------定时器初始化函数----------------------*/

voidTimer_Init(void)

TMOD=0x01;

//定时器工作方式1:

16位只要TRX为1,即可计数

TH0=Tim0_H;

//定时器装入初值

TL0=Tim0_L;

ET0=1;

ET1=1;

EA=1;

/*----------------键值获得子程序-------------------------*/

voidgetkey(void)//获得键值

{

uchari;

ucharcommand,keycode;

command=0x07;

for(i=0;

i<

4;

i++)

{

DIN=command&

command>

=1;

keycode=0;

7;

keycode<

<

keycode|=DOUT;

key=keycode;

/*****************按键功能**********************/

voidKey1_Program(void)

{

TR0=~TR0;

//关中断

if(TR0==0)

a3=0;

b3=0;

a2=1;

a1=1;

b2=1;

b1=1;

//主次是红红

if(TR0==1)//重新开始运行

a1=1;

b3=1;

//主干道红亮

b1=0;

//次干道绿亮

Tim0_Counter=0;

T_Second=0;

T_Zhu=31;

T_Ci=26;

Flash_Flag=1;

}

voidKey2_Program(void)//按键2功能

TR0=~TR0;

AA=~AA;

CH451_Write(display[0]+BCD[11]);

CH451_Write(display[1]+BCD[0]);

CH451_Write(display[2]+BCD[11]);

CH451_Write(display[3]+BCD[12]);

CH451_Write(display[4]+BCD[12]);

CH451_Write(display[5]+BCD[12]);

voidKey3_Program(void)//按键3功能

{;

voidKey4_Program(void)//按键4功能

voidNone(void)

{;

codevoid(*Key_Answer[])(void)=

None,

Key1_Program,

Key2_Program,

Key3_Program,

Key4_Program

};

/****************************************/

unsignedcharGet_KeyNum(void)

switch(key)

case0x40:

num=1;

break;

//按下第1个键

case0x41:

num=2;

//按下第2个键

case0x42:

num=3;

//按下第3个键

case0x43:

num=4;

//按下第4个键

default:

num=0;

}

returnnum;

voiddispose_Reveal(unsignedcharTZhu,unsignedcharTCi)

unsignedcharone,ten,hundred,thousand;

thousand=TZhu/10;

hundred=TZhu%10;

ten=TCi/10;

one=TCi%10;

CH451_Write(display[0]+BCD[one]);

//显示次干道的个位

CH451_Write(display[1]+BCD[ten]);

//显示次干道的十位

CH451_Write(display[4]+BCD[hundred]);

//显示主干道的个位

CH451_Write(display[5]+BCD[thousand]);

//显示主干道的十位

CH451_Write(display[2]+BCD[10]);

//-

CH451_Write(display[3]+BCD[10]);

/*-----------------定时器中断服务程序----------------------*/

voidTimer0(void)interrupt1

Tim0_Counter++;

if(Tim0_Counter==100)//计数计到100

T_Second++;

T_Zhu--;

//从31开始减

T_Ci--;

//从26开始//执行循环第一步红绿

if(T_Second==26)

{

T_Ci=5;

//执行循环第二步红黄

b1=1;

b2=0;

}

elseif(T_Second==31)

T_Zhu=26;

//执行循环第三步绿红

T_Ci=31;

a3=1;

b2=1;

a1=0;

b3=0;

elseif(T_Second==57)//执行循环第四步黄红

T_Zhu=5;

a1=1;

a2=0;

elseif(T_Second==62)//跳回初始值

T_Zhu=31;

T_Ci=26;

T_Second=0;

a2=1;

b3=1;

a3=0;

b1=0;

/*-----------------主函数----------------------*/

//**********themainfunction******************

voidmain(void)

CH451_Init();

//初始化

Timer_Init();

AA=1;

a3=0;

b3=0;

//次干道红亮

while

(1)//单片机死循环

if(!

DOUT)//DOUT=P2^2=0

getkey();

(*Key_Answer[Get_KeyNum()])();

if(Flash_Flag)

Flash_Flag=0;

dispose_Reveal(T_Zhu,T_Ci);

3、调试说明

下载完程序后,给电后显现红红警示状态;

按按键1,开始运行,遵循循环原则;

再按按键1,出现红绿特殊情况,保障主干道畅通;

再按按键1,回到31、26的原始状态运行。

按按键2,显示屏出现SOS,蜂鸣器开始鸣笛;

再按按键2,回到按键前工作。

4、设计结果及错误分析

程序调试中出现的问题:

1、数码管显示乱码在显示SOS的时候有乱码

2、显示管时间跳动太慢(下载选择错误)

3、实现功能时不能完全实现

解决方法:

1、参考CH452学习资料,重新设定值

2、在下载时选“外部晶振或时钟”

3、耐心花时间改程序

经过调试,系统能够实现预期功能

四、总结

此次课程设计完成了具有中断紧急通车,数码管倒计时显示,车辆通行功能、SOS的交通智能控制系统。

而且在理论基础之上,又进行了软件汇编程序设计和实物焊接制作。

实物与计算机连接,USB接口提供直流电,利用软件将程序在线下载到单片机中。

通过观察实物的运行状态,修改软件程序,不断调试,从而完善了实物的交通灯系统设计。

从总体来说,基本上完成了课题的要求。

本设计中实物所呈现的交通灯状态清晰明了,倒计时显示醒目易懂,紧急通车模式对现实中的重大事故处理有一定的保护意义。

SOS模式适合于偏僻地区,SOS比较醒目,从而提醒驾驶车辆。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 社交礼仪

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1