单片机原理课程设计报告初稿4Word下载.docx

上传人:b****5 文档编号:16157901 上传时间:2022-11-21 格式:DOCX 页数:17 大小:359.67KB
下载 相关 举报
单片机原理课程设计报告初稿4Word下载.docx_第1页
第1页 / 共17页
单片机原理课程设计报告初稿4Word下载.docx_第2页
第2页 / 共17页
单片机原理课程设计报告初稿4Word下载.docx_第3页
第3页 / 共17页
单片机原理课程设计报告初稿4Word下载.docx_第4页
第4页 / 共17页
单片机原理课程设计报告初稿4Word下载.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

单片机原理课程设计报告初稿4Word下载.docx

《单片机原理课程设计报告初稿4Word下载.docx》由会员分享,可在线阅读,更多相关《单片机原理课程设计报告初稿4Word下载.docx(17页珍藏版)》请在冰豆网上搜索。

单片机原理课程设计报告初稿4Word下载.docx

亮:

人行白灯,东西、南北直行红灯

不亮:

左转白灯

15s

左转白灯,东西、南北直行红灯

人行白灯

20s

东西直行绿灯,南北直行红灯

人行白灯,左转白灯

12s

东西直行黄灯,南北直行红灯

3s

南北直行绿灯,,东西直行红灯

17s

南北直行黄灯,,东西直行红灯

主要硬件设备:

AT89C51单片机、8155I/O口扩展芯片、LED输出模块、拨码开关、六位数码管显示器。

2.整体方案设计

百货大楼人车分行交通信号指挥灯系统以AT89C51单片机作为整个系统的控制核心,应用其强大的接口功能,构成整个交通信号指挥灯控制的硬件系统。

该系统将C语言编译的程序送入单片机,经单片机接收后通过其端口来控制各个模块,从而实现交通信号灯各个功能。

本系统硬件主要AT89C51单片机、8155I/O口扩展芯片、LED输出模块、拨码开关、六位数码管显示器,蜂鸣器六部分组成。

各模块的主要功能如下:

(1)AT89C51作为整个系统的控制核心,通过编程控制各个模块;

(2)8155的功能是控制数码管显示器;

(3)LED输出模块的功能是指示两个路口的红绿灯、人行及左转白灯变化情况;

(4)数码管显示器的功能是显示倒计时时间;

(5)拨码开关的功能是在儿童误闯状况时按下,使蜂鸣器发出报警声,防止发生交通事故。

系统的整体设计方案设计图如图2-1所示。

图2-1系统的整体方案设计图

3.统硬件电路设计

3.1时钟电路

AT89C51单片机内部有一个用于构成振荡器的高增益反相放大器,该高增益反相放大器的输入端为芯片引脚XTAL1,输出端为引脚XTAL2。

这两个引脚跨接石英晶体振荡器和微调电容,就构成一个稳定的自激振荡器,如图3-1所示。

图3-1AT89C51内部时钟方式的电路图

3.2复位电路

单片机AT89C51的复位是由外部的复位电路来实现的,采用了按键电平复位电路,RST端经电阻和电源VCC接通,经电容的充放电来维持两个机器周期的高电平从而实现复位,如图3-2所示。

图3-2按键电平复位电路图

3.38155I/O口扩展芯片的基本介绍

图3-38155I/O口扩展芯片引脚图

(1)其基本外型如图3-3所示。

(2)管脚说明:

1)VCC:

供电电压。

2)VSS:

接地端。

3)AD7~AD0(8条):

为地址/数据线,与AT89C51单片机的P0口相连,用于实时传送地址/数据信息。

4)I/O总线(22条):

PA7~PA0为通用I/O线,用于传送PA口上的外部设备数据,数据传送方向由写入8155的命令字决定;

PB7~PB0为通用I/O线,,用于传送PB口上的外部设备数据,数据传送方向也由写入8155的命令字决定;

PC5~PC0为数据/控制线,共6条,在通用I/O方式下,用作传送I/O数据;

在选通I/O方式下,用作传送命令/状态欣信息。

5)控制总线(8条):

RESET:

复位输入线。

CE*和IO/M*:

片选线。

RD*和WR*:

读写控制线。

ALE:

允许地址输入线。

TIMERIN和TIMEROUT*:

计数器输入、输出线。

3.4AT89C51单片机的基本介绍

(1)其基本引脚如图3-4所示。

图3-4AT89C51单片机引脚图

(2)管脚说明:

2)GND:

3)P0口:

是一个8位漏极开路的双向I/O口,每脚可吸收8个TTL门流;

可用于外部程序数据存储器,可以被定义为数据/地址的低八位。

4)P1口:

是一个由内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4个TTL门电流。

5)P2口:

P2是一个带有内部上拉电阻的8位准双向I/O口,P2即可作为通用的I/O口使用,也可以作为片外存储器的高8位地址总线,与P0口配合,组成16位片外存储器单元地址。

6)P3口:

P3口是一组带有内部上拉电阻的8位准双向I/0口。

P3口除了作为通用的I/O口使用之外,每个引脚还具有第二功能,具体分配如表3-1所示。

表3-1P3口第二功能的引脚表

端口引脚

第二功能:

P3.0

RXD(串行输入口)

P3.1

TXD(串行输出口)

P3.2

INT0*(外中断0)

P3.3

INT1*(外中断1)

P3.4

T0(定时/计数器0外部输入)

P3.5

T1(定时/计数器1外部输入)

P3.6

WR*(外部数据存储器写选通)

P3.7

RD*外部数据存储器读选通)

7)RST:

复位输入;

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

8)ALE/PROG:

当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地址字节。

ALE端以固定不变的频率周期输出正脉冲信号,可用于对外部输入的脉冲计数或定时。

9)PSEN*:

外部程序存储器的选通信号。

10)EA*/VPP:

当/EA保持低电平时,访问外部程序存储器;

EA*保持高电平时,访问内部程序存储器。

11)XTAL1:

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

12)XTAL2:

来自反向振荡器的输出。

3.4倒计时6位数码管显示电路

LED显示屏作为大型显示设备的一种,具有亮度高、价格低、寿命长、维护简便等优点。

LED数码管的结构简单,分为七段和八段两种形式,也有共阳和共阴之分。

以八段共阳管为例,它有8个发光二极管(比七段多一个发光二极管,用来显示dP,即点),每个发光二极管的阳极连在一起。

这样,一个LED数码管就有I根位选线和8根段选线,要想显示一个数值,就要分别对它们的高低电平来加以控制。

为方便起见,本文主要讨论共阳八段LED数码显示管,其他类形的显示管与其类似,如图3-6所示。

图3-5LDE数码管

3.58个LED灯输出模块电路

对于百货大楼十字路口分东西直行,南北直行,东西南北左转,人行四个状态,东西直行由黄绿红灯为L1、L2、L3表示;

南北直行由黄绿红灯为L5、L6、L7表示;

东西南北的左转由白灯为L8表示,人行也由白灯为L9表示。

共8个LED灯,为共阳极;

L1-L8阴极依次连接到P1.7-P1.0,阳极都接到电源VCC上。

3.6开关量紧急按钮

防止由于紧急情况发生交通事故,故设置有紧急按钮,由AT89C51的P3.2的INT0*接收中断,连接一个开关K。

4.系统程序设计

4.1主程序及控制子程序流程图

主程序及控制子程序工作流程:

路口共六个状态:

人行白灯、左转白灯、东西直行绿灯、东西直行黄灯、南北直行绿灯、南北直行黄灯。

开始先确定指示灯倒计时时间,扫描显示6个数码管,扫描满20次的话倒计时时间减1,;

扫描不满20次的话返回继续扫描数码管;

再确定路口指示灯状态,调用之前定义的数组变量,并依据状态顺序选择8个LED灯的亮灭,如图4-1所示。

图4-1系统主程序流程

4.2中断子程序流程图

中断子程序工作流程:

外部中断0:

开启定时器0,如图4-2所示。

图4-2外部中断0程序流程图

定时器0:

每次中断前计时50ms,计时4次总计200ms,使p3.0输出电平每200ms变化一次,以控制蜂鸣器发出的声音,并循环,如图4-3所示。

图4-3定时器0中断程序流程图

定时器1:

每次中断前计时50ms,计时20次共1s,每经过1s交通灯计时数据减小,当交通灯计时数据减小为0时,交通灯计时数据,数码管显示以及灯的显示情况进入下一个状态,状态循环,如图4-4所示。

图4-4定时器1中断程序流程图

5.系统调试

5.1Proteus软件仿真调试

(1)一开始用Proteus仿真时,由P0口控制数码管的段选,而每次选择开关数码管的位选信号改变较快,使得本应该控制前一位数码管的段选信号却能在后一位数码管上显示出来,。

后改用P2口控制数码管段选信号,P3.6、P3.7做片选信号。

P1口做LED灯的控制信号。

(2)在Proteus仿真软件中6个独立的7SEG-COM-ANODE型号的数码管和单片7SEG-MPX6-CA的用法不同,前者是理想的数码管(即不同于实际数码管在关断时仍有余晖的现象,该型数码管只在位选选中或电源端供电时才亮),而后者由于存在余晖现象,所以运行时表现出每位数码管都亮的现象。

(3)在循环控制数码管计数自减1时,只注意循环次数,忘记在循环体中给数码管赋新的值,使得数码管显示的数字没有隔一秒自减1,只在下一个循环时突然减小。

改进后,在循环体中每次循环都对倒计时的数字自减1。

(4)用蓝灯模拟行人和左转通行灯,用组两位数码管倒计时模拟十字路口红绿灯倒计时,用红绿灯分别模拟东西南北直行的状态灯。

(5)用蓝灯闪烁模拟硬件中突发状况下,蜂鸣器报警时“滴、滴、滴、滴”的报警声。

(6)软件仿真时由于软件中8155芯片的各控制口地址与硬件中8155的地址计算方法不同,无法正常输出期望的信号,故软件仿真时,未采用8155芯片,而是采取了直接连数码管段选、位选信号的措施。

(7)经过数次调试,最终用Proteus仿真软件实现了模拟十字路口交通灯的控制。

改进前仿真电路原理,如图5-1所示。

图5-1改进前的Proteus软件仿真原理图

改进后仿真电路原理,如图5-2所示。

图5-2改进后的Proteus软件仿真原理图

5.2硬件调试

硬件调试是利用开发系统、基本测试仪器(万用表、示波器等),检查用户系统硬件中存在的故障。

硬件调试分为静态调试与动态调试两步进行。

(1)使用菊阳仿真器和菊阳仿真软件时,没有对编译器初始化,所以不能实现单片机和PC机的通讯。

(2)程序中使用跳沿触发中断服务子程序,如果把开关打到低电平位置上,于是在实验箱刚上电时,P3.2中断引脚会先置高电平,再被开关拉到低点电平,相当于产生了负跳沿,所以一开机就进入中断程序。

为了避免出现上述现象,在程序中先把中断触发开关置高电平,这样就能使得中断引脚不会被拉低,没有误动作。

(3)实验箱上的LED数码管模块和按键模块都可以由8155控制,本次课程设计,选择用8155控制数码管模块。

(4)由于需要6个LED灯表示东西、南北直行的红绿黄灯,4个LED灯表示人行、左转红绿灯,共需要十个灯,而实验箱上一组LED灯只有八个不够用,所以定义从左往右第四个白灯亮表示为人行的绿灯,不亮表示人行红灯;

最右侧的白灯为左转的绿灯,不亮表示左转红灯。

6.程序清单

#include<

reg52.h>

absacc.h>

sbitdi=P3^0;

sbitd=P3^2;

#defineucharunsignedchar

#defineuintunsignedint

#defineCOMXBYTE[0xff20]

#definePAXBYTE[0xff21]

#definePBXBYTE[0xff22]

#definePCXBYTE[0xff23]

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

ucharxianshi[]={15,20,12,3,17,3};

uchardeng[]={0xb3,0x3b,0xbd,0xbe,0xdb,0xeb};

voiddelayms(uint);

voiddisplay(uchar,uchar);

ucharnum,num1,num2,shi,ge,i;

voidmain()

{

di=1;

COM=0x43;

i=0;

P1=0xb3;

num=15;

EX0=1;

IT0=1;

TMOD=0x11;

TH0=(65536-45872)/256;

TL0=(65536-45872)%256;

TH1=(65536-45872)/256;

TL1=(65536-45872)%256;

EA=1;

ET1=1;

TR1=1;

while

(1)

{

if(d==1)

{

di=1;

TR0=0;

}

display(shi,ge);

}

}

voiddisplay(ucharshi,ucharge)

PB=table[shi];

PA=0xfd;

delayms(5);

PB=table[ge];

PA=0xfe;

voiddelayms(uintxms)

uinti,j;

for(i=xms;

i>

0;

i--)

for(j=110;

j>

j--);

voiddidi()interrupt0

ET0=1;

TR0=1;

voiddididi()interrupt1

num1++;

if(num1==4)

num1=0;

di=~di;

voidT1_time()interrupt3

num2++;

if(num2==20)

num2=0;

num--;

if(num==0)

if(i==5)

i=0;

else

i++;

num=xianshi[i];

P1=deng[i];

shi=num/10;

ge=num%10;

7.小结

本次课程设计题目为百货大楼十字路口人车分行交通信号灯系统,由于与上次的PLC课程设计题目一致,所以就用上次实地测得的交通信号数据进行了本次单片机课程设计的设计。

具体设计步骤是,先在KAIL中创建一个工程,在工程中用C语言进行编程,具体编程思路是在定时器中完成及时,从而完成对输出数据、输出灯状态、蜂鸣器的操作,同时再通过数码管译码及动态扫描,完成输出数据在数码管上的显示,完成编程并编译通过后,再通过JY2X00IDE软件进行硬件仿真,如有问题再进行程序的修改,直到硬件功能的实现,最后再在Proteus软件中画出仿真电路再进行软件仿真,直到实现功能即可。

本次课程设计遇到了如下问题,首先在未软件仿真的情况下,直接将程序拷了进去进行了硬件仿真,虽然8个LED灯实现了红绿灯的基本功能,即东西直行红绿黄,南北直行红绿黄,左转白灯,人行白灯,但是倒计时数码管却六位全亮,并没有实现倒计时的功能。

经过小组成员讨论后发现,P0口无法实现给高电平,所以不能直接接数码管,但用别的口又存在口不够用的问题,所以就用了8155,改了之后发现还是不行,通过探讨发现是接错了引脚,实验箱的8155模块引脚地址与教科书上给出的不太一样,查询实验箱的说明手册更改引脚之后成功的解决了这一问题,实现了数码管的倒计时显示。

在软件仿真方面也出现了不会画总线的问题,最终通过查阅网上的相关资料得以解决并成功的画出电路图并实现了软件仿真。

这次课程设计收获很多,首先能自己利用KAIL软件进行C语言编程,学会了用Proteus软件进行画仿真图并进行软件仿真,还进一步熟练了JY2X00IDE软件的硬件仿真,通过大家的努力探讨和学习,和对问题的发现与解决,使学到了很多课本上没有的东西,加强了动手能力,收益甚多。

在答辩的基础上,依据老师的指导,对软件仿真再次进行了完善,同时将老师提出的几个问题进行了查阅,在C语言编程的时候,我们可以用单步运行的方法来观察每一个语句的执行时间,最后将所有语句执行时间累加起来得到延时时间;

也先可以将C语言汇编成机器语言,再对每个语句所用机器周期进行累加来得到最后的延时。

PLC技术使用了单片机技术,PLC技术不是单片机技术的延伸。

PLC是建立在单片机之上的产品,单片机是一种集成电路。

单片机可以构成各种各样的应用系统,从微型、小型到中型、大型都可,PLC是单片机应用系统的一个特例。

用打比方的方式来形容就是:

单片机比方为一张白纸,PLC比方为在白纸上画好的表格,则使用单片机技术就象在白纸上写字,使用PLC技术就象是填表格;

掌握单片机技术就象学会写字的能力,掌握PLC技术就象是学会看表格和填表格的能力。

可见单片机技术发展空间很大,因为你想要什么,就可以写什么。

而PLC技术里肯定有一些表格是不用的,也会有些表格空间是不够用的。

再者单片机技术资源让费要比PLC技术少。

因为单片机技术就像你要写多少字就用多少纸,而PLC技术就像有些表格是不用的,必然造成更大让费。

对于以后的展望方面,自然是希望多做些像这样能锻炼自己动手能力和自学能力的课程设计,对于单片机还研究的不是很多,希望能借用这个课程设计的机会以后对单片机进行更深入的研究。

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

当前位置:首页 > 解决方案 > 工作计划

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

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