点阵式LED显示汉字文档格式.docx
《点阵式LED显示汉字文档格式.docx》由会员分享,可在线阅读,更多相关《点阵式LED显示汉字文档格式.docx(19页珍藏版)》请在冰豆网上搜索。
※掉电标识及快速编程特性
※灵活的在系统编程(ISP—字节或页写模式)
AT89S51功能特性概述:
AT89S51提供以下标准功能:
4k字节Flash闪速存储器,128×
8字节内部RAM,32个可编程I/O口线,看门狗(WDT),两个数据指针,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。
同时,AT89S51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。
空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。
掉电模式保存RAM中的内容,但振荡器停止工作并禁止其他所有硬件工作直到下一个硬件复位。
AT89S51的方框图及封装如下:
引脚功能说明:
※Vcc:
电源电压.
※GND:
地
※P0口:
PO日是一组8位漏极开路型双向I/O口,也即地址/数据总线复用口。
作为输出口用时,每位能驱动8个TTL逻辑门电路,对端口写“1”可作为高阻抗输入端用。
在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻。
在Flash编程时,P0口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻。
※P1口:
P1口是一个带内部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。
作输入口使用时,囚为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流I。
Flash编程和程序校验期间P1口接收低8位地址。
端口引脚
第二功能
P1.5
MOSI(用于ISP编程)
P1.6
MISO(用于ISP编程)
P1.7
SCK(用于ISP编程)
※P2口:
P2是一个带有内部上拉电阻的8位双向I/O口,P2的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对端口写“1”;
通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流。
在访问外部程序存储器或16位地址的外部数据存储器(例如执行MOVX@DPTR指令)时,P2口送出高8位地址数据。
在访问8位地址的外部数据存储器(如执行MOVX@Ri指令)时,P2口线上的内容(也即特殊功能寄存器(SFR)区中P2寄存器的内容),在整个访问期间不改变。
Flash编程或校验时,P2亦接收高位地址和其它控制信号。
※P3口:
P3口是一组带有内部上拉电阻的8位双向I/O口。
P3口输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对P3口写入“1”时,它们被内部上拉电阻拉高并可作为输入端口。
作输入端时,被外部拉低的P3口将用上拉电阻输出电流。
P3口除了作为一般的I/O口线,更重要的用途是它的第二功能,如下表所示:
P3.0
RXD
P3.1
TXD
P3.2
INT0
P3.3
INT1
P3.4
T0
P3.5
T1
P3.6
WR
P3.7
RD
P3口还接收一些用于Flash闪速存储器编程和程序校验的控制信号。
※RST:
复位输入。
当振荡器工作时,RST引脚出现两个机器周期以上高电平使单片机复位。
WDT溢出将使该引脚输出高电平,设置SFRAUXR的DISRTO位(地址8EH)可打开或关闭此功能。
DISRTO位缺省为RESET输出高电平打开状态。
※ALE/PROG:
当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。
即使不访问外部存储器,ALE仍以时钟振荡频率的1/6输出固定的正脉冲信号,因此它可对外输出时钟或用于定时目的。
要注意的是:
每当访问外部数据存储器时将跳过一个ALE脉冲。
对Flash存储器编程期间,该引脚还用于输入编程脉冲(PROG)。
如有必要,可通过对特殊功能寄存器(SFR)区中的8EH单元的D0位置位,可禁止ALE操作。
该位置位后,只有一条MOVX和MOVC指令ALE才会被激活。
此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE无效。
※PSEN:
程序储存允许(PSEN)输出是外部程序存储器的读选通信号,当AT89S51由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN有效,即输出两个脉冲。
当访问外部数据存储器,没有两次有效的PSEN信号。
※EA/VPP:
外部访问允许。
欲使CPU仅访问外部程序存储器(地址为0000H-FFFFH),EA端必须保持低电平(接地)。
需注意的是:
如果加密位LB1被编程,复位时内部会锁存EA端状态。
如EA端为高电平(接Vcc端),CPU则执行内部程序存储器中的指令。
Flash存储器编程时,该引脚加上+12V的编程电压(Vpp)。
※XTAL1:
振荡器反相放大器及内部时钟发生器的输入端。
※XTAL2:
振荡器反相放大器的输出端。
特殊功能寄存器:
※中断寄存器:
各中断允许控制位于IE寄存器,5个中断源的中断优先级控制位于IP寄存器。
※双时钟指针寄存器:
为更方便地访问内部和外部数据存储器,提供了两个16位数据指针寄存器:
DP0位于SFR(特殊功能寄存器)}区块中的地址82H,83H和DP1位于地址84H,85H,当SFR中的位DPS=0选择DPO,而DPS=1则选择DP1。
用户应在访问相应的数据指针寄存器前初始化DPS位。
※存储器结构:
MCS-51单片机内核采用程序存储器和数据存储器空间分开的结构,均具有64KB外部程序和数据的寻址空间。
※程序存储器:
如果EA引脚接地(GND),全部程序均执行外部存储器。
在AT89S51,假如EA接至Vcc,程序首先执行地址从0000H-0FFFH(4KB)内部程序存储器,再执行地址为1000H-FFFFH(60KH)的外部程序存储器。
※数据存储器:
AT89851的具有128字节的内部RAM,这128字节可利用直接或间接寻址方式访问,堆栈操作可利用间接寻址方式进行,128字节均可设置为堆栈区空间。
※看门狗定时器(WDT):
WDT是为了解决CPU程序运行时可能进入混乱或死循环而设置,它由一个14bit计数器和看门狗复位SFR(WDTRST)构成。
外部复位时,WDT默认为关闭状态,要打开WDT,用户必须按顺序将01EH和0E1H写到WDTRST寄存器(SFR地址为0A6H),当启动了WDT,它会随晶体振荡器在每个机器周期计数,除硬件复位或WDT溢出复位外没有其它方法关闭WDT,当WDT溢出,将使RST引脚输出高电平的复位脉冲。
※掉电和空闲状态时的WDT:
掉电时期,晶体振荡停止,WDT也停止。
掉电模式下,用户不能再复位WDT。
有两种方法可退出掉电模式:
硬件复位或通过激活外部中断。
当硬件复位退出掉电模式时,处理WDT可像通常的上电复位一样。
当由中断退出掉电模式则有所不同,中断低电平状态持续到晶体振荡稳定,当中断电平变为高即响应中断服务。
为防正中断误复位,当器件复位,中断引脚持续为低时,WDT并末开始计数,白到中断引脚被拉高为止。
这为在掉电模式下的中断执行中断服务程序而设置。
为保证WDT在退出掉电模式时极端情况下不溢出,最好在进入掉电模式前复位WDT。
在进入空闲模式前,WDT打开时,WDT是否继续计数由SFR中的AUXR的WDIDLE位决定,在IDLE期间(位WDIDLE=0)默认状态是继续计数。
为防止AT89S51从空闲模式中复位,用户应周期性地设置定时器,重新进入空闲模式。
当位WDIDLE被置位,在空闲模式中WDT将停止计数,直到从空闲(IDLE)模式中退出重新开始计数。
※UART一通用异步通信口:
AT89S51的UART操作与89C51的一样。
※定时器0和定时器1:
AT89S51的定时器操作与89C51的一样。
※中断:
AT89S51共有5个中断向量:
2个外部中断(INT0和INT1),2个定时中断(T0和T1)和一个串行中断。
这些中断如下图:
中断控制寄存器:
EA
-
ES
ET1
EX1
ET0
EX0
相应位=1,打开中断;
相应位=0,关闭中断。
位标志
位地址
功能
IE.7
EA=0,关闭所有中断。
EA=1,各中断源的禁止或使能取决于各中断源控制位的设置为1或是位0
--
IE.6
保留
IE.5
IE.4
串行中断使能控制位
IE.3
定时器1使能控制位
IE.2
外部中断1使能控制位
IE.1
定时器0使能控制位
IE.0
外部中断0使能控制位
不要访问保留位,保留给以后扩展用
IE也包含总中断控制位EA,EA清0,将关闭所有中断。
值得注意的是表4中的IE.6和IE.5没有定义,用户不要访问这些位,它是保留为以后的AT89产品作扩展用途。
定时器0和定时器1的中断标志TFO和TF1,它是定时器溢出时的SSP2时序周期被置位,该标志保留至下个时序周期。
※晶体振荡器特性:
AT89S51中有一个用于构成内部振荡器的高增益反相放大器,引脚XTAL1和XTAL2分别是该放大器的输入端和输出端。
这个放大器与作为反馈元件的片外石英晶体或陶瓷谐振器一起构成自激振荡器,振荡电路参见下图。
外接石英晶体(或陶瓷谐振器)及电容C1,C2接在放大器的反馈回路中构成并联振荡电路。
对外接电容C1,C2虽然没有十分严格的要求,但电容容量的大小会轻微影响振荡频率的高低、振荡器工作的稳定性、起振的难易程度及温度稳定性。
如果使用石英晶体,我们推荐电容使用30pF±
10pF,而如使用陶瓷谐振器建议选择40pF±
10F。
用户也可以采用外部时钟。
采用外部时钟的电路如下图右图所示。
这种情况下,外部时钟脉冲接到XTAL1端,即内部时钟发生器的输入端,XTAL2则悬空。
由于外部时钟信号是通过一个2分频触发器后作为内部时钟信号的,所以对外部时钟信号的占空比没有特殊要求,但最小高电平持续时间和最大的低电平持续时间应符合产品技术条件的要求。
※Flash闪速存储器的并行编程:
AT89S51单片机内部有4k字节的可快速编程的Flash存储阵列。
编程方法可通过传统的EPROM编程器使用高电压(+12V)和协调的控制信号进行编程。
AT89S51的代码是逐一字节进行编程的。
三、8×
8点阵式LED原理说明
下图为8×
8点阵式LED外观及引脚图,等效电路如下所示:
8×
8点阵式LED外观及引脚图
8×
8点阵式LED等效电路
从上图可以看出,8×
8点阵共需要64个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上,当对应的某一列置1电平,某一行置0电平,则相应的二极管就亮。
点阵式LED扫描法简介:
点阵式LED一般采用扫描式显示,实际运用分为三种方式:
1)点扫描
2)行扫描
3)列扫描
若使用第一种方式,其扫描频率必须大于16×
64=1024Hz,周期小于1ms即可。
若使用第二种和第三种扫描方式,则频率必须大于16×
8=128Hz,周期小于7.8ms即可视觉暂留要求。
此外,一次驱动一列或一行(8颗LED)时需外加驱动电路提高电流,否则LED亮度不足。
四、程序设计内容
电路原理图:
硬件系统连线:
(1).把“单片机系统”区域中的P1端口用8芯排芯连接到“点阵模块”区域中的“DR1-DR8”端口上;
(2).把“单片机系统”区域中的P3端口用8芯排芯连接到“点阵模块”区域中的“DC1-DC8”端口上;
程序设计内容:
1)“胡”字的循环移动显示代码的形成:
如下图所示,开始显示“胡”字:
12345678
●
因此,每一列的列代码分别为:
00H,2EH,7AH,2EH,01H,7EH,54H,7FH。
只要把这些代码送到相应的列线上面,即可实现汉字“胡”显示。
送显示代码过程如下所示:
送第一列线代码到P3端口,同时置第一行线为“0”,其它行线为“1”,延时2ms左右,
送第二列线代码到P3端口,同时置第二行线为“0”,其它行线为“1”,延时2ms左右,
如此下去,直到送完最后一列代码,又从头开始送。
“胡”字向左移动一格,如下图所示:
其每列的显示代码可由上述代码循环左移得到,即:
2EH,7AH,2EH,01H,7EH,54H,7FH,00H。
“胡”字再次左移,如下图所示:
其显示代码为:
7AH,2EH,01H,7EH,54H,7FH,00H,2EH。
“胡”字再次左移,得到下图:
2EH,01H,7EH,54H,7FH,00H,2EH,7AH。
“胡”字继续左移,得到下图:
01H,7EH,54H,7FH,00H,2EH,7AH,2EH。
继续左移,得到下图:
7EH,54H,7FH,00H,2EH,7AH,2EH,01H。
左移,如下图:
54H,7FH,00H,2EH,7AH,2EH,01H,7EH。
7FH,00H,2EH,7AH,2EH,01H,7EH,54H。
继续左移,得到:
该图即还原到了起始图,显示代码为:
最后,亮的部分熄灭,原本熄灭的都显示出来,即得下图:
0FFH,0D1H,85H,0D1H,0FEH,81H,0ABH,80H。
2)软件实现
汇编源程序
TIMEQU30H
CNTAEQU31H
CNTBEQU32H
ORG00H
LJMPSTART
ORG0BH
LJMPT0X
ORG30H
START:
MOVTIM,#00H
MOVCNTA,#00H
MOVCNTB,#00H
MOVTMOD,#01H
MOVTH0,#(65536-4000)/256
MOVTL0,#(65536-4000)MOD256
SETBTR0
SETBET0
SETBEA
SJMP$
T0X:
MOVTH0,#(65536-4000)/256
MOVDPTR,#TAB
MOVA,CNTA
MOVCA,@A+DPTR
MOVP3,A
MOVDPTR,#DIGIT
MOVA,CNTB
MOVB,#8
MULAB
ADDA,CNTA
MOVP1,A
INCCNTA
CJNEA,#8,NEXT
NEXT:
INCTIM
MOVA,TIM
CJNEA,#250,NEX
MOVTIM,#00H
INCCNTB
CJNEA,#10,NEX
NEX:
RETI
TAB:
DB0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH
DIGIT:
DB00H,2EH,7AH,2EH,01H,7EH,54H,7FH
DB2EH,7AH,2EH,01H,7EH,54H,7FH,00H
DB7AH,2EH,01H,7EH,54H,7FH,00H,2EH
DB2EH,01H,7EH,54H,7FH,00H,2EH,7AH
DB01H,7EH,54H,7FH,00H,2EH,7AH,2EH
DB7EH,54H,7FH,00H,2EH,7AH,2EH,01H
DB54H,7FH,00H,2EH,7AH,2EH,01H,7EH
DB7FH,00H,2EH,7AH,2EH,01H,7EH,54H
DB00H,2EH,7AH,2EH,01H,7EH,54H,7FH
DB0FFH,0D1H,85H,0D1H,0FEH,81H,0ABH,80H
END
心得体会:
此次的单片机课程设计,由自己选定课题、自己上网查阅资料确定硬件电路,通过借鉴对比优秀程序编制出自己的程序,在单片机学习优秀的同学完成最后调试,最终完成了此次的单片机课程设计。
通过这次单片机课程设计,锻炼了自己的实际动手能力,提高了自己的编程水平。
同时,也暴露了自己在设计单片机最小应用系统过程中出现的一些问题:
首先,专业基础知识不够扎实,在确定硬件电路过程中,复位电路设计错误。
第二,动手能力较差,在焊接电路的过程中,经常出现引脚连接错误的情况。
第三,编程水平不高,在最后调试过程中,刚开始程序导入不成功,软件提示错误,经过检查发现有几处指令格式错误。
另外点阵式LED并未按照预期显示,经过检查,是程序编制错误。
最后,在这次课程设计中,暴露出的最大毛病,就是自己粗心大意,电路连接出错,程序编制时也出现错误。
这次的课程设计,是对自己这学期来所学知识的一次检测,使自己发现在学习过程中所存在的问题,同时也让自己意识到与身边优秀同学的差距。
接下来不到一年的大学时光,更要努力。