基于c语言单片机交通灯Word格式文档下载.docx

上传人:b****6 文档编号:21793247 上传时间:2023-02-01 格式:DOCX 页数:19 大小:157.97KB
下载 相关 举报
基于c语言单片机交通灯Word格式文档下载.docx_第1页
第1页 / 共19页
基于c语言单片机交通灯Word格式文档下载.docx_第2页
第2页 / 共19页
基于c语言单片机交通灯Word格式文档下载.docx_第3页
第3页 / 共19页
基于c语言单片机交通灯Word格式文档下载.docx_第4页
第4页 / 共19页
基于c语言单片机交通灯Word格式文档下载.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

基于c语言单片机交通灯Word格式文档下载.docx

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

基于c语言单片机交通灯Word格式文档下载.docx

选取原则:

传统做法,但能够实现所需,即最简单也最是实用。

电容选取33pF,晶振为12MHz。

2.1.4流水灯电路模块

流水灯电路直接接在单片机的P2口上,采用共阳接法。

2.1.5数码管电路模块

数码管的段控口接在单片机的P0口上,位控通过三极管接在单片机的P2口上。

2.1.6按键电路模块

按键电路的设计就是在一段共接地,另一端通过上拉电阻接到P1口有按键时。

相应的口就会变成低电平,产生一个下降沿。

2.1.7下载口电路

下载口的1脚接在P1.5口,2脚悬空,3脚接在单片机的复位口上,4脚接在P1.6口,5叫接在P1.7口,6、7、8、9、10接地。

2.2交通灯电路原理图、PCB图、元器件分布图

电路原理图见附录1

PCB顶层图见附录2

PCB底层图见附录3

元器件布局图见附录4

2.3交通灯元器件清单

元器件清单见附录5

3交通灯软件系统的设计

3.1单片机资源使用情况

AT89S52的P3口用来接八个发光二极管的阴极,控制其亮与灭,P0口和P2口外接由8个LED数码管构成的显示器,用P0口作LED的段码输出口(P0.0~P0.7对应于LED的a~dp),P2口作LED的位控输出线,P2口外接3个按键A、B、C(分别对应于P1.0、P1.1、P1.2)用于调整显示接口电路。

3.2软件各模块简要介绍

软件设计是由C语言来编写的,由主程序、键处理和键扫描程序、显示程序、延时程序这几个模块组成的。

3.2.1主程序

主程序中会一直调用显示程序、键扫描程序,延时程序,当没有键按下时,数码管会一直显示P.,当有按键按下时,就会按操作执行。

3.2.2显示程序

显示程序主要完成数码管动态显示。

3.2.3键处理和键扫描程序

键处理程序主要将P1口的取值送往单片机进行取反。

键扫描主要判断是否有键按下,即过度前沿抖动在判断是否有键按下。

最终将处理完的键值作为返回值返回。

3.2.4延时程序

延时程序主要是用来倒计时用的,用来计算秒数。

3.3交通灯程序流程图

3.3.1主程序流程框图

主程序流程图如图3-1所示

图3-1

紧急情况时的中断服务程序(外中断0)

中断响应

返回

恢复现场

延时10S

A红灯、B红灯

保护现场

图3-2

3.3.2显示子程序流程框图

显示子程序框图如图3-3所示

图3-3

3.3.3键扫子程序流程框图

键扫子程序流程框图如图3-4所示

图3-4

3.4交通灯设计程序清单

程序清单见附录6

4交通灯设计结论

4.1使用说明

通电后,数码管会显示d.1004-16,按下S2键后,交通灯开始进入运行状态。

运行时按S1复位,如果按下S2键,主车道绿灯亮60秒,次车道红灯亮60秒,随后主车道黄灯亮2秒,闪3下,然后主车道红灯亮30秒,次车道绿灯亮30秒,紧接着次车道黄灯亮2秒闪三下,一直循环,如果按下S3则回到初始值P.为紧急情况使用;

再按S2键主次车道红灯都亮10秒。

4.2系统调试

单片机AT89S52是系统的核心,利用万用表检测单片机电源VCC是否为(40脚)+5V、晶振是否正常工作(可视波器调试,也可用万用表检测,亮引脚电压一般为1.8~2.3V之间)、复位引脚RST(复位时为高电平,单片机工作时为低电平)、EA是否为+5V(高电平),单片机能工作了,再结合电路图,检测故障就容易了。

4.3交通灯运行图

交通灯运行实拍图见附录

4.4设计体会

本次设计中,因为本人单片机基础学到不少很好,所以费了很大的时间,在硬件方面,一直都不是很顺利,出现虚焊的情况很多,在检查板子的时候由于焊孔太多遇到很大的困难,甚至想放弃,但最后还是坚持下来了,软件设计方面,也不是很会,通过别人的一些帮忙,使我完成了这次的设计,真的很不容易。

结束语

通过这学期单片机的学习,本人喜欢上了在软件上的编程,虽然学的不是很好,但本人会不断努力,在学习编程技能,为以后进去手机开发设计方面打好基础,本人已经喜欢上了这个行业,相信能在以后有一番作为。

致谢

感谢王老师这个学期对我们单片机这门课程学习的严格要求,让我们学到了很多,不尽在学习上,还是做人方面,都起到很大的作用,还要感谢在学习中帮助我的同学,在没有老师的情况下解决了我的疑惑,真的很谢谢你们。

参考文献

[1].李朝青.单片机原理及接口技术(第3版).2005年10月

LiZhaoqing.TheSCMtheoryandInterfaceTechnology(ThirdEdition).2005yearinOctober

[2].蔡朝洋.单片机控制实习与专题制作

CaiZhaoyangSCMcontrolpracticeandspecialtopicproduction

[3].楼然苗.单片机课程设计指导

buildingandseedlings.SCMcurriculumdesignguidance

ZhaoGuanglin

[4].赵广林.电路设计与制版

circuitdesignandplatemaking.

附录2:

PCB顶层图

附录3:

PCB底层图

附录4:

元器件分布图

附录5:

元器件清单

名称

数量

参数

电阻

3个

1KΩ

数码管

2个

4位一体

1个

200Ω

下载口

普通插座

40PIN

24个

470Ω

按键

9个

三极管

PNP

USB供电线

1根

晶振

12MHz

电容

22pF

极性电容

220μF

芯片

1块

AT89S52

发光二极管

六角开关

表2元件清单

附录6:

程序清单

//名称:

十字路口交通灯控制

//作者:

//时间:

2013年5月28日

//设计要求:

上电或按键复位后能自动显示系统提示符“d.1004-16”,进入准备工作状态。

按开始键则开始工作,按结束键则返回“P.”状态。

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

#include<

reg52.h>

intrins.h>

charcodedis_code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x0c,0xff};

chartime;

charv;

charflag=0;

/*显示缓冲数组(存放显示信息的字型码的序号)*/

charfind_code[8];

//函数名:

voidDelayX1ms(uintcount)

//功能:

延时时间为1ms

//调用函数:

//输入参数:

count,1ms计数

//输出参数:

//说明:

总共延时时间为1ms乘以count,crystal=12Mhz

#defineucharunsignedchar

#defineuintunsignedint

voidDelayX1ms(uintcount)

{

uintj;

while(count--!

=0)

for(j=0;

j<

80;

j++);

}

/*显示函数*/

voiddisp()

chari,j=0xEF;

chark;

for(i=0;

i<

8;

i++)

P2=j;

k=find_code[i];

P0=dis_code[k];

DelayX1ms

(1);

j=_crol_(j,1);

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

*函数原型:

keychuli();

*功能:

处理与键盘相连的P1口的内容,作为键值。

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

ucharkeychuli()

uchark;

k=P1;

//P1口内容送K

k=~k;

//取反

return(k);

//返回键值

key();

键盘扫描函数,函数返回值即键值。

ucharkey()

ucharkeyzhi,keyzhii;

//键盘按键键值临时存放

keyzhi=keychuli();

//调P1口处理函数

if(keyzhi!

=0)//有键动作延时去抖动,否则函数返回

disp();

//再次调P1口处理函数

=0)//真正有键按下,取键值并暂存

keyzhii=keyzhi;

while(keyzhi!

=0&

&

TF0)//判按键是否释放,没有释放延时去抖动等待释放

disp();

}

keyzhi=keyzhii;

//按键释放后恢复按键键值

}

return(keyzhi);

//返回按键键值

voiddelay1s()

{

TMOD=0x01;

//定时器0,工作方式1

TH0=0x3c;

TL0=0xb0;

//50ms中断一次

EA=1;

ET0=1;

TR0=1;

do

{disp();

v=key();

while(time!

=20&

v!

=2);

TR0=0;

time=0;

}

voidINTT0()interrupt1

TH0=0x3c;

TL0=0xb0;

time++;

voiddelay()

=10&

voidINTT1()interrupt2

flag=1;

voidjinji()

intb;

for(b=10;

b>

=2;

b--)

P3=0X6F;

find_code[6]=b%10;

find_code[7]=b/10;

find_code[2]=b%10;

find_code[3]=b/10;

delay1s();

flag=0;

voidmain()

{

while

(1)

find_code[0]=11;

find_code[1]=11;

find_code[2]=11;

find_code[3]=11;

find_code[4]=11;

find_code[5]=11;

find_code[6]=11;

find_code[7]=10;

EX1=1;

IT1=1;

switch(v)

case0:

break;

case1:

while(v!

=2)

{intm,n=60,t=30,a=4;

find_code[7]=11;

for(m=60;

m>

m--)

{

P3=0xAF;

find_code[6]=m%10;

find_code[7]=m/10;

find_code[2]=n%10;

find_code[3]=n/10;

delay1s();

n--;

if(flag==1&

jinji();

for(m=0;

m<

2&

m++)

P3=0XCF;

find_code[6]=a%10;

find_code[7]=a/10;

find_code[2]=n%10;

n--;

a--;

}

for(m=0;

3&

{

find_code[6]=a%10;

if(flag==1&

P3=0XEF;

delay();

P3=0XCF;

}

a=4;

for(m=30;

{

P3=0X7D;

find_code[6]=m%10;

find_code[2]=t%10;

find_code[3]=t/10;

delay1s();

t--;

P3=0X7E;

find_code[6]=a%10;

find_code[2]=t%10;

find_code[3]=t/10;

}

P3=0X7F;

}P3=0xFF;

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

当前位置:首页 > 人文社科 > 广告传媒

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

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