毕业设计34基于AT89C51单片机和keilc软件的流水灯设计.docx
- 文档编号:14071228
- 上传时间:2023-06-20
- 格式:DOCX
- 页数:30
- 大小:848.37KB
毕业设计34基于AT89C51单片机和keilc软件的流水灯设计.docx
《毕业设计34基于AT89C51单片机和keilc软件的流水灯设计.docx》由会员分享,可在线阅读,更多相关《毕业设计34基于AT89C51单片机和keilc软件的流水灯设计.docx(30页珍藏版)》请在冰点文库上搜索。
毕业设计34基于AT89C51单片机和keilc软件的流水灯设计
目录
摘要1
关键词1
Abstract2
Keyword2
1AT89C51单片机简介3
1.1单片机的发展3
1.2单片机的分类3
1.3AT89C51的介绍3
1.3.1AT89C51的结构3
1.3.2AT89C51主要特性4
1.3.3AT89C51的管脚说明4
2keilc软件及ledkey控件介绍6
2.1keilc软件介绍6
2.2ledkey控件介绍7
2.2.1ledkey控件的开发7
2.2.2ledkey控件原理图7
2.2.4ledkey控件的使用7
2.2.5举例说明8
3多花样流水灯硬件设计9
3.1Ledkey控件原理图9
3.2功能介绍9
4多花样流水灯软件设计11
4.1程序功能11
4.2程序流程图12
5多花样流水灯的仿真13
结语14
参考文献15
附录1:
花样流水灯的程序代码16
附录2:
花样流水灯功能表19
附录3:
keilc软件和ledkey控件介绍相关图片20
基于AT89C51单片机和keilc软件的流水灯设计
摘要:
本文介绍了花样流水灯的软件设计过程,重点给出了其软件编程的方法,使学者对汇编语言有个初步了解。
通过对单片机发展、分类、硬件原理图的介绍,特别是AT89C51的介绍,具体到其结构、特性、管脚说明等,让单片机学者对51系列单片机有了初步的认识。
在程序实现方面通过文字说明和相应的图片又充分的介绍了keil软件及控件使用方法。
关键词:
单片机;编程;控件;仿真
DesignofglidelightbaseonsinglechipofAT89C51andkeilcsoftware
Abstract:
Thispaperintroducesansoftwaredesignprocedureformultiformpomadeng,especiallyliesoutthemethodoftheprogramsoftware,sothatscholarscanhaveapreliminaryunderstandforprogramlanguage.Accordingtointroducethedevelopment,sortofsinglechipandhardwareillustrativediagram,especiallytheintroduceofAT89C51,inparticular,referringtotheexplainofitsstructure,specialty,pin’instruction.Forthisintroduce,thescholarsofsinglechipcanhaveaninitialunderstandforthesortofsinglechip.AndthenWehavesufficientintroduceforthekeilsoftwareandwidgetofusingmethodbymeansofthewordsandpictures,inaspectoftheprogram’realization.
Keyword:
singlechip;program;widget;emulate
1AT89C51单片机简介
1.1单片机的发展
单片机(又称为微控制器)的出现是计算机发展史上的一个重要里程碑,它以体积小、功能全、性价比高等诸多优点而独具特色,在工业控制、尖端武器、通信设备、信息处理、家用电器等嵌入式应用领域中独占熬头。
51系列单片机是国内目前应用最广泛的8位单片机之一,经过二十多年的推广与发展,51系列单片机形成了一个规模庞大、功能齐全、资源丰富的产品群。
随着嵌入式系统、片上系统等概念的提出和普遍接受及应用,51单片机的发展又进入了一个新的阶段。
特别是近年来,基于单片机的嵌入式实时操作系统的出现和推广,表明了51系列单片机在今后的许多年中依然会活跃如故,而且在很长一段时间中将占据嵌入式系统产品的低端市场。
1.2单片机的分类
MCS-51系列单片机品种很多,如果按照存储器配置状态,可划分为:
片内ROM型,如80(C)5X;片内EPROM,如87(C)5X;片内FlashEEPROM型,如89C5X;内部无EPROM型,如80(C)3X。
如果按照其功能,可分为:
(1)基本型,有8031、8051、8031AH、8751、89C51和89S51等。
(2)增强型,有8052、8032、8752、89C52和89S52等。
(3)低功耗型,有80C5X、80C3X、87C5X和89C5X等。
(4)高级语言型,如,8052AH-BASIC芯片内固化有MCSBASIC52解释程序,其BASIC语言能与汇编语言混用。
(5)可编程记数阵列(PCA)型。
(6)A/D型。
(7)DMA型。
(8)多并行接口型。
(9)在系统可编程(ISP)型。
(10)JTAG调试型。
1.3AT89C51的介绍
AT89C51是一个低功耗,高性能CMOS8位单片机,片内含4kBytesISP(In-systemprogrammable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISPFlash存储单元,功能强大的微型计算机的AT89C51可为许多嵌入式控制应用系统提供高性价比的解决方案。
具体体现在以下几点:
1.3.1AT89C51的结构
(1)8位微控制器。
8位指的是微控制器内部数据总线、寄存器宽度。
比如计算机(PC)所用的CPU,第一代PC的CPU8088/8086到第二代PC的CPU80286都为16位CPU;而从80386到目前的Pentium4都属于32位的CPU。
尽管如此,目前所采用的单片机微控制器,仍是以8位为主,只有在特殊场合,才会采用16位的单片机,如8096等。
(2)程序存储器ROM:
内部有4KB、外部最多可扩充至64KB。
(3)数据存储器ROM:
内部有128B、外部最多可扩充至64KB。
(4)4组可位寻址的8位输入/输出端口,即P0、P1、P2及P3。
(5)一个全双工串行口,即UART。
(6)5个中断源,即INT0、INT1、T0、T1、RXD或TXD。
(7)111个指令。
1.3.2AT89C51主要特性
(1)8031CPU与MCS-51兼容
(2)4K字节可编程FLASH存储器(寿命:
1000写/擦循环)
(3)全静态工作:
0Hz-24KHz
(4)三级程序存储器保密锁定
(5)128*8位内部RAM
(6)32条可编程I/O线
(7)两个16位定时器/计数器 6个中断源
(8)可编程串行通道
(9)低功耗的闲置和掉电模式
(10)片内振荡器和时钟电路
1.3.3AT89C51的管脚说明
(1)VCC:
供电电压。
(2)GND:
接地。
(3)P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
(4)P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为第八位地址接收。
(5)P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
(6)P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口也可作为AT89C51的一些特殊功能口,如下列所示:
P3.0RXD(串行输入口)
P3.1TXD(串行输出口)
P3.2/INT0(外部中断0)
P3.3/INT1(外部中断1)
P3.4T0(记时器0外部输入)
P3.5T1(记时器1外部输入)
P3.6/WR(外部数据存储器写选通)
P3.7/RD(外部数据存储器读选通)
P3口同时为闪烁编程和编程校验接收一些控制信号。
(7)RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。
在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:
每当用作外部数据存储器时,将跳过一个ALE脉冲。
如想禁止ALE的输出可在SFR8EH地址上置0。
此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。
另外,该引脚被略微拉高。
如果微处理器在外部执行状态ALE禁止,置位无效。
(8)/PSEN:
外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。
但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
(9)/EA/VPP:
当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。
注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。
在FLASH编程期间,此引脚也用于施加12V编程电(VPP)。
(10)XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
(11)XTAL2:
来自反向振荡器的输出。
其管脚图如图1-1所示。
图1-1管脚图
2keilc软件及ledkey控件介绍
2.1keilc软件介绍
keilc51uvision是德国keil公司开发的基于windows环境的8051软件开发平台,它集项目管理、源程序编辑、程序调试于一体,是一个强大的集成开发环境。
Uvision2支持keil的各种8051工具,包括:
c编译器,宏汇编译器、连接/定位器及object-hex转换程序,可以帮助用户快速有效的实现嵌入式系统的设计与调试。
采用c语言进行单片机系统的开发,具有避免手工分配寄存器,移植容易等优点。
恒科keilc51的IDE开发防真器优特点:
1、仿真8031内核的单片机。
2、接支持keilc51的IDE开发仿真环境,63k用户程序空间。
3、全保留单片机特性,避免仿真正常而实际烧录芯片不正常的问题。
4、仿真频率0—40MHZ晶振可选。
5、程序代码可重复装载。
6、监控程序占用用户资源极少,全速运行不占用资源。
7、可在keiluvision2下单步、断点、全速、可参考变量、RAM变量、结构变量等。
8、支持汇编、c语言、混合调试。
9、内部存储物理空间为68k,是伟福通用仿真器G6型的7倍,是伟福51专用仿真器的4倍。
10、仿真频率可达40MHz。
11、支持10个硬件断点。
在keilc51集成开发软件环境是使用工程方法来管理文件的,而不是单一文件模式。
所有的文件包括源程序(包括c程序,汇编程序)、头文件、甚至说明性的技术文档都可以放在工程项目文件里面统一管理。
在使用keilc51之前,您应该习惯这种工程的管理方式,对于刚刚使用keilc51的用户来讲,一般可以按照下面的步骤来创建一个自己的keilc51应用程序。
1、建一个项目文件。
(此图参照附录3中图2-2所示)
2、工程选择一个目标器件。
(此图参照附录3中图2-3所示)
3、创建源程序文件并输入程序代码并保存。
(此图见附录3中图2-4所示)
4、把源文件添加到项目中。
(见图2-1所示)
图2-1源文件添加到项目
5、为工程项目设置软硬件调试环境。
(见附录3中图2-5所示)
6、编译项目文件。
(见附录3中图2-6所示)
7、硬件或者软件调试。
(见附录3中图2-7所示)
2.2ledkey控件介绍
2.2.1ledkey控件的开发
前面介绍了Keil软件的使用,从中我们可以看到Keil的强大功能,不过,对于初学者来说,还有些不直观,调试过程中看到的是一些数值,并没有看到这些数值所引起的外围电路的变化,例如数码管点亮、发光管发光等。
为了让初学者更好地入门,笔者利用Keil提供的AGSI接口开发了两块仿真实验板。
其中的键盘、LED显示实验仿真板就是我们所要提的ledkey控件。
这块仿真板将枯燥无味的数字用形象的图形表达出来,可以使初学者在没有硬件时就能感受到真实的学习环境,降低单片机的入门门槛。
2.2.2ledkey控件原理图
图2-8控件原理图
图2-8是键盘、LED显示实验仿真板的图,从图中可以看出,该板比较简单有在P1口接有8个发光二极管,在P3口接有4个按钮,图的右边给出了原理图。
2.2.3ledkey控件的安装
Ledkey控件的安装很简单,只需根据需要将ledkey.dll文件拷贝到keil软件的c51/bin文件夹中即可。
2.2.4ledkey控件的使用
要使用仿真板,必须对工程进行设置,设置的方法是点击Project->OptionforTarget
‘Target1’打开对话框,然后选中Debug标签页,在Dialog:
Parameter:
后的编缉框中输入-d文件名。
例如要用ledkey.dll(即第一块仿真板)进行调试,就输入-dledkey,如图2-9所示,输入完毕后点击确定退出。
编译、连接完成后按CTRL+F5进入调试,此时,点击菜单Peripherals,即会多出一项“键盘LED仿真板(K)”,选中该项,即会出现如图2-8的界面。
图2-9工程设置
2.2.5举例说明
指示灯L7—L0依次循环点亮,程序如下:
MOVA,#0FEH
MAIN:
MOVP1,A
LCALLDELAY
RRA
LJMPMAIN
DELAY:
MOVR5,#10
D1:
MOVR7,#250
D2:
MOVR6,#250
D3:
DJNZR6,D3
DJNZR7,D2
DJNZR5,D1
RET
END
(注:
其软件界面及结果见附录3图g、h所示)
3多花样流水灯硬件设计
3.1Ledkey控件原理图
按照单片机系统扩展与系统配置状况,单片机应用系统可分为最小系统、最小功耗系统及典型系统等。
AT89C51单片机是美国ATMEL公司生产的低电压、高性能CMOS8位单片机,具有丰富的内部资源:
4kB闪存、128BRAM、32根I/O口线、2个16位定时/计数器、5个向量两级中断结构、2个全双工的串行口,具有4.25~5.50V的电压工作范围和0~24MHz工作频率,使用AT89C51单片机时无须外扩存储器。
因此,本流水灯实际上就是一个带有八个发光二极管的单片机最小应用系统,即为由发光二极管、晶振、复位、电从原理图中可以看出,如果要让接在P1.0口的LED1亮起来,那么只要把P1.0口的电平变为低电平就可以了;相反,如果要接在P1.0口的LED1熄灭,就要把P1.0口的电平变为高电平;同理,接在P1.1~P1.7口的其他7个LED的点亮和熄灭的方法同LED1。
因此,要实现流水灯功能,我们只要将发光二极管LED1~LED8依次点亮、熄灭,8只LED灯便会一亮一暗的做流水灯了。
在此我们还应注意一点,由于人眼的视觉暂留效应以及单片机执行每条指令的时间很短,我们在控制二极管亮灭的时候应该延时一段时间,否则我们就看不到“流水”效果了。
其硬件原理图如图3-1所示:
图3-1硬件原理图
3.2功能介绍
图中的电阻为LED1~8的限流电阻,与复位电路连接的RST引脚使单片机的RST复位脚电平先高后低,从而达到复位;图中的系统时钟电路的设计如图3-2所示。
图3-2复位电路
对于时间要求不高的系统,使用内部振荡方式即可(如图3-1)。
图中电容器C1、C2起稳定振荡频率、快速起振的作用,因此注意电容的参数(一般为5~30PF),并保证电路的对称性选用正规厂家产品。
在与引脚X1和X2相连接的电路以及单片机内部时钟电路的作用下,单片机依程序将P1.0~P1.7引脚拉低或抬高;拉低的引脚对应的LED点亮,抬高的引脚对应的LED熄灭。
与P3口相连的开关是用来选择控制各种花样流水灯所亮的方式,p3.2处于开状态时,其流水花样参见图表3-3,p3.3控制的花样如图表3-4,p3.4控制的如图表3-5。
(注:
以下各表只是其完整花样中的一部分,详见附录)
表3-3P3.2控制花样图
L7
L6
L5
L4
L3
L2
L1
L0
0
1
1
1
1
1
1
1
1
0
1
1
1
1
1
1
1
1
0
1
1
1
1
1
1
1
1
0
1
1
1
1
L7
L6
L5
L4
L3
L2
L1
L0
1
1
1
1
1
0
1
0
1
1
1
1
0
1
0
1
1
0
1
0
1
1
1
1
0
1
0
1
1
1
1
1
0
0
1
1
1
1
0
0
表3-3P3.3控制花样图
表3-4P3.4控制花样图
L7
L6
L5
L4
L3
L2
L1
L0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
1
1
0
0
0
0
0
1
1
1
0
0
0
0
1
1
1
1
0
0
0
1
1
1
1
1
4多花样流水灯软件设计
4.1程序功能
说明:
以下程序代码只是全部代码的一部分,完整的程序代码请参照附录1。
ORG0000H;单片机上电后从0000H地址执行
AJMPSTART;跳转到主程序存放地址处
ORG0030H;设置主程序开始地址
START:
MOVSP,#60H;设置堆栈起始地址为60H
MOVP3,#0FFH;P3口初始定义
此段程序相当于给整个程序一个起始地点和初始化,伪指令ORG可以改变汇编器的地址计数器初值,指示此语句后面的程序或数据块以ORG后的数据为起始地址连续存放在程序存储器中。
其具体表现在主程序开始地址为0030H、堆栈指针指向60H、P3口置‘1’状态,也就是P3口控制的开关一开始是关闭状态。
;检测开关状态*********************************************
Test_on:
JNBP3.2,ON1;检测p3.2开关状态
JNBP3.3,ON2
JNBP3.4,ON3
JMPTest_on;循环等待检测
指令JNB在此处的用途为,当P3口为‘0’状态时,跳转到相应的程序段,从而实现开关功能。
若P3口不为‘0’,则执行指令JMP,使此段程序来个短跳转,跳回到此段首地置,重新执行此段程序,从而实现了检测开关状态的作用。
;开关导通状态*************************************************
ON1:
MOVDPTR,#TAB1;指向表首地址
LOOP1:
CLRA;累加器清零
MOVCA,@A+DPTR;取数据表中的值
CJNEA,#0FFH,SHOW1;检查流水结束标志
JBP3.2,Test_on;若P3.2口为1,重新检测开关
AJMPON1;所有花样流完,则从头开始重复流
当检测到P3.2为‘0’状态时,此段程序就开始被执行了。
因为此程序的设计用的是查表法,而查表法用的是程序存储器,指令符号采用MOVC的形式,所以就应该先让寄存器DPTR指针指向表TAB1的首地址,同时还应将累加器清零,这样在用指令MOVCA,@A+DPTR时就很容易的让我们看到所取的为表中的哪个数据了。
在这里还用到了转移指令CJNEA,#data,rel此指令的意思为:
当A≠#data,则转移,执行(As+3+rel)→PC,A=#data,程序顺序执行。
该指令在此处的用途为检查流水结束标志,也就是当A≠#0FFH时执行SHOW1这个程序段,当A=#0FFH时,就说明程序已经执行完,则顺序执行下一指令。
当将一个表中的数据都取完时,程序将重新检测开关,所以这里就用到了指令JBbit,rel此指令意思为:
若(bit)=1,则转移到(As+3+rel),否则程序顺序执行。
当所有花样流完时,通过指令AJMPON1使之实现循环功能。
;显示程序**********************************************************
SHOW1:
MOVP1,A;将数据送到P1口
MOVR1,#0AH
D_LOOP1:
ACALLDELAY;调用延时子程序
DJNZR1,D_LOOP1
INCDPTR;取数据表指针指向下一数据
AJMPLOOP1;继续查表取数据
很明显这段程序是具体实现灯的显示的。
由于与P1口相连的是LED显示灯,所以将A中的状态送到P1口,就能实现表中各种状态在LED显示灯所对应的亮法了。
此处还用到了一个小的循环,循环的是下面的延时程序,通过减一非零转移DJNZ和给出的数据来看,循环了10次,这样做是为了使延时更长一些,具体的有关延时方面的问题将在下面的延时程序中详细介绍。
当延时结束后,就要接着去取下一个要取的数据,在这里为实现这一功能用到了指令INC,在这里就不再详细介绍它了。
;延时程序***********************************************
DELAY:
MOVR7,#0FFH
D1:
MOVR6,#0FFH
D2:
DJNZR6,D2
DJNZR7,D1
RET
此延时程序段总的延时时间为:
{1+[1+(2×255)+2]×255
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 毕业设计 34 基于 AT89C51 单片机 keilc 软件 流水 设计