闪烁LED小灯的设计设计.docx

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

闪烁LED小灯的设计设计.docx

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

闪烁LED小灯的设计设计.docx

闪烁LED小灯的设计设计

闪烁LED小灯的设计设计

学生姓名

指导老师

职称

课题名称

闪烁LED小灯的设计

课题工作内容

交通灯的硬件电路主要由单片机控制电路、数码管显示电路、时钟电路、LED显示电路、按键控制电路组成。

主要实现:

1、交通灯指挥通行的实现:

通过时钟电路、LED显示电路与数码管显示电路,实现通行灯的亮、灭与时间的显示。

2、特殊情况的处理实现:

通过按键控制电路,实现发生交通事故与有救护车要紧急通行时的交通灯状况。

指标要求

1、自动控制2、显示时间

进程安排

第一天:

下达任务、了解课题要求、查阅资料;第二天:

方案论证与确定,采购元器件;第三天、第四天:

硬件制作与调试;第五天~第八天:

软件设计与调试;第九天:

撰写报告;第十天:

作品掩饰与答辩考核。

主要参考文献

《单片机原理及应用技术》范力旻电子工业出版社《51系列单片机设计实例》楼然苗李光飞北航出版社

《单片机的C语言应用程序设计》马忠梅籍顺心北京航空航天大学出版社

《51单片机应用开发案例精选》王为青邱文勋人民邮电出版社

《51系列单片机设计实例》楼然苗李广飞北京航空航天大学出版社

《单片机原理与接口技术》胡汉才清华大学出版社

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

地点

起止日期

2012.6.10~6.23

 

第一章、设计目的····································1

第二章、硬件设计····································1

2.1单片机最小系统································1

2.1.1单片机································1

2.1.2震荡电路······························2

2.1.3复位电路·························2

2.2外接电路·····································2

2.2.1串行口扩展·······················3

2.2.2显示电路·························3

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

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

3.1流程图·······································5

3.2程序··········································6

3.2.1子程序·····························9

3.2.2延时子程序·························9

3.2.3显示子程序·························10

3.3软件调试结果与说明························13

第四章、实物调试·······························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;//外部中断INT0开启

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时,南北黄灯闪烁,东西红灯

{

while(!

flag);

flag=0;

display(ns_time,ns_time);//东西,南北均从5开始倒计时显示

P1=0xdf;//东西红灯,南北黄灯一亮一灭显示

/*p1_4=0;*/

delay(5000);

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

delay(5000);

}

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

a=1;

}

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

{

ns_time=ew_time_red;

ew_time=ns_time_green+ns_time_yellow;

}

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

{

if(ns_time-5>0)//南北红灯,东西绿灯

{

while(!

flag);

display(ns_time-5,ns_time);//flag=0,显示南北19,东西14

delay(5000);//延时子函数调用

P1=0xeb;//南北红扥个,东西绿灯显示

}

if(ns_time-5<=0)//南北时间<=5时南北红灯,东西黄灯闪烁

{

while(!

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

flag=0;

display(ns_time,ns_time);//东西,南北均从5开始倒计时显示

P1=0xfb;//南北红灯,东西黄灯一亮一灭显示

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

delay(5000);//延时函数调用

}

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<10;j++)

{delay(50000);

while(!

flag)

{P1=0xdb;}

}

}

flag=0;

}

voidint1(void)interrupt2

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

{inti,j;

display(00,00);//显示器显示0000,不再进行倒计时

for(i=0;i<10;i++)

{

for(j=0;j<10;j++)

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

{

while(!

flag)

{P1=0xeb;

}

}

}

flag=0;

}

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

{

TH0=0x3c;//定时50ms初值设定

TL0=0xb0;

point--;//20次T0定时次数控制

if(point==0)

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

{

flag=1;

point=20;

if(ns_time!

=0)

ns_time--;

if(ew_time!

=0)

ew_time--;

}

}

3.3软件调试结果与说明

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

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

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

按下K,1电路复位。

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

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

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

第四章实物调试

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

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

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

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

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

第五章课程设计小结

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

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

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

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

例如:

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

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

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

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

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

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

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

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

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

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

 

第六章参考文献

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

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

《单片机的C语言应用程序设计》马忠梅籍顺心北京航空航天大学出版社

《51单片机应用开发案例精选》王为青邱文勋人民邮电出版社

《51系列单片机设计实例》楼然苗李广飞北京航空航天大学出版社

《单片机原理与接口技术》胡汉才清华大学出版社

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

 

附录A

1.proteus仿真原理图

2实物效果图

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

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

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

东西黄灯5s,南北红灯

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

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

 

附录B

1.系统程序

#include

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};//共阳极数码显示0-9对应的字型码

chari,a[2];

a[0]=time%10;//时间个位数赋值给a[0]

a[1]=time/10;//时间十位数赋值给a[1]

SM1=0;SM0=0;//串行口工作方式0设定

for(i=1;i>=0;i--)//将数送到SBUF区域

{SBUF=table[a[i]];

while(!

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

TI=0;//若发送完,0赋给TI

}

}

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;//外部中断INT0开启

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开始倒计时

{

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);//flag=1,显示东西19

P1=0xdd;//南北绿灯,东西红灯

flag=0;

}

if(ew_time<=5)//东西时间<=5时,南北黄灯闪烁,东西红灯

{

while(!

flag);

flag=0;

display(ns_time);//从5开始倒计时显示

P1=0xdf;//东西红灯,南北黄灯一亮一灭显示

/*p1_4=0;*/

delay(5000);

p1_0=~p1_0;

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

delay(5000);

}

if(ew_time==0)

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

a=1;

}

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

{

ns_time=ew_time_red;

ew_time=ns_time_green+ns_time_yellow;

}

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

{

if(ns_time-5>0)//南北红灯,东西绿灯

{

while(!

flag);

display(ns_time-5);//flag=0,显示东西14

delay(5000);//延时子函数调用

P1=0xeb;//南北红扥个,东西绿灯显示

}

if(ns_time-5<=0)//南北时间<=5时南北红灯,东西黄灯闪烁

{

while(!

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

flag=0;

display(ns_time,ns_time);//东西,南北均从5开始倒计时显示

P1=0xfb;//南北红灯,东西黄灯一亮一灭显示

p1_3=~p1_3;

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

delay(5000);//延时函数调用

}

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

a=0;

}

}

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

{

TH0=0x3c;//定时50ms初值设定

TL0=0xb0;

point--;//20次T0定时次数控制

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

{

flag=1;

point=20;

if(ns_time!

=0)

ns_time--;

if(ew_time!

=0)

ew_time--;

}

}

voidint0(void)interru

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

当前位置:首页 > 表格模板 > 合同协议

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

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