闪烁LED小灯的设计设计Word文件下载.docx

上传人:b****3 文档编号:18276885 上传时间:2022-12-15 格式:DOCX 页数:24 大小:1.89MB
下载 相关 举报
闪烁LED小灯的设计设计Word文件下载.docx_第1页
第1页 / 共24页
闪烁LED小灯的设计设计Word文件下载.docx_第2页
第2页 / 共24页
闪烁LED小灯的设计设计Word文件下载.docx_第3页
第3页 / 共24页
闪烁LED小灯的设计设计Word文件下载.docx_第4页
第4页 / 共24页
闪烁LED小灯的设计设计Word文件下载.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

闪烁LED小灯的设计设计Word文件下载.docx

《闪烁LED小灯的设计设计Word文件下载.docx》由会员分享,可在线阅读,更多相关《闪烁LED小灯的设计设计Word文件下载.docx(24页珍藏版)》请在冰豆网上搜索。

闪烁LED小灯的设计设计Word文件下载.docx

第一章、设计目的·

·

1

第二章、硬件设计·

2.1单片机最小系统·

2.1.1单片机·

2.1.2震荡电路·

2

2.1.3复位电路·

2.2外接电路·

2.2.1串行口扩展·

3

2.2.2显示电路·

2.2.3十字路口交通灯显示电路·

4

第三章、软件设计及调试·

3.1流程图·

5

3.2程序·

6

3.2.1子程序·

9

3.2.2延时子程序·

3.2.3显示子程序·

10

3.3软件调试结果与说明·

13

第四章、实物调试·

第五章、课程设计小结·

14

附录A仿真·

16

附录B系统程序·

21

元件清单·

28

第一章设计目的

1.1课题简介

近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新。

在实时检测和自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构软硬件结合,加以完善。

1.2课题研究的目的和意义

本次课题利用了单片机内部定时器、外部中断,74HC164芯片,LED灯和数码管,解决了原始的人工指挥交通带来的一系列麻烦,大大的提高了实用性、灵活性和可靠性。

同时通过这次课题使我们进一步熟悉单片机的内部结构,编程技巧以及相关芯片的了解与应用。

第二章硬件设计

本系统主要由单片机、74HC164芯片、8位共阳极数码管、LED灯等一系列电路组成,主要完成交通灯十字路口的通行控制及其时间的显示。

2.1.最小系统

2.1.1单片机:

AT89C51

AT89C51的工作特性:

内含4KB的FLASH存储器檫写次数1000次;

内含128字节的RAM;

具有32根可编程I/O线;

具有2个16位编程定时器

具有6个中断源,5个中断矢量,2级优先权的中断结构;

具有1个全双工的可编程串行通信接口;

具有1个数据指针DPTR;

具有可编程3级程序锁定位;

AT89C51的工作电源为5(1±

0.2)V且典型值为5V;

AT89C51最高工作频率为24MHZ;

AT89C51的编程频率为3~24MHZ(本次用12MHz),编程启动电流和启动电压分别为1mA、5或12V(本次5V)。

电源:

采用USB接口连接,提供5V电压。

2.1.2震荡电路:

本次设计采用12MHz的晶振,电路图如下:

图1震荡电路

两只电容在20pF~100pF之间取值,其取值在60pF~70pF时振荡器频率稳定性较高,按照一般经验,外接晶体时两个电容的取值为33pF。

2.1.3复位电路:

图2手动复位

2.2外接电路

2.2.1串行口端口扩展74HC164

74HC164是高速硅门CMOS器件,与低功耗肖特基型TTL(LSTTL)器件的引脚兼容。

74HC164是8位边沿触发式移位寄存器,串行输入数据,然后并行输出。

数据通过两个输入端(DSA或DSB)之一串行输入;

任一输入端可以用作高电平使能端,控制另一输入端的数据输入。

两个输入端或者连接在一起,或者把不用的输入端接高电平,一定不要悬空。

  时钟(CP)每次由低变高时,数据右移一位,输入到Q0,Q0是两个数据输入端(DSA和DSB)的逻辑与,它将上升时钟沿之前保持一个建立时间的长度。

  主复位(MR)输入端上的一个低电平将使其它所有输入端都无效,同时非同步地清除寄存器,强制所有的输出为低电平。

AT89C51通过P3.0口和P3.1口对其进行片选控制

2.2.2显示电

图3LED数码管显示电路:

本次LED显示电路主要采用74HC164与共阳极数码管相接。

通过四片74HC164来控制数码管的输出。

74HC164的1,2号脚接到AT89C51的P3.0口,第8脚接到P3.1口。

2.2.3十字路口交通灯显示电路:

图4通过LED红、绿、黄三种颜色灯的亮与灭来模仿十字路口的交通灯。

交通灯的变化规律:

红灯亮20秒,黄灯亮15秒,绿灯亮5秒。

假设一个十字路口为东西南北走向。

分为五个状态:

1初始状态为南北绿灯亮,东西红灯亮;

2南北绿灯亮20秒后,转为黄灯闪烁5秒,东西红灯仍亮;

3南北黄灯亮5秒后,转为红灯,东西绿灯亮;

4东西绿灯亮20秒后,转为黄灯,南北红灯亮;

5东西黄灯亮5秒后,转为红灯;

南北为绿灯亮。

重复循环。

交通灯变化过程中用数码管进行计时,以便观察。

第三章软件设计及调试

3.1流程图

3.2程序

3.2.1主程序

voidmain(void)

{

TMOD=0x01;

//设置定时方式1

TH0=0x3c;

//定时初值50MS

TL0=0xb0;

TR0=1;

//T0溢出中断请求开启

EA=1;

//总中断开启

ET0=1;

//T0中断开启

EX0=1;

//外部中断INT0开启

IT0=1;

//设置开关下降沿有效

EX1=1;

IT1=1;

ns_time=ns_time_green;

//东西南北红黄绿灯时间赋值

ew_time=ew_time_red;

ew_time_red=ns_time_green+ns_time_yellow;

if(!

a)//a=0,东西显示19开始倒计时,南北14开始倒计时

ns_time=ew_time_red;

ew_time=ns_time_green+ns_time_yellow;

}

while(!

a)//a=0,进入循环

{

if(ew_time-5>

0)

{

while(!

flag);

display(ew_time,ew_time-5);

//flag=1,显示东西19,南北14

P1=0xdd;

//南北绿灯,东西红灯

flag=0;

}

if(ew_time<

=5)//东西时间<

=5时,南北黄灯闪烁,东西红灯

{

flag=0;

display(ns_time,ns_time);

//东西,南北均从5开始倒计时显示

P1=0xdf;

//东西红灯,南北黄灯一亮一灭显示

/*p1_4=0;

*/

delay(5000);

p1_0=~p1_0;

//南北黄灯所在位,对应取反,实现亮灭变化

if(ew_time==0)//如果东西时间为0,赋值a为1,以实现方向转变

a=1;

}

if(a)//a=1,南北显示19开始倒计时,东西14开始倒计时

while(a)//a=1,进入循环

if(ns_time-5>

0)//南北红灯,东西绿灯

while(!

display(ns_time-5,ns_time);

//flag=0,显示南北19,东西14

delay(5000);

//延时子函数调用

P1=0xeb;

//南北红扥个,东西绿灯显示

}

if(ns_time-5<

=0)//南北时间<

=5时南北红灯,东西黄灯闪烁

//flag=0南北显示19开始倒计时,东西14开始计时

display(ns_time,ns_time);

P1=0xfb;

//南北红灯,东西黄灯一亮一灭显示

p1_3=~p1_3;

//东西黄灯P1.3位取反,以实现黄灯亮灭变化显示

//延时函数调用

if(ns_time==0)//如果南北时间为0赋值a为0

a=0;

3.2.2延时子程序:

.delay(intt){

while(t--);

}

3.2.3显示子程序:

display(intew_time,intns_time)

{

chartable[10]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09};

//共阳极数码显示0-9对应的字型码

chari,a[4];

a[2]=ns_time%10;

//南北时间个位数赋值给a[2]

a[3]=ns_time/10;

//南北时间十位数赋值给a[3]

a[0]=ew_time%10;

//东西时间个位数赋值给a[0]

a[1]=ew_time/10;

//东西时间个位数赋值给a[1]

SM1=0;

SM0=0;

//串行口工作方式0设定

for(i=3;

i>

=0;

i--)//分别将4位数送到SBUF区域

SBUF=table[a[i]];

while(!

TI);

//判断是否发送完一个数据

TI=0;

//若发送完,0赋给TI

}

3.2.4中断程序:

voidint0(void)interrupt0

//int0中断子函数,当紧急情况(救护车等)发生时,对应INT0按键调用此函数

{inti,j;

display(00,00);

//显示器显示0000,不再进行倒计时

delay(5000);

for(i=0;

i<

10;

i++)

//利用flag实现东西南北方向红灯均显示亮,对应东西南北方向车流均停止,处理紧急情况

for(j=0;

j<

j++)

{delay(50000);

flag)

{P1=0xdb;

}

voidint1(void)interrupt2

//int1中断子函数,当紧急情况(救护车等)发生时,对应INT1按键调用此函数

display(00,00);

for(i=0;

i++)

j++)

//利用flag实现主干道东西方向绿灯南北方向红灯

{P1=0xeb;

intt0int()interrupt1//t0中断(定时器0中断)子函数

{

//定时50ms初值设定

point--;

//20次T0定时次数控制

if(point==0)

//如果20次到了,改变显示的东西南北方向的时间

flag=1;

point=20;

if(ns_time!

=0)

ns_time--;

if(ew_time!

ew_time--;

3.3软件调试结果与说明

用KeiluVision4软件编程,编译无误后,生成**.hex文件。

把hex文件写入Protues仿真软件进行仿真,按图(见附录)连接电路,进行仿真。

开始仿真,东西南北红、绿、黄三种灯自动按要求规律运行,同时数码管显示相应时间。

按下K,1电路复位。

按下K2东西南北红灯全亮,数码管显示为0。

按下K3,东西绿灯亮,南北红灯。

经多次验证,设计符合要求,则软件调试成功。

第四章实物调试

烧入程序后,接通电源,发现交通灯自动运行,但对应时间不同且数码管显示时间很乱。

用万用表检测后,未发现短路、虚焊的情况。

经线路分析知,74HC164与AT89C51之间连接顺序有误。

改正后,交通灯正常运行但数码管显示数字缺笔划。

经检测后,发现是数码管本身损坏,更换数码管后,系统运行正常。

第五章课程设计小结

两周的课程设计结束了,但我学到了很多。

课程设计的每一个环节都很重要,需要我们的耐心与细心。

一个微小的错误可能会使结果出现很大的差距。

在实物测试过程中,发现了很多的小问题。

例如:

电路按照仿真图焊好后便直接接电源进行测试。

实物与仿真电路中的元件存在差异,这是不可忽略的问题。

在实物调试前,我们应好好想一下,还有什么没做,是否有遗漏的地方。

查找错误要懂得方法,要有针对性,不要胡乱拆线改线。

先从AT89C51芯片查起,看其是否工作后,在查线路问题。

在无法查出问题时应多注意常识性问题。

通过两周的课程设计,明确了软件设计的具体步骤,提高了对定时、中断等编程的认知和理解,同时巩固了所学的知识,掌握了一定的编程技巧。

在设计与检测过程中,独立思考的能力很重要。

遇到问题,不能一味的回避或求助他人,要学会从基础入手,一步一步地分析问题并解决问题。

只有把所学的理论知识与实践相结合起来,才能进一步地提高自身分析问题与解决问题的能力,为将来就业夯实基础。

第六章参考文献

《单片机原理及应用技术》范力旻电子工业出版社

《单片机应用系统设计技术》张齐电子工业出版社《51系列单片机设计实例》楼然苗李光飞北航出版社

《单片机原理与应用》丁元杰机械工业出版社

附录A

1.proteus仿真原理图

2实物效果图

南北绿灯亮19s,东西红灯亮。

南北黄灯亮5s,东西红灯。

东西绿灯14s,南北红灯。

东西黄灯5s,南北红灯

发生交通事故时,交通灯红灯全亮,且数码管显示0

有特殊情况是只有东西通行。

附录B

1.系统程序

#include<

reg52.h>

sbitp1_0=P1^0;

sbitp1_1=P1^1;

sbitp1_2=P1^2;

sbitp1_3=P1^3;

sbitp1_4=P1^4;

sbitp1_5=P1^5;

sbitp0_0=P1^6;

bitflag=0;

//定义显示状态控制位

intns_time;

intew_time;

intns_time_red=20;

intns_time_green=15;

intns_time_yellow=5;

intew_time_red=20;

intew_time_green=15;

intew_time_yellow=5;

charpoint=20;

//定时的控制次数初值设定

inta=0;

//南北,东西两方向切换状态标志初值设定

delay(intt)//延时子函数

while(t--);

display(inttime)//显示子函数

chartable[10]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09};

chari,a[2];

a[0]=time%10;

//时间个位数赋值给a[0]

a[1]=time/10;

//时间十位数赋值给a[1]

for(i=1;

i--)//将数送到SBUF区域

{SBUF=table[a[i]];

ew_time=ew_time_red;

ew_time_red=ns_time_green+ns_time_yellow;

a)//a=0,东西显示19开始倒计时

while(!

display(ew_time);

//flag=1,显示东西19

}

display(ns_time);

//从5开始倒计时显示

//南北黄灯所在位,对应取反,实现亮灭变化

if(ew_time==0)

//如果东西时间为0,赋值a为1,以实现方向转变

if(a)//a=1,东西14开始倒计时

display(ns_time-5);

//flag=0,显示东西14

}

=5时南北红灯,东西黄灯闪烁

//flag=0南北显示19开始倒计时

//东西,南北均从5开始倒计时显示

//东西黄灯P1.3位取反,以实现黄灯亮灭变化显示

intt0int()interrupt1//t0中断(定时器0中断)子函数

TL0=0xb0;

if(point==0)//如果20次到了,改变显示的东西南北方向的时间

voidint0(void)interru

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

当前位置:首页 > 经管营销 > 财务管理

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

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