单片机实训汇编.docx

上传人:b****7 文档编号:9332965 上传时间:2023-02-04 格式:DOCX 页数:22 大小:137.28KB
下载 相关 举报
单片机实训汇编.docx_第1页
第1页 / 共22页
单片机实训汇编.docx_第2页
第2页 / 共22页
单片机实训汇编.docx_第3页
第3页 / 共22页
单片机实训汇编.docx_第4页
第4页 / 共22页
单片机实训汇编.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

单片机实训汇编.docx

《单片机实训汇编.docx》由会员分享,可在线阅读,更多相关《单片机实训汇编.docx(22页珍藏版)》请在冰豆网上搜索。

单片机实训汇编.docx

单片机实训汇编

桂林电子科技大学信息科技学院

《单片机原理及应用》实训报告

 

实训题目:

交通灯控制系统

1系统设计

1.1设计要求

1.1.1设计任务

利用51单片机控制各个路口红绿灯及时间显示。

模拟交通灯示意图:

设计的重点:

1、各个路口红绿灯亮灭的规则,暂不考虑左转方向;

2、倒计时的实现,利用单片机的定时器进行计数得到秒信号;

3、时间显示:

东西南北四个方向的时间一致,当东西方向为60秒绿灯通行时间,同时南北方向为60秒红灯禁止时间,因此硬件连接时可考虑东西南北方向可采用同一接法;最后相当于2个数码管动态显示,具体见参考电路框图。

4、按键设置(扩展要求):

设置键按一次,设置主干道通信时间(即次干道禁止时间),按第二次,设置主干道禁止时间(即次干道通信时间),按第三次,可作为紧急通信键。

设置时间需要确定,可通过确定键实现,也可通过延时确定,如10秒。

当然也可根据需要增加相应的按键。

1.1.2性能指标要求

1、各方向的红、绿色信号灯能按照设定规则运行;

2、绿灯亮之前,黄灯闪烁5次;

3、红灯和绿灯倒计时间能够正确显示;

4、两干道的车辆不会会车冲突。

5、可以扩展其他功能(如按键设置时间,按键模拟警车。

1.2设计思路及设计框图

1.2.1设计思路

设计需要用到12个发光二极管中,颜色红、绿、黄。

将其中的红,黄,绿(各两盏)作为东西方向的指示灯,将红,黄,绿(各两盏)作为南北方向的指示灯。

交通灯的亮灭规律为:

南北路口的绿灯亮,东西路口的红灯亮,南北方向通车,延时一段时间后,南北路口绿灯灭,黄灯开始闪烁,而南北方向人行道的绿灯闪烁亮。

闪烁若干次后,南北路口红灯亮,而同时东西路口的绿灯亮,东西方向开始通车,延时一段时间后,东西路口的绿灯灭,黄灯开始闪烁,闪烁若干次后,再切换到东西路口方向,重复上述过程。

各发光二极管的阳极通过保护电阻接到+5V的电源上,阴极接到输入端上,因此使其点亮使相应输入端为低电平。

1.2.2总体设计框图

 

 

 

2各个模块电路的设计

2.1单片机AT89S52模块

核心部分

2.2时钟电路模块

时钟电路模块给单片机提供特定的时钟周期,以备单片机工作使用。

单片机的机器周期12MHz。

2.3复位电路模块

采用上电+按键电平复位,复位电容用10UF用10k的电阻。

为了让RST脚持续两个高电平的机器周期就复位。

 

2.4按键模块

 

 

P3.0为总按键,P3.1为加按键,P3.2为减按键,P3.3为紧急情况按键;

 

2.5LED灯模块

南北方向通行,东西方向禁止通行

 

红绿灯改变之前黄灯亮5S;

东西方向通行,南北方向禁止通行;

 

3开发软件简介及程序的设计

3.1单片机AT89S52介绍

AT89S52是一个低电压,高性能CMOS型8位单片机,片内含8KB的可反复擦写的Flash只读程序存储器(ROM)和256B的随机存取数据存储器(RAM)。

AT89S52是一个低功耗高性能单片机,40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,2个16位可编程定时计数器,2个全双工串行通信口,AT89S52可以按照常规方法进行编程,也可以在线编程。

其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。

引脚使用说明:

I/O端口的编程实际上就是根据应用电路的具体功能和要求对I/O寄存器进行编程。

具体步骤如下:

l.根据实际电路的要求,选择要使用哪些I/O端口。

2.初始化端口的数据输出寄存器,应避免端口作为输出时的开始阶段出现不确定状态,影响外围电路正常工作。

3.根据外围电路功能,确定PO端口的方向,初始化端口的数据方向寄存器。

对于用作输入的端口可以不考虑方向初始化,因为PO的复位缺省值为输入。

4.用作输入的PO管脚,需上拉电阻。

5.最后对I/O端口进行输出(写数据输出寄存器)和输入(读端口)编程,完成对外围电路的相应功能。

几个特殊管脚:

XTAL1:

反向振荡放大器的输入及内部时钟工作电路的输入。

XTAL2:

来自反向振荡器的输出。

RST:

复位输入。

当振荡器复位器件时,要保持RST脚两个机器周期的高电平。

3.2KeilC编程软件

KeilC51µVision2集成开发环境是KeilSoftware,Inc/KeilElektronikGmbH开发的基于80C51内核的微处理器软件开发平台,内嵌多种符合当前工业标准的开发工具,可以完成从工程建立到管理、编译、链接、目标代码的生成、软件仿真、硬件仿真等完整的开发流程尤其是C编译工具在产生代码的准确性和效率方面达到了较高的水平,而且可以附加灵活的控制选项,在开发大型项目时非常理想。

KeilC51集成开发环境的主要功能有以下几点:

(1)µVision2forWindows:

是一个集成开发环境,它将项目管理、源代码编辑和程序调试等组合在一个功能强大的环境中;

(2)C51国际标准化C交叉编译器:

从C源代码产生可重定位的目标模块;

(3)A51宏汇编器:

从80C51汇编源代码产生可重定位的目标模块;

(4)BL51链接器/定位器:

组合由C51和A51产生的可重定位的目标模块,生成绝对目标模块;

(5)LIB51库管理器:

从目标模块生成连接器可以使用的库文件;

(6)OH51目标文件至HEX格式的转换器,从绝对目标模块生成IntelHex文件;

(7)RTX-51实时操作系统:

简化了复杂的实时应用软件项目的设计。

3.3双龙烧录软件

一款功能全面、操作简易的烧录软件,使用该软件可以从电脑用数据线直接将C程序或汇编程序通过并口直接下载烧录到Ateml的单片机芯片,也可以进行反复擦写的操作。

3.4C语言

C语言是一种计算机程序设计语言。

它既有高级语言的特点,又具有汇编语言的点。

它可以作为系统设计语言,编写工作系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。

因此,它的应用范围广泛。

C语言对操作系统和系统使用程序以及需要对硬件进行操作的场合,用C语言明显优于其它解释型高级语言,有一些大型应用软件也是用C语言编写的。

C语言具有绘图能力强,可移植性,并具备很强的数据处理能力,因此适于编写系统软件,三维,二维图形和动画。

它是数值计算的高级语言。

常用的C语言IDE(集成开发环境)有MicrosoftVisualC++,BorlandC++,Watcom

C++,BorlandC++,BorlandC++Builder,BorlandC++3.1forDOS,WatcomC++11.0

forDOS,GNUDJGPPC++,Lccwin32CCompiler3.1,MicrosoftC,HighC,Turbo

C,Dev-C++,C-Free等等。

  

 

4调试过程

首先拿到元器件先检查各个元器件的性能和类型,比如数码管的类型共阴还是共阳。

两组发光管(一组红、一组绿)实现红停绿走的状态。

电阻串联的二极管的作用是为了分压,防止因上下两组发光管分压不同导状态变化。

将下载好的程序下载在芯片内,开电源即可。

为了实现倒计时状态,添加数码管,将串口的和电路板上的下载口连接,将写好的测试程序下载到芯片内,开电源即可测试。

刚焊接好电路板以及编写好程序后,就是进行调试。

刚开始,我插上电源,发现板子上的LED全都没有反应,数码管也没有进行动态扫描,进过检查,发现单片机的GND脚连接错了地方,便进行了修改。

之后接电之后发现通电正常,可是板子有些接触不良,时亮时不亮,我便再次检查板子。

因为我的板子有许多通路是用焊锡连上的,所以可能是焊锡之间有段路,所以我对每条通路都检查了一遍,便成功的解决了这个问题。

做好板以后插上电源,把下载好的程序下载到芯片上即可开始测试,观测一个周期(共计东南西北四个方向的灯的四个状态和突发事件功能)灯的显示状态是否正常,同时观察倒计的计数是否正常,并且看看突发事件的功能是否正常。

LED灯的亮灭与我预期的有些不一样,并且数码管显示的数值有些错乱,我又从程序下手,对每个管脚仔细的检查,最后把整个电路成功的调试了出来。

5功能测试

5.1测试仪器与设备

Keil软件、Proteus仿真软件、提供的5V电源;

5.2性能指标测试

1、各方向的红、绿色信号灯能按照设定规则运行;

2、绿灯亮之前,黄灯闪烁5次;

3、红灯和绿灯倒计时间能够正确显示;

4、两干道的车辆不会会车冲突。

5、通过按键实现紧急情况东西南北均为红灯;

6实训心得体会

这次的单片机实训对于我来说不是很容易,因为单片机的理论课我学的不是很好。

因此我选择了这次实训中比较容易的一个:

交通灯。

因为是生活中比较常见的所以我觉得自己思路还是比较清晰的,对于实训有很大的帮助。

软件方面,程序用我们所学的C语言就能编写出来,大部分是书中提到的内容,由于学的不好,即便书上提到也用不出,所以借鉴别人的程序,请教于同学讲解及查阅相关资料。

最重要的就是制作工程中的细节要认真掌握好。

接线不再是靠PCB印刷版了,所以每一条线都要认真的找好位置,还有就是焊点有时候会比较集中,所以得注意焊点与焊点之间的距离,避免短路。

这次的焊接对于整个实训来说我认为是至关重要的一环,没有良好的耐心还是比较困难的,尤其对男生来说。

可是每一件事都不会是很轻松的就让你完成,其中的艰难困苦都需要你自己去面对和征服,这也告诉我们一个道理,在生活中遇到困难我们不能一味的只知道躲避,而是迎难而上,正阳你才有成功的可能!

通过这次实训,让我更熟悉掌握了KeiluVision3,这些应用程序的运用,和完整的操作,现在我自己开始懂得了如何编写一些简单的程序,虽然我们上过单片机试验,通过这次实战使我更深了解并学会了如何制作单片机应用程序,更加巩固了我的焊接和程序这方面的知识。

错误是难免的,重要的是改正。

训暴露出来的种种问题,有助于提高我们在以后的工作和学习中对此类问题的认识,确保不在同一问题上再次犯错。

这也同时告诉我们,在生活中我们不要害怕失败,只要及时改正不在同一个地方摔倒两次,那么我们的失败就不算真正意义上的失败。

这次的实训不仅让我从中学到了东西,锻炼了自己,更重要的是我还从中体会到了一些道理,因此这次的实训对我来说收获是巨大的。

最后也要感谢老师以及同学的帮助,让我成功的完成了这次实训。

7参考文献

(1)《单片机中级教程》张迎新主编北京航空航天大学出版社。

(2)《单片机原理与应用》丁元杰主编机械工业出版社。

(3)《MCS-51系列单片微型计算机及其应用》孙育才主编东南大学出版社。

(4)《单片机原理与应用技术》李建民、喻晗西安电子科技大学出版社。

(5)《MCS-51系列单片机应用系统设计》何立民北京航空航天大学出版社。

(6)《单片机原理与应用》孙俊逸张铮清华大学出版社。

 

附录

附录1:

电路原理图

 

 

附录2:

程序清单

#include

#include

#defineucharunsignedchar

#defineuintunsignedint

ucharmstcnt;//定义时间

charseconde,time_max;//定义秒

ucharrun;//行走方向

ucharcross_flag;

ucharcodeTab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,

0x7f,0x6f};

ucharslnum;

sbits1=P3^0;

sbits2=P3^1;

sbits3=P3^2;

sbits4=P3^3;

sbitr1=P1^2;

sbity1=P1^1;

sbitg1=P1^0;

sbitr2=P1^5;

sbity2=P1^4;

sbitg2=P1^3;

 

sbitsmg1=P2^0;//个位

sbitsmg2=P2^1;//十位

voidDelay1ms(uintxms);

voidInit();//初始化

voidLight();//灯

voidDispaly();

voidNBCross();

voidDXCross();

voidWait();

voidAllRed();

voidKeyScan();

 

voidInit()//初始化

{

TMOD=0x11;//T0方式3

TH0=0x3c;

TL0=0xb0;

TR0=1;//T0停控制位

ET0=1;

EA=1;

time_max=17;

seconde=time_max;

run=0;

}

voidDisplay(void)//显示

{

smg1=0;

smg2=1;

P0=Tab[seconde%10];

Delay1ms

(1);

smg1=1;

smg2=0;

P0=Tab[seconde/10];

Delay1ms

(1);

}

 

voidNBCross()

{

r1=0;

r2=1;

 

g1=1;

g2=0;

 

y1=1;

y2=1;

}

 

voidDXCross()

{

r1=1;

r2=0;

g1=0;

g2=1;

 

y1=1;

y2=1;

}

 

voidWait()

{

uchari;

r1=1;

r2=1;

 

g1=1;

g2=1;

smg1=1;

smg2=1;

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

{

y1=0;

y2=0;

Delay1ms(100);

y1=1;

y2=1;

Delay1ms(100);

}

}

 

voidAllRed()//紧急通道

{

r1=0;

r2=0;

 

g1=1;

g2=1;

 

y1=1;

y2=1;

}

 

voidLight()

{

if(run==0)//南北方向通行

{

NBCross();

}

if(run==1)//黄灯闪烁

{

EA=0;

run=2;

Wait();

TH0=0x3c;

TL0=0xb0;

EA=1;

}

if(run==2)//东西方向通行

{

DXCross();

}

if(run==3)//黄灯闪烁

{

EA=0;

run=0;

Wait();

TH0=0x3c;

TL0=0xb0;

EA=1;

}

if(run==4)//全部红灯

{

AllRed();

}

}

 

voidKeyScan()

{

if(s1==0)

{

Delay1ms(5);

{

if(s1==0)

{

while(!

s1);

if(slnum==1)

{

slnum=0;

EA=1;

}

else

{

slnum=1;

EA=0;

seconde=time_max;

}

}

}

}

if(slnum==1)

{

if(s2==0)

{

Delay1ms(5);

{

if(s2==0)

{

while(!

s2);

time_max++;

seconde=time_max;

}

}

}

}

if(slnum==1)

{

if(s3==0)

{

Delay1ms(5);

{

if(s3==0)

{

while(!

s3);

time_max--;

seconde=time_max;

}

}

}

}

if(s4==0)

{

Delay1ms(5);

{

if(s4==0)

{

while(!

s4);

if(run==4)

{

EA=1;

run=0;

}

else

{

EA=0;

run=4;

}

}

}

}

}

 

/*定时器0程序用于显示时间*/

voidtimer0(void)interrupt1using0

{

TH0=0x3c;

TL0=0xb0;//50ms

mstcnt++;

if(mstcnt==20)//循环20次,50*20ms=1s

{

seconde--;//递减

mstcnt=0;

if(seconde==-1)

{

run++;

seconde=time_max;

}

}

}

voidMain()

{

Init();

while

(1)

{

Display();

Light();

KeyScan();

}

}

 

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

当前位置:首页 > 高等教育 > 文学

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

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