单片机课设数码管显示滚动控制Word下载.docx

上传人:b****1 文档编号:4050401 上传时间:2023-05-02 格式:DOCX 页数:23 大小:649.83KB
下载 相关 举报
单片机课设数码管显示滚动控制Word下载.docx_第1页
第1页 / 共23页
单片机课设数码管显示滚动控制Word下载.docx_第2页
第2页 / 共23页
单片机课设数码管显示滚动控制Word下载.docx_第3页
第3页 / 共23页
单片机课设数码管显示滚动控制Word下载.docx_第4页
第4页 / 共23页
单片机课设数码管显示滚动控制Word下载.docx_第5页
第5页 / 共23页
单片机课设数码管显示滚动控制Word下载.docx_第6页
第6页 / 共23页
单片机课设数码管显示滚动控制Word下载.docx_第7页
第7页 / 共23页
单片机课设数码管显示滚动控制Word下载.docx_第8页
第8页 / 共23页
单片机课设数码管显示滚动控制Word下载.docx_第9页
第9页 / 共23页
单片机课设数码管显示滚动控制Word下载.docx_第10页
第10页 / 共23页
单片机课设数码管显示滚动控制Word下载.docx_第11页
第11页 / 共23页
单片机课设数码管显示滚动控制Word下载.docx_第12页
第12页 / 共23页
单片机课设数码管显示滚动控制Word下载.docx_第13页
第13页 / 共23页
单片机课设数码管显示滚动控制Word下载.docx_第14页
第14页 / 共23页
单片机课设数码管显示滚动控制Word下载.docx_第15页
第15页 / 共23页
单片机课设数码管显示滚动控制Word下载.docx_第16页
第16页 / 共23页
单片机课设数码管显示滚动控制Word下载.docx_第17页
第17页 / 共23页
单片机课设数码管显示滚动控制Word下载.docx_第18页
第18页 / 共23页
单片机课设数码管显示滚动控制Word下载.docx_第19页
第19页 / 共23页
单片机课设数码管显示滚动控制Word下载.docx_第20页
第20页 / 共23页
亲,该文档总共23页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

单片机课设数码管显示滚动控制Word下载.docx

《单片机课设数码管显示滚动控制Word下载.docx》由会员分享,可在线阅读,更多相关《单片机课设数码管显示滚动控制Word下载.docx(23页珍藏版)》请在冰点文库上搜索。

单片机课设数码管显示滚动控制Word下载.docx

各部分的功能介绍如下:

复位电路:

复位是单片机的初始化操作,其主要功能是把PC初始化为0000H,使单片机从0000H单元开始执行程序。

除了进入系统的正常初始化之外,当由于程序运行出错或操作错误是系统处于死锁状态时,为摆脱困境,也需要按复位键以重新启动。

MCS-51单片机的复位电路由片内、片外两部分组成,进行复位操作时,外部电路需在复位引脚RST端产生大于两个机器周期的高电平信号,RST引脚通过片内施密特触发器与复位电路相连(施密特触发器的作用是脉冲整型和抑制噪声)。

MCS-51单片机的复位操作有两种方式:

上电复位和上电按钮复位。

图2.2复位电路图

晶振电路(时钟电路):

时钟电路是单片机的心脏,它用于产生单片机工作所需要的时钟信号。

单片机本身就是一个复杂的同步时序电路,为了保证同步工作方式的实现,电路应在唯一的时钟信号控制下严格地按时序进行工作。

单片机的时钟产生方法有内部时钟方式和外部时钟方式,大多数单片机应用系统采用内部时钟方式,本系统采用的亦是内部时钟方式。

在MCS-51芯片内部有一个高增益反相放大器,XTAL1、XTAL2引脚分别为该反相放大器的输入端和输出端,在芯片的外部通过这两个引脚跨接晶体振荡器和微调电容,形成反馈电路,就构成了一个稳定的自激振荡器。

图2.3时钟电路图

2.数码管显示电路

图2.4数码显示电路

2.3硬件选型及说明

1.ST89C51单片机

MCS-51把微型计算机的主要部件都集成在一块心片上,使得数据传送距离大大缩短,可靠性更高,运行速度更块。

由于属于芯片化的微型计算机,各功能部件在芯片中的布局和结构达最优化,抗干扰能力加强,工作亦相对稳定。

因此,在工业测控系统中,使用单片机是最理想的选择。

单片机属于典型的嵌入式系统,所以它是低端控制系统最佳器件。

8051是MCS-51系列单片机的典型产品。

8051单片机包含中央处理器、程序存储器(ROM)、数据存储器(RAM)、定时/计数器、并行接口、串行接口和中断系统等几大单元及数据总线、地址总线和控制总线等三大总线:

引脚介绍:

电源:

VCC-芯片电源,接+5V;

VSS-接地端;

时钟:

XTAL1、XTAL2-晶体振荡电路反相输入端和输出端

控制线:

⑴ALE/PROG:

地址锁存允许/片内EPROM编程脉冲:

①ALE功能:

用来锁存P0口送出的低8位地址;

②PROG功能:

片内有EPROM的芯片,在EPROM编程期间,此引脚输入编程脉冲。

⑵PSEN:

外ROM读选通信号。

⑶RST/VPD:

复位/备用电源:

①RST(Reset)功能:

复位信号输入端;

②VPD功能:

在Vcc掉电情况下,接备用电源。

⑷EA/Vpp:

内外ROM选择/片内EPROM编程电源:

①EA功能:

内外ROM选择端;

②Vpp功能:

片内有EPROM的芯片,在EPROM编程期间,施加编程电源Vpp。

I/O线:

4个8位并行I/O端口:

P0、P1、P2、P3口,共32个引脚。

P3口还具有第二功能,用于特殊信号输入输出和控制信号(属控制总线)。

图2.589c51引脚图

2.四位一体七段共阴极显示数码管

图2.6数码管引脚图

3、系统原理图设计与仿真

3.1系统仿真图

图3.1系统仿真图

3.2系统仿真结果

图3.2系统正在运行

图3.3系统正在运行

4、程序设计

4.1程序设计

数码管动态显示程序包含显示数字、部分字母符号、小数点、数码管闪烁、数码管消隐等。

其它程序输出到显示程序的数据既可以是BCD码、二进制码、ASCII码、自定义显示码等。

由硬件电路工作原理可知,为了显示稳定的数据,每秒必须显示数据50次以上,才能达到预期目的。

MCS-51单片机内部有两个16位可编程的定时器/计数器T0和T1。

它们即可用作定时器方式,又可用作计数器方式。

其中T0由TH0和TL0计数器构成;

T1由TH1和TL1计数器构成。

工作于定时器方式时,通过对机器周期(新型51单片机可以对振荡周期计数)的计数,即每一个机器周期定时器加1,来实现定时。

故系统晶振频率直接影响定时时间。

如果晶振频率为12MHZ,则定时器每隔(1/12MHZ)×

12=1us加1。

工作于计数器方式时,对P3.4或P3.5管脚的负跳变(1→0)计数。

它在每个机器周期的S5P2时采样外部输入,当采样值在这个机器周期为高,在下一个机器周期为低时,计数器加1。

因此需要两个机器周期来识别一个有效跳变,故最高计数频率为晶振频率的1/24。

特殊功能寄存器TMOD用于定时器/计数器的方式控制。

高4位用于设置T1,低4位用于设置T0。

单片机内部定时器/计数器的使用,简而概之:

(1)如需用中断,则将EA和相关中断控制位置1;

(2)根据需要设置工作方式,即对TMOD设置;

(3)然后启动计数,即对TR0或TR1置1。

(4)如使用中断,则计数溢出后硬件会自动转入中断入口地址;

如使用查询,则必须对溢出中断标志位TF0或TF1进行判断。

4.2程序流程图

图4.1主程序图

5、系统调试

5.1系统硬件调试

在领完课程设计所需的元器件并检查是否是自己所需要,并且根据电路原理图进行电路板的焊制,在焊接过程中注意不要虚焊和短路。

焊接完成后首先对电路板上的线路进行检查是否有错漏和重复。

并且用万用表测试电路中有无虚焊短接的情况。

在测试无误后,向单片机烧录程序,并接通电源进行测试。

在第一次上电过程中,数码管并没有显示出如期的结果,用万用表对焊接点进行再一次的排查并对线路进行检查,发现单片机底座有几个虚焊点,并重新对其进行焊制。

5.2系统软件调试

在keil编译器下进行程序的编写,以子程序为单位进行调试,并且利用proteus软件进行仿真实验并结合电路板进行整机调试。

六、总结与体会

此次的课程设计是基于单片机的数码管滚动显示控制。

单片机是自动化的重要课程,学习的时候十分用心,也同时也为这次的课程设计打下了理论基础。

但是由于学习到的更多涉及于课本知识并没有灵活的掌握,所以说在设计的过程中也需要不断的翻阅书籍,以此来达到完成顺利完成课程设计任务,在这段学习与制作的过程中巩固了我在课堂上学习到的内容,而且锻炼到了我个人的自我学习能力及制作能力。

在课程设计最开始是做Proteus仿真,从最小系统开始做。

单片机最小系统是指用最少的元件组成的单片机可以工作的系统。

应该包括:

单片机、晶振电路、复位电路等。

我上学期做过数电的课程设计所以这次看到器件这么少电路图这么简单还觉得很高兴。

然而做完仿真开始焊接时才发现从单片机芯片出来的连接数码管的线路在仿真中隐藏了只留下了引脚,导致我在焊接的时候一下多了十多根线打乱我的节奏,好在最后还是踉踉跄跄地焊完了。

在第一次调试的时候并没有现象,这令我十分惶恐,仔细检查才发现仿真中2120引脚的都略去了而这几个针脚正是连接vcc跟地的引脚,后来将它焊上了。

给我的启发是以后在做完仿真焊接的时候一定要每个引脚的过,因为仿真中它将芯片的引脚打乱了顺序而且有的引脚也省略了,仿真跟真实的焊接还是不同的。

还有就是拿到仿真先别急着焊接,还是要大致地考虑器件的布局跟正反面的走线,提前理清思路焊的时候才能游刃有余,不至于慌忙。

而且在制作仿真的过程中也有了瓶颈,大一学的c语言忘得差不多了好在同学的帮助下才解决了问题,另外焊接只是一方面,后续的检测诊断才是关键,不可能一下子焊好就可以使用,在焊接的过程中难免有一些焊点漏焊虚焊的。

每一次的课程设计对我都是一种拔高跟历练,在一次次的课程设计中我会不断地进步,提升自己的解决问题的能力,跟动手焊接能力,还有故障排查能力,做课程设计固然需要智慧然而坚持跟耐心也是很关键的,这几样缺一不可,否则很难做出成功的作品。

我相信我会一步步地慢慢变好变强。

附录一

元器件清单

器件名称

数量

Stc89c54单片机

1

电容

若干

七段共阴极数码管

2

电阻

微动开关

芯片插座

3

驱动

晶振

附录二

#include<

reg51.h>

//--定义使用的IO口--//

#defineGPIO_DIGP2//段选

#defineGPIO_PLACEP0//位选

sbitk=P1^0;

//--定义全局变量--//

unsignedcharcodeDIG_PLACE[8]={

0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

//位选控制查表的方法控制

unsignedcharcodeDIG_CODE[17]={

0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

//0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的显示码

unsignedcharDisplayData[8];

//用来存放要显示的8位数的值

//--声明全局函数--//

voidDisplaykey();

voidRunkey();

voidfirst();

voidstep1();

voidstep2();

voidstep3();

voidstep4();

signedchardelay;

signedchari;

unsignedcharj;

signedchari1;

unsignedcharstep=1;

/*******************************************************************************

*函数名:

main

*函数功能:

主函数

*******************************************************************************/

voidmain(void)

{

unsignedchara;

for(a=0;

a<

8;

a++)

{

DisplayData[a]=DIG_CODE[a];

}//存放段码

first();

//设置定时器初值和工作方式

while

(1)

Displaykey();

//扫描按键

Runkey();

//执行相对应的按键步骤

}

}

/*******************************************************************************

first()

设置初值

voidfirst()

TMOD=0x01;

//设置T0为定时器工作方式0

TH0=(65536-20000)/256;

TL0=(65536-20000)%256;

//设置计数器初值,定时时间为20ms

IE=0x82;

//允许定时器0中断

Displaykey();

按键扫描

voidDisplaykey()

if(k==0)

TR0=1;

//启动定时器0

}

voidtime0()interrupt1using1

定时器0

voidtime0()interrupt1using1

//方式1需要重置定时器的初值

if(k==0)//定时20ms去除按键抖动

if(k==1)break;

//判断按键是否弹起

step=step+1;

//进入下一个工作方式

if(step==5)

step=1;

switch(step)

{

case1:

i=0;

break;

//设置步骤1的初值

case2:

i=7;

//设置步骤2的初值

case3:

i1=7;

//设置步骤3的初值

case4:

i=3;

i1=4;

//设置步骤4的初值

}

}

a++;

while(a==20)//利用定时器进行延时延时时间为20ms*50=1s

a=0;

delay=1;

//延时结束标志位

TR0=0;

//关闭定时器

Runkey();

按键执行和选择

voidRunkey()

case1:

step1();

step2();

step3();

step4();

step1

右扫程序

voidstep1()

GPIO_PLACE=DIG_PLACE[i];

//发送位选

GPIO_DIG=DisplayData[i];

//发送段码

j=10;

//扫描间隔时间设定

while(j--);

GPIO_DIG=0x00;

//消隐

TR0=1;

//开定时器延时

while(delay==1)

delay=0;

i=i+1;

//延时时间到,数码管位选移动

while(i==8)

i=0;

step2

左扫程序

voidstep2()

//消隐

while(delay==1)

i=i-1;

//延时时间到,数码管位选移动

while(i==-1)

i=7;

}

step3

内缩程序

*输入:

*输出:

voidstep3()

GPIO_PLACE=DIG_PLACE[i1];

GPIO_DIG=DisplayData[i1];

i1=i1-1;

while(i1==3)

i1=7;

step4

外扩程序

voidstep4()

{

while(delay==1)

i1=i1+1;

//延时时间到,数码管位选移动

while(i1==8)

i=3;

i1=4;

附录三

图1硬件原理图

图2实物图(正面)

图3实物图(背面)

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

当前位置:首页 > 幼儿教育 > 幼儿读物

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2