单片机论文之流水灯及数码管控制.docx
《单片机论文之流水灯及数码管控制.docx》由会员分享,可在线阅读,更多相关《单片机论文之流水灯及数码管控制.docx(18页珍藏版)》请在冰豆网上搜索。
![单片机论文之流水灯及数码管控制.docx](https://file1.bdocx.com/fileroot1/2023-1/29/dd428c87-0045-43af-b495-a2efc4120dbc/dd428c87-0045-43af-b495-a2efc4120dbc1.gif)
单片机论文之流水灯及数码管控制
用单片机控制流水灯及数码管
课程设计目录·····················1
课程设计摘要·····················2
正文·························3
课程设计涉及的知识及所需平台··········3
元件介绍····················9
电路设计及分析·················12
程序设计····················14
调试运行····················21
设计心得·······················23
参考文献·······················24
一:
课程设计摘要
设计摘要
设计要求:
利用动态扫描和定时器1在数码管上显示出从765432开始以1/10秒的速度往下递减至765398并保持显示此数,与此同时利用定时器0以500MS的速度进行流水灯从上到下的移动,当数码管上的数减到停止时,流水灯也停止然后全部闪烁,3秒后(用T0定时)流水灯全部关闭,数码管上显示“HELLO”,到此保持住。
设计说明:
数码管的动态显示是一种按位轮流点亮各位数码管的显示方式,即在某一时段,只让其中一位数码管的“位选端有效”,并送出相应的字型显示编码。
此时其他位的数码管因位选端无效而都处于熄灭状态;下一时段按顺序选通另外一位数码管,并送出相应的字型显示编码,按此规律循环下去,即可使各位数码管分别间断地显示出相应的字符。
通过定时器可以控制单片机上的数码管以及流水灯的显示时间,从而达到设计的要求。
关键词:
单片机,数码管,动态显示,流水灯,定时器
设计目的
以AT89C52单片机为核心,制作一个数码管和流水灯互相配合显示的器件。
巩固加深对AT89C52单片机的认识,学会用AT89C52设计最小系统,并由此拓展运用单片机实现其他功能的设计。
设计引言
单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。
概括的讲:
一块芯片就成了一台计算机。
它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。
同时,学习使用单片机是了解计算机原理与结构的最佳选择。
89C52是INTEL公司MCS-51系列单片机中基本的产品,它采用INTEL公司可靠的CHMOS工艺技术制造的高性能8位单片机,属于标准的MCS-51的HCMOS产品。
它结合了HMOS的高速和高密度技术及CHMOS的低功耗特征,它基于标准的MCS-51单片机体系结构和指令系统,属于80C51增强型单片机版本,集成了时钟输出和向上或向下计数器等更多的功能,适合于类似马达控制等应用场合。
89C52内置8位中央处理单元、256字节内部数据存储器RAM、8k片内程序存储器(ROM)32个双向输入/输出(I/O)口、3个16位定时/计数器和5个两级中断结构,一个全双工串行通信口,片内时钟振荡电路。
此外,89C52还可工作于低功耗模式,可通过两种软件选择空闲和掉电模式。
在空闲模式下冻结CPU而RAM定时器、串行口和中断系统维持其功能。
掉电模式下,保存RAM数据,时钟振荡停止,同时停止芯片其它功能。
89C52有PDIP(40pin)PLCC(44pin)两种封装形式。
二:
正文
1.课程设计涉及的知识
(1)单片机工作原理:
单片机自动完成赋予它的任务的过程,也就是单片机执行程序的过程,即一条条执行的指令的过程,所谓指令就是把要求单片机执行的各种操作用的命令的形式写下来,这是在设计人员赋予它的指令系统所决定的,一条指令对应着一种基本操作;单片机所能执行的全部指令,就是该单片机的指令系统,不同种类的单片机,其指令系统亦不同。
为使单片机能自动完成某一特定任务,必须把要解决的问题编成一系列指令(这些指令必须是选定单片机能识别和执行的指令),这一系列指令的集合就成为程序,程序需要预先存放在具有存储功能的部件——存储器中。
存储器由许多存储单元(最小的存储单位)组成,就像大楼房有许多房间组成一样,指令就存放在这些单元里,单元里的指令取出并执行就像大楼房的每个房间的被分配到了唯一一个房间号一样,每一个存储单元也必须被分配到唯一的地址号,该地址号称为存储单元的地址,这样只要知道了存储单元的地址,就可以找到这个存储单元,其中存储的指令就可以被取出,然后再被执行。
程序通常是顺序执行的,所以程序中的指令也是一条条顺序存放的,单片机在执行程序时要能把这些指令一条条取出并加以执行,必须有一个部件能追踪指令所在的地址,这一部件就是程序计数器PC(包含在CPU中),在开始执行程序时,给PC赋以程序中第一条指令所在的地址,然后取得每一条要执行的命令,PC之中的内容就会自动增加,增加量由本条指令长度决定,可能是1、2或3,以指向下一条指令的起始地址,保证指令顺序执行。
(2)电路原理基础:
用导线将电源、开关(电键)、用电器、电流表、电压表等连接起来组成电路,再按照统一的符号将它们表示出来,这样绘制出的就叫做电路图。
电子电路图又称作电路图或电路原理图,它是一种反映电子产品和电子设备中各元器件的电气连接情况的图纸。
它是一种工程语言,可帮助人们尽快熟悉电子设备的电路结构及工作原理。
因此看懂电路图是学习电子技术的一项重要内容,是进行电子制作或修理的前提,也是电子技术爱好者必须掌撑的基本技能。
电子电路图是人们为了研究和工程的需要,用约定的符号绘制的一种表示电路结构的图形。
通过电路图可以知道实际电路的情况。
这样,我们在分析电路时,就不必把实物翻来覆去地琢磨,而只要拿着一张图纸就可以了;在设计电路时,也可以从容地在纸上或电脑上进行,确认完善后再进行实际安装,通过调试、改进,直至成功;而现在,我们更可以应用先进的计算机软件来进行电路的辅助设计,甚至进行虚拟的电路实验,大大提高了工作效率。
2.课程设计所需平台
(1)windowsXP系统PC机一台。
(2)KeilC51软件介绍
KeilC51是美国KeilSoftware公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。
Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部分组合在一起。
运行Keil软件需要WIN98、NT、WIN2000、WINXP等操作系统。
如果你使用C语言编程,那么Keil几乎就是你的不二之选,即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。
KeilC51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。
另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到KeilC51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。
在开发大型软件时更能体现高级语言的优势。
下面详细介绍KeilC51开发系统各部分功能和使用。
C51工具包的整体结构,uVision与Ishell分别是C51forWindows和forDos的集成开发环境(IDE),可以完成编辑、编译、连接、调试、仿真等整个开发流程。
开发人员可用IDE本身或其它编辑器编辑C或汇编源文件。
然后分别由C51及C51编译器编译生成目标文件(.OBJ)。
目标文件可由LIB51创建生成库文件,也可以与库文件一起经L51连接定位生成绝对目标文件(.ABS)。
ABS文件由OH51转换成标准的Hex文件,以供调试器dScope51或tScope51使用进行源代码级调试,也可由仿真器使用直接对目标板进行调试,也可以直接写入程序存贮器如EPROM中。
Keil软件的优点:
<1>KeilC51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。
在开发大型软件时更能体现高级语言的优势。
<2>与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。
用过汇编语言后再使用C来开发,体会更加深刻。
KeilC51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。
(3)Protues软件介绍
Protues软件是英国Labcenterelectronics公司出版的EDA工具软件。
它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。
它是目前最好的仿真单片机及外围器件的工具。
虽然目前国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。
Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。
是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年即将增加Cortex和DSP系列处理器,并持续增加其他系列处理器模型。
在编译方面,它也支持IAR、Keil和MPLAB等多种编译。
Protues功能特点
Protues软件具有其它EDA工具软件的功能。
<1>原理布图
<2>PCB自动或人工布线
<3>SPICE电路仿真
革命性的特点:
<1>互动的电路仿真。
用户甚至可以实时采用诸如RAM,ROM,键盘,马达,LED,LCD,AD/DA,部分SPI器件,部分IIC器件。
<2>仿真处理器及其外围电路。
可以仿真51系列、AVR、PIC、ARM、等常用主流单片机。
还可以直接在基于原理图的虚拟原型上编程,再配合显示及输出,能看到运行后输入输出的效果。
配合系统配置的虚拟逻辑分析仪、示波器等,Protues建立了完备的电子设计开发环境。
<3>支持当前的主流单片机,如51系列、AVR系列、PIC12系列、PIC16系列、PIC18系列、Z80系列、HC11系列、68000系列等。
<4>提供丰富的外围接口器件及其仿真。
RAM,ROM,键盘,马达,LED,LCD,AD/DA,部分SPI器件,部分IIC器件。
这样很接近实际。
在训练学生时,可以选择不同的方案,这样更利于培养学生。
3.元件介绍
(1)AT98C52单片机,摘要里面已详细叙述,这里不做多说。
(2)数码管
在单片机系统中,经常采用LED数码管来显示单片机系统的工作状态、运算结果等各种信息,LED数码管是单片机人机对话的一种重要输出设备。
LED数码管由八个发光二级管组构成,通过不同的发光字段组合可用来显示数字0-9、字符A-F、H、L、P、R、U、Y、符号“-”及小数点“.”等。
数码管分为共阴极和共阳极,8个发光二极管的阳极连接在一起,作为公共控制端,接高电平。
阴极作为“段”控制端,当某段控制端为低电平时,该段对应的发光二极管导通并点亮。
通过点亮不同的段,显示出不同的字符;8个发光二极管的阴极连接在一起,作为公共控制端接低电平,阴极作为“段”控制端,当某段控制端为高电平时,该段对应的发光二极管导通并点亮。
使用LED显示器时,要注意区分这两种不同的接法。
为了显示数字或字符,必须对数字或字符进行编码。
七段数码管加上一个小数点,共计8段。
因此为LED显示器提供的编码正好是一个字节。
如图:
显示字形
g
f
e
d
c
b
a
段码
0
0
1
1
1
1
1
1
3fh
1
0
0
0
0
1
1
0
06h
2
1
0
1
1
0
1
1
6bh
3
1
0
0
1
1
1
1
4fh
4
1
1
0
0
1
1
0
66h
5
1
1
0
1
1
0
1
6dh
6
1
1
1
1
1
0
1
7dh
7
0
0
0
0
1
1
1
07h
8
1
1
1
1
1
1
1
7fh
9
1
1
0
1
1
1
1
6fh
A
1
1
1
0
1
1
1
77h
B
1
1
1
1
1
0
0
7ch
C
0
1
1
1
0
0
1
39h
D
1
0
1
1
1
1
0
5eh
E
1
1
1
1
0
0
1
79h
F
1
1
1
0
0
0
1
71h
数码管仿真图
七段数码管的字型代码表
数码管要正常显示,就要用驱动电路来驱动数码管的各个段码,从而显示出我们要的数字,因此根据数码管的驱动方式的不同,可以分为静态式和动态式两类。
(3)二极管组成的流水灯
二极管又称晶体二极管,简称二极管(diode),另外,还有早期的真空电子二极管;它是一种具有单向传导电流的电子器件。
在半导体二极管内部有一个PN结两个引线端子,这种电子器件按照外加电压的方向,具备单向电流的转导性。
一般来讲,晶体二极管是一个由p型半导体和n型半导体烧结形成的p-n结界面。
在其界面的两侧形成空间电荷层,构成自建电场。
当外加电压等于零时,由于p-n结两边载流子的浓度差引起扩散电流和由自建电场引起的漂移电流相等而处于电平衡状态,这也是常态下的二极管特性。
以下是用89C52设计的流水灯。
流水灯仿真图
(4)74HC573锁存器
74HC573锁存器仿真图
输入是和标准CMOS输出兼容的;加上拉电阻,他们能和LS/ALSTTL输出兼容。
当锁存使能端LE为高时,这些器件的锁存对于数据是透明的(也就是说输出同步)。
当锁存使能变低时,符合建立时间和保持时间的数据会被锁存。
74HC573锁存器是高性能硅CMOS器件,SL74HC573跟LS/AL573的管脚一样。
器件的输入是和标准CMOS输出兼容的;加上拉电阻,他们能和LS/ALSTTL输出兼容。
当锁存使能端LE为高时,这些器件的锁存对于数据是透明的(也就是说输出同步)。
当锁存使能变低时,符合建立时间和保持时间的数据会被锁存。
OE ̄
1
20
Vcc
1D—
2
19
—1Q
2D—
3
18
—2Q
3D—
4
17
—3Q
4D—
5
16
—4Q
5D—
6
15
—5Q
6D—
7
14
—6Q
7D—
8
13
—7Q
8D—
9
12
—8Q
GND
10
11
LE
1D-8D为数据输入端1Q-8Q为数据输出端
4.电路设计及分析
(1)用protues软件来搭建设计图,图中包含的部分:
AT89C52单片的最小系统:
(11.0592MHZ的晶振,A102排阻,两个30PF的电容,10uF的电容,8.2K的电阻),注意电路的连接线不要重叠,与引脚连接要正确。
流水灯部分:
由8个发光二极管,一个10K的排阻充当上拉电阻组成,8个发光二极管分别连在89C52的P1.0-P1.7口引脚。
数码管部分:
由6个数码管组成用来显示不同的数。
其数字显示控制位abcdefg分别接74HC573段选的Q0-Q7输出端。
控制其亮灭的WE1-WE6接位选的Q0-Q5输出端。
74HC573两个芯片的输入端接在89C52的P0口。
5.程序设计
利用动态扫描和定时器1在数码管上显示出从765432开始以1/10秒的速度往下递减至765398并保持显示此数,与此同时利用定时器0以500MS的速度进行流水灯从上到下的移动,当数码管上的数减到停止时,流水灯也停止然后全部闪烁,3秒后(用T0定时)流水灯全部关闭,数码管上显示“HELLO”,到此保持住。
其程序如下所示:
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
voidinit();
voiddisplay(ucharaa,ucharbb,ucharcc,ucharbai,ucharshi,ucharge);
voiddelay(uintz);
sbitwela=P2^7;
sbitdula=P2^6;
ucharcodetable[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,
0x76,0x79,0x38,0x38,0x3f,0};
uchartemp,t0,t1,bai,shi,ge,flag,flag1;
uintshu;
voidmain()
{
init();
while
(1)
{
if(flag1!
=1)
display(7,6,5,bai,shi,ge);
else
display(16,17,18,19,20,21);
}
}
voidtimer0()interrupt1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
t0++;
if(flag!
=1)
{
if(t0==10)
{
t0=0;
temp=_crol_(temp,1);
P1=temp;
}
}
else
{
if(t0%4==0)
{
P1=~P1;
}
if(t0==60)
{
TR0=0;
P1=0xff;
flag1=1;
}
}
}
voidtimer1()interrupt3
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
t1++;
if(t1==2)
{
t1=0;
shu--;
bai=shu/100;
shi=shu%100/10;
ge=shu%10;
if(shu==398)
{
TR0=0;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
flag=1;
t0=0;
P1=0xff;
TR1=0;
}
}
}
voidinit()
{
flag1=0;
shu=432;
temp=0xfe;
P1=temp;
TMOD=0x11;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
EA=1;
ET0=1;
ET1=1;
TR0=1;
TR1=1;
}
voiddelay(uintz)
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
voiddisplay(ucharaa,ucharbb,ucharcc,ucharbai,ucharshi,ucharge)
{
dula=1;
P0=table[aa];
dula=0;
P0=0xff;
wela=1;
P0=0xfe;
wela=0;
delay(30);
dula=1;
P0=table[bb];
dula=0;
P0=0xff;
wela=1;
P0=0xfd;
wela=0;
delay(30);
dula=1;
P0=table[cc];
dula=0;
P0=0xff;
wela=1;
P0=0xfb;
wela=0;
delay(30);
dula=1;
P0=table[bai];
dula=0;
P0=0xff;
wela=1;
P0=0xf7;
wela=0;
delay(30);
dula=1;
P0=table[shi];
dula=0;
P0=0xff;
wela=1;
P0=0xef;
wela=0;
delay(30);
dula=1;
P0=table[ge];
dula=0;
P0=0xff;
wela=1;
P0=0xdf;
wela=0;
delay(30);
}
5.调试运行
(1)双击单片机弹出编辑元件对话框。
(2)点击ProgramFile,点击添加课后练习3.HEX文件。
(3)点击protues界面下方的运行按钮
。
运行。
(4)首先数码管上显示的是765432开始减,但是由于使用的protues仿真,只是运用人的视觉暂留感觉显示的是一个6位数,但是截屏是只能显示其中的一个,例如:
同时流水灯在从上到下流动,但是等765432以1/10秒减到765398后。
流水灯开始闪烁,如右图所示:
。
(5)3秒后灯灭。
6个数码管上显示“HELLO”的字样。
实验结束。
6.设计心得
本次课程设计介绍了数码管的动态显示以及流水灯,通过自己的编程以及思考,我对单片机的学习更深一步了,在今后的学习中,我会更加认真地学习基础知识,以便能够更熟练地应用单片机的功能,为以后的工作和学习奠定良好的基础。
通过这次课程设计,让我认识到很多问题,比如光光学习课本上的知识还远远不够,还需要加强自己的动手能力。
通过这次实验,我学会了一步一步地写程序,保证每个写出来的子函数都正确,这样可以避免最后回头找错误的繁琐,比如在本实验中,我写完复位函数就进行检测,看复位是否成功,假如不成功,就重新审查函数,直到复位成功。
7.参考文献
1、吴金戌,沈庆阳,郭庭吉,8051单片机实践与应用[M]。
清华大学出版社,2001。
2、魏立峰,王宝兴。
单片机原理与应用技术[M]。
北京:
北京大学出版社,2006。
3、胡辉,单片机原理与应用,北京:
中国水利水电出版社,2007年。
4、陈明荧.8051单片机课程设计实训教材[M]。
北京:
清华大学出版社,2003年9月。
6.设计心得
本次课程设计介绍了数码管的动态显示以及流水灯,通过自己的编程以及思考,我对单片机的学习更深一步了,在今后的学习中,我会更加认真地学习基础知识,以便能够更熟练地应用单片机的功能,为以后的工作和学习奠定良好的基础。
通过这次课程设计,让我认识到很多问题,比如光光学习课本上的知识还远远不够,还需要加强自己的动手能力。
通过这次实验,我学会了一步一步地写程序,保证每个写出来的子函数都正确,这样可以避免最后回头找错误的繁琐,比如在本实验中,我写完复位函数就进行检测,看复位是否成功,假如不成功,就重新审查函数,直到复位成功。
7.参考文献
1、吴金戌,沈庆阳,郭庭吉,8051单片机实践与应用[M]。
清华大学出版社,2001。
2、魏立峰,王宝兴。
单片机原理与应用技术[M]。
北京:
北京大学出版社,2006。
3、胡辉,单片机原理与应用,北京:
中国水利水电出版社,2007年。
4、陈明荧.8051单片机课程设计实训教材[M]。
北京:
清华大学出版社,2003年9月。