PROTEUS跑马灯单片机课程设计.docx

上传人:b****5 文档编号:4421605 上传时间:2022-12-01 格式:DOCX 页数:10 大小:70.04KB
下载 相关 举报
PROTEUS跑马灯单片机课程设计.docx_第1页
第1页 / 共10页
PROTEUS跑马灯单片机课程设计.docx_第2页
第2页 / 共10页
PROTEUS跑马灯单片机课程设计.docx_第3页
第3页 / 共10页
PROTEUS跑马灯单片机课程设计.docx_第4页
第4页 / 共10页
PROTEUS跑马灯单片机课程设计.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

PROTEUS跑马灯单片机课程设计.docx

《PROTEUS跑马灯单片机课程设计.docx》由会员分享,可在线阅读,更多相关《PROTEUS跑马灯单片机课程设计.docx(10页珍藏版)》请在冰豆网上搜索。

PROTEUS跑马灯单片机课程设计.docx

PROTEUS跑马灯单片机课程设计

三、电路设计及功能说明,硬件原理框图及电路图(包括接口芯片简介);

本次设计采用AT89C52芯片驱动可编程接口芯片8255的扩展来实现LED灯的多种显示方式。

让AT89C52芯片的P0口与8255芯片的三态双向数据总线D0~D7连接,实现数据传送。

当CPU执行输入输出指令时,通过它实现8位数据的读/写操作,控制字和状态信息也通过数据总线传送。

8255的地址选择线A1、A0分别与AT89C52的P2.7和P2.6连接,通过定义不同的地址来定义8255芯片PA口和PB口的工作方式。

读写命令线分别与单片机的读写命令线相连,片选线直接接地,复位线RESET接单片机的P2.5。

同时PA口与8个LED灯顺序连接。

PB口与8个LED灯逆序连接,通过按键控制可以选择不同的运行模式,实现多种跑马灯的运行模式。

硬件原理框图

 

电路图

接口芯片简介

(1)AT89C52

AT89C52是51系列单片机的一个型号,它是ATMEL公司生产的。

  AT89C52是一个低电压,高性能CMOS8位单片机,片内含8kbytes的可反复擦写的Flash只读程序存储器和256bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,功能强大的AT89C52单片机可为您提供许多较复杂系统控制应用场合。

  AT89C52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2个读写口线,AT89C52可以按照常规方法进行编程,但不可以在线编程(S系列的才支持在线编程)。

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

  AT89C52有PDIP、PQFP/TQFP及PLCC等三种封装形式,以适应不同产品的需求。

  主要功能特性:

  ·兼容MCS51指令系统·8k可反复擦写(>1000次)FlashROM

  ·32个双向I/O口·256x8bit内部RAM

  ·3个16位可编程定时/计数器中断·时钟频率0-24MHz

  ·2个串行中断·可编程UART串行通道

  ·2个外部中断源·共6个中断源

  ·2个读写中断口线·3级加密位

·低功耗空闲和掉电模式·软件设置睡眠和唤醒功能

(2)8255芯片

8255特性

  

(1)一个并行输入/输出的LSI芯片,多功能的I/O器件,可作为CPU总线与外围的接口.

  

(2)具有24个可编程设置的I/O口,即使3组8位的I/O口为PA口,PB口和PC口.它们又可分为两组12位的I/O口,A组包括A口及C口(高4位,PC4~PC7),B组包括B口及C口(低4位,PC0~PC3).A组可设置为基本的I/O口,闪控(STROBE)的I/O闪控式,双向I/O3种模式;B组只能设置为基本I/O或闪控式I/O两种模式,而这些操作模式完全由控制寄存器的控制字决定.

  8255引脚功能

  RESET:

复位输入线,当该输入端处于高电平时,所有内部寄存器(包括控制寄存器)均被清除,所有I/O口均被置成输入方式。

CS:

芯片选择信号线,当这个输入引脚为低电平时,即/CS=0时,表示芯片被选中,允许8255与CPU进行通讯;/CS=1时,8255无法与CPU做数据传输

  RD:

读信号线,当这个输入引脚为低电平时,即/RD=0且/CS=0时,允许8255通过数据总线向CPU发送数据或状态信息,即CPU从8255读取信息或数据。

  WR:

写入信号,当这个输入引脚为低电平时,即/WR=0且/CS=0时,允许CPU将数据或控制字写入8255。

  D0~D7:

三态双向数据总线,8255与CPU数据传送的通道,当CPU执行输入输出指令时,通过它实现8位数据的读/写操作,控制字和状态信息也通过数据总线传送。

  PA0~PA7:

端口A输入输出线,一个8位的数据输出锁存器/缓冲器,一个8位的数据输入锁存器。

  PB0~PB7:

端口B输入输出线,一个8位的I/O锁存器,一个8位的输入输出缓冲器。

  PC0~PC7:

端口C输入输出线,一个8位的数据输出锁存器/缓冲器,一个8位的数据输入缓冲器。

端口C可以通过工作方式设定而分成2个4位的端口,每个4位的端口包含一个4位的锁存器,分别与端口A和端口B配合使用,可作为控制信号输出或状态信号输入端口。

'

  A0,A1:

地址选择线,用来选择8255的PA口,PB口,PC口和控制寄存器.

  当A0=0,A1=0时,PA口被选择;

  当A0=0,A1=1时,PB口被选择;

  当A0=1,A1=0时,PC口被选择;

当A0=1.A1=1时,控制寄存器被选择.

四、软件部分的程序流程图,算法和使用的编程技巧;

1.程序流程图

 

 

2.算法

编译两个函数,分别是voiddisplay()函数和voiddelay()函数,前者是LED显示函数,后者是延时函数。

程序的开始,先定义各个参数、各口的地址以及各个位。

主函数中,定义y1、y2分别为PA口PB口的相应地址,控制各个LED灯的亮灭;m为显示函数voiddisplay()中for循环的个数,控制LED灯亮灭循环;k1、k2分别为PA口PB口地址转移的个数,控制PA口PB口地址转移的方式;t为延迟的参数,顺、跳两模式定义不同的k值和m值。

然后定义CPU的各个状态,使其正常工作。

在顺序显示中,先进入while

(1)循环,循环中两判断条件if(P1==0xfd),令k1=1,实现顺显示,和if(P1==0xfb),令k2=2实现跳显示。

根据条件进入相应模式,各有一个LED灯亮、两个LED灯亮、四个LED灯亮、八个LED灯亮,和一个LED灯、两个LED灯、四个LED灯间隔亮

显示函数voiddisplay()中,两个for循环分别控制PA口PB口LED灯的循环模式,其中n为for循环的次数。

先定义PA口PB口的首地址outdata1、outdata2进入循环,函数_cror_和_crol_控制他们地址不同的转移方式,k为其中的转移的个数。

t为延迟函数的参数,控制亮灭延迟的时间。

延迟函数voiddelay()中,t为延迟的参数,控制程序中所需的延迟时间。

程序中各个参数之间都一一对应,根据要求相互呼应。

通过控制这些参数的量值来实现硬件仿真中多种跑马灯的运行模式。

3.编程技巧

设计中,我将与PA相连的LED灯顺序排列,与PB相连的逆序排列,要注意两组初始值并不相同,明确参数间的关系,多个参数组合使用,实现跑马灯的多种运行方式。

五、源程序清单,对关键的语句(段)要给出简洁的注释;

#include

#include

#include

#defineucharunsignedchar

#defineuintunsignedint

#definePAXBYTE[0x3fff]

#definePBXBYTE[0x7fff]

#defineCTLXBYTE[0xffff]

sbitreset=P2^5;

voiddelay(uintt)//延时函数

{

for(;t>0;t--)

{

TH0=(65536-1000)/256;

TL0=(65536-1000)%256;

TR0=1;

while(TF0==0);

TF0=0;

}

TR0=0;

}

voiddisplay(uintk,uintn,uintt,uchary1,uchary2)//循环显示函数

{

uinti;

for(i=0;i

{

PA=y1;

delay(t);

y1=_crol_(y1,k);//左循环

}

PA=0xff;

for(i=0;i

{

PB=y2;

delay(t);

y2=_cror_(y2,k);//右循环

}

PB=0xff;

}

voidmain()

{

uchary1,y2;

uintm,k1=1,k2=1,t;

EA=1;

ET0=1;

TMOD=0x01;

reset=1;

_nop_();

reset=0;

CTL=0x80;//写8255控制字,设置PA,PB,为输出口

PA=0xff;

PB=0xff;

while

(1)

{

if(P1!

=0xfd)k1=1;

if(P1==0xfd)//依次显示

{

t=300;

switch(k1)

{

case1:

m=8;y1=0xfe;y2=0x7f;display(k1,m,t,y1,y2);break;//依次亮一盏LED

case2:

m=4;y1=0xfc;y2=0x3f;display(k1,m,t,y1,y2);break;//依次亮两盏LED

case4:

m=2;y1=0xf0;y2=0x0f;display(k1,m,t,y1,y2);break;//依次亮四盏LED

case8:

m=1;y1=0x00;y2=0x00;display(k1,m,t,y1,y2);break;//依次亮八盏LED

default:

break;

}

if(k1==8)k1=1;

elsek1=k1*2;

}

if(P1!

=0xfb)k2=2;

if(P1==0xfb)//跳跃显示

{

t=500;

switch(k2)

{

case2:

m=4;y1=0xfe;y2=0x7f;display(k2,m,t,y1,y2);break;//隔一盏,亮一盏

case4:

m=2;y1=0xfc;y2=0x3f;display(k2,m,t,y1,y2);break;//隔两盏,亮两盏

case8:

m=1;y1=0xf0;y2=0x0f;display(k2,m,t,y1,y2);break;//隔四盏,亮四盏

default:

break;

}

if(k2==8)k2=2;

elsek2=k2*2;

}

}

}

六、仿真过程综述;

仿真开始。

打开仿真开关,进入运行状态,闭合图中“顺”开关,16个LED灯就会遵循一个LED灯亮、两个LED灯亮、四个LED灯亮、八个LED灯亮四种模式运行,直至开关“顺”断开;断开“顺”按键后,按下“跳”按键,16个LED灯就会遵循每隔一个LED灯亮一个LED等,再每隔两个LED灯亮两个LED等、每隔四个LED灯亮四个LED灯多种模式运行,直至“跳”按键断开。

若两键均按下,16个LED灯只运行当前LED灯亮模式,循环一圈后处于灭的状态,直至断开其中的一个按键。

七、调试过程中的主要难点(自己遇到的)及解决思路和办法;

设计中与PA口连接的LED灯是顺序依次亮,与PB口连接的LED灯是逆序依次亮,要注意PA初始状态分别是fe、fc、f0、00,PB初始状态分别是7f、3f、0f、00。

其次PB口跳跃亮,所以k2初始值为2。

八、课设结果及分析、收获、体会和建议;

通过此次为期两周的课程设计,我加深了对单片机以及C语言的认识和理解,使各部分的知识得到了进一步的巩固。

将平时学的理论知识真正应用到实际中,实现了学与用相结合,应用单片机这一开发环境,软硬件结合来达到设计一实物的目的。

同时还了解了两个专业软件:

KEILC和PROTEUS仿真软件,现在基本熟悉了他们的应用与相关知识。

此次课程设计,关键的是整个课设过程,这中间有着我们的辛勤劳动和认真的思考,过程有些枯燥,但却十分有意义。

仿真和程序的编写都会遇到很多问题,但我们保持耐心,认真对待,问题终会解决。

整个过程认真坚持下来,你会收获很多,体会很多,不管是对以后的学习,还是对我们的自身本事的锻炼,这些都是我们非常宝贵的财富。

课设过程中遇到的苦难,通过对设计的认真分析以及与同学们的讨论,找到了其中的出错点,将其改正,每个问题都这样一一改正,整个课设完成的十分成功。

此次课设还锻炼了我们的动手能力,开阔了我们的思维境界,使我们的知识更丰富,不仅加深了我们对所学专业的认识,更增加了我们对所学专业的兴趣!

九、参考文献

1C语言程序设计教程张敏霞,孙丽凤主编北京:

电子工业出版社,2007.3

2单片机原理及接口技术胡汉才主编北京:

清华大学出版社,2010.5

 

教师评语:

 

教师:

日期:

设计过程30﹪

课设报告40﹪

答辩30﹪

总成绩

 

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

当前位置:首页 > 高中教育 > 数学

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

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