1、点阵式LED显示汉字1单片机课程设计 题 目 88点阵式LED显示汉字学院名称 电气工程学院指导老师 黄智伟 朱卫华 班 级 电子信息工程061班学 号 20064470120学生姓名 胡 含 二00九年六月点阵式LED显示汉字一、实验目的利用8X8点阵循环移动显示“胡”字二、芯片介绍AT89S51是美国ATMEL公司生产的低功耗、高性能CMOS 8位单片机,片内含4k bytes的可系统编程的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准8051指令系统及引脚。主要性能参数: 与MCS-51产品指令系统完全兼容 4k字节在系统编程(ISP)Flash
2、闪速存储器 1000次擦写周期 4.05.5V的工作电压范围 全静态工作模式:0Hz33MHz 三级程序加密锁 1288字节内部RAM 32个可编程I/O口线 2个16位定时/计数器 6个中断源 全双工串行UART通道 低功耗空闲和掉电模式 中断可以从空闲模式唤醒系统 看门狗(WDT)及双数据指针 掉电标识及快速编程特性 灵活的在系统编程(ISP字节或页写模式)AT89S51功能特性概述:AT89S51提供以下标准功能:4k字节Flash闪速存储器,1288字节内部RAM,32个可编程I/O口线,看门狗(WDT),两个数据指针,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信
3、口,片内振荡器及时钟电路。同时,AT89S51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。掉电模式保存RAM中的内容,但振荡器停止工作并禁止其他所有硬件工作直到下一个硬件复位。AT89S51的方框图及封装如下:引脚功能说明:Vcc:电源电压.GND:地 P0口:PO日是一组8位漏极开路型双向I/O口,也即地址/数据总线复用口。作为输出口用时,每位能驱动8个TTL逻辑门电路,对端口写“1”可作为高阻抗输入端用。 在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复用,在
4、访问期间激活内部上拉电阻。 在Flash编程时,P0口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻。 P1口:P1口是一个带内部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。作输入口使用时,囚为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流I。Flash编程和程序校验期间 P 1口接收低8位地址。端口引脚第二功能P1.5MOSI(用于ISP编程)P1.6MISO(用于ISP编程)P1.7SCK(用于ISP编程) P2口:P2是一个带有内部上拉电阻的8
5、位双向I/O口,P2的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口写“1”;通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流。 在访问外部程序存储器或16位地址的外部数据存储器(例如执行MOVX DPTR指令)时,P2口送出高8位地址数据。在访问8位地址的外部数据存储器(如执行MOVX Ri指令)时,P2 口线上的内容(也即特殊功能寄存器(SFR)区中P2寄存器的内容),在整个访问期间不改变。Flash编程或校验时,P2亦接收高位地址和其它控制信号。 P3口:P3口是一组带有内部上拉电阻的8位双向
6、I/O口。P3口输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对P3口写入“1”时,它们被内部上拉电阻拉高并可作为输入端口。作输入端时,被外部拉低的P3口将用上拉电阻输出电流。P3口除了作为一般的I/O口线,更重要的用途是它的第二功能,如下表所示:端口引脚第二功能P3.0RXDP3.1TXDP3.2INT0P3.3INT1P3.4T0P3.5T1P3.6WRP3.7RDP3口还接收一些用于Flash闪速存储器编程和程序校验的控制信号。 RST:复位输入。当振荡器工作时,RST引脚出现两个机器周期以上高电平使单片机复位。WDT溢出将使该引脚输出高电平,设置SFR AUXR的DISRTO
7、位(地址8EH)可打开或关闭此功能。DISRTO位缺省为RESET输出高电平打开状态。 ALE/PROG:当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。即使不访问外部存储器,ALE仍以时钟振荡频率的1/6输出固定的正脉冲信号,因此它可对外输出时钟或用于定时目的。要注意的是:每当访问外部数据存储器时将跳过一个ALE脉冲。 对Flash存储器编程期间,该引脚还用于输入编程脉冲(PROG )。如有必要,可通过对特殊功能寄存器(SFR) 区中的8EH单元的D0位置位,可禁止ALE操作。该位置位后,只有一条MOVX和MOVC指令ALE才会被激活。此外,该引脚
8、会被微弱拉高,单片机执行外部程序时,应设置ALE无效。PSEN:程序储存允许(PSEN)输出是外部程序存储器的读选通信号,当AT89S51由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN有效,即输出两个脉冲。当访问外部数据存储器,没有两次有效的PSEN信号。 EA/VPP:外部访问允许。欲使CPU仅访问外部程序存储器(地址为0000H-FFFFH), EA端必须保持低电平(接地)。需注意的是:如果加密位LB1被编程,复位时内部会锁存EA端状态。 如EA端为高电平(接Vcc端),CPU则执行内部程序存储器中的指令。 Flash存储器编程时,该引脚加上+12 V的编程电压(Vpp)。X
9、TAL 1:振荡器反相放大器及内部时钟发生器的输入端。XTAL 2:振荡器反相放大器的输出端。特殊功能寄存器:中断寄存器:各中断允许控制位于IE寄存器,5个中断源的中断优先级控制位于IP寄存器。双时钟指针寄存器:为更方便地访问内部和外部数据存储器,提供了两个16位数据指针寄存器:DP0位于SFR(特殊功能寄存器)区块中的地址82H, 83H和DP1位于地址84H, 85H,当SFR中的位DPS=0选择DPO,而DPS=1则选择DP1。用户应在访问相应的数据指针寄存器前初始化DPS位。存储器结构:MCS-51单片机内核采用程序存储器和数据存储器空间分开的结构,均具有64KB外部程序和数据的寻址空
10、间。 程序存储器: 如果EA引脚接地(GND),全部程序均执行外部存储器。在AT89S51,假如EA接至Vcc,程序首先执行地址从0000H-0FFFH(4KB)内部程序存储器,再执行地址为1000H-FFFFH (60KH)的外部程序存储器。 数据存储器:AT89851的具有128字节的内部RAM,这128字节可利用直接或间接寻址方式访问,堆栈操作可利用间接寻址方式进行,128字节均可设置为堆栈区空间。 看门狗定时器(WDT):WDT是为了解决CPU程序运行时可能进入混乱或死循环而设置,它由一个14bit计数器和看门狗复位SFR (WDTRST)构成。外部复位时,WDT默认为关闭状态,要打开
11、WDT,用户必须按顺序将01EH和0E1H写到WDTRST寄存器(SFR地址为0A6H),当启动了WDT,它会随晶体振荡器在每个机器周期计数,除硬件复位或WDT溢出复位外没有其它方法关闭WDT,当WDT溢出,将使RST引脚输出高电平的复位脉冲。 掉电和空闲状态时的WDT: 掉电时期,晶体振荡停止,WDT也停止。掉电模式下,用户不能再复位WDT。有两种方法可退出掉电模式:硬件复位或通过激活外部中断。当硬件复位退出掉电模式时,处理WDT可像通常的上电复位一样。当由中断退出掉电模式则有所不同,中断低电平状态持续到晶体振荡稳定,当中断电平变为高即响应中断服务。为防正中断误复位,当器件复位,中断引脚持续
12、为低时,WDT并末开始计数,白到中断引脚被拉高为止。这为在掉电模式下的中断执行中断服务程序而设置。 为保证WDT在退出掉电模式时极端情况下不溢出,最好在进入掉电模式前复位WDT。 在进入空闲模式前,WDT打开时,WDT是否继续计数由SFR中的AUXR的WDIDLE位决定,在IDLE期间(位WDIDLE=0 )默认状态是继续计数。为防止AT89S51从空闲模式中复位,用户应周期性地设置定时器,重新进入空闲模式。当位WDIDLE被置位,在空闲模式中WDT将停止计数,直到从空闲(IDLE)模式中退出重新开始计数。UART一通用异步通信口:AT89S51的UART操作与89C51的一样。 定时器0和定
13、时器1:AT89S51的定时器操作与89C51的一样。 中断:AT89S51共有5个中断向量:2个外部中断(INT0和INT1),2个定时中断(T0和T1)和一个串行中断。这些中断如下图:中断控制寄存器:EA-ESET1EX1ET0EX0相应位=1,打开中断;相应位=0,关闭中断。位标志位地址功能EAIE.7EA=0,关闭所有中断。EA=1,各中断源的禁止或使能取决于各中断源控制位的设置为1或是位0-IE.6保留-IE.5保留ESIE.4串行中断使能控制位ET1IE.3定时器1使能控制位EX1IE.2外部中断1使能控制位ET0IE.1定时器0使能控制位EX0IE.0外部中断0使能控制位不要访问
14、保留位,保留给以后扩展用IE也包含总中断控制位EA, EA清0,将关闭所有中断。 值得注意的是表4中的IE.6和IE.5没有定义,用户不要访问这些位,它是保留为以后的AT89产品作扩展用途。定时器0和定时器1的中断标志TFO和TF1,它是定时器溢出时的SSP2时序周期被置位,该标志保留至下个时序周期。晶体振荡器特性: AT89S51中有一个用于构成内部振荡器的高增益反相放大器,引脚XTAL1和XTAL2分别是该放大器的输入端和输出端。这个放大器与作为反馈元件的片外石英晶体或陶瓷谐振器一起构成自激振荡器,振荡电路参见下图。 外接石英晶体(或陶瓷谐振器)及电容C1, C2接在放大器的反馈回路中构成
15、并联振荡电路。对外接电容C1, C2虽然没有十分严格的要求,但电容容量的大小会轻微影响振荡频率的高低、振荡器工作的稳定性、起振的难易程度及温度稳定性。如果使用石英晶体,我们推荐电容使用30pF10pF,而如使用陶瓷谐振器建议选择40pF10F。 用户也可以采用外部时钟。采用外部时钟的电路如下图右图所示。这种情况下,外部时钟脉冲接到XTAL1端,即内部时钟发生器的输入端,XTAL2则悬空。由于外部时钟信号是通过一个2分频触发器后作为内部时钟信号的,所以对外部时钟信号的占空比没有特殊要求,但最小高电平持续时间和最大的低电平持续时间应符合产品技术条件的要求。Flash闪速存储器的并行编程: AT89
16、S51单片机内部有4k字节的可快速编程的Flash存储阵列。编程方法可通过传统的EPROM编程器使用高电压(+12V)和协调的控制信号进行编程。 AT89S51的代码是逐一字节进行编程的。三、88点阵式LED原理说明 下图为88点阵式LED外观及引脚图,等效电路如下所示: 88点阵式LED外观及引脚图88点阵式LED等效电路从上图可以看出,88点阵共需要64个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上,当对应的某一列置1电平,某一行置0电平,则相应的二极管就亮。点阵式LED扫描法简介:点阵式LED一般采用扫描式显示,实际运用分为三种方式:1) 点扫描2) 行扫描3) 列扫描
17、若使用第一种方式,其扫描频率必须大于1664=1024Hz,周期小于1ms即可。若使用第二种和第三种扫描方式,则频率必须大于168=128Hz,周期小于7.8ms即可视觉暂留要求。此外,一次驱动一列或一行(8颗LED)时需外加驱动电路提高电流,否则LED亮度不足。四、程序设计内容电路原理图:硬件系统连线:(1) 把“单片机系统”区域中的P1端口用8芯排芯连接到“点阵模块”区域中的“DR1DR8”端口上;(2) 把“单片机系统”区域中的P3端口用8芯排芯连接到“点阵模块”区域中的“DC1DC8”端口上;程序设计内容:1)“胡”字的循环移动显示代码的形成:如下图所示,开始显示“胡”字:1 2 3
18、4 5 6 7 8 因此,每一列的列代码分别为:00H,2EH,7AH,2EH,01H,7EH,54H,7FH。只要把这些代码送到相应的列线上面,即可实现汉字“胡”显示。送显示代码过程如下所示:送第一列线代码到P3端口,同时置第一行线为“0”,其它行线为“1”,延时2ms左右,送第二列线代码到P3端口,同时置第二行线为“0”,其它行线为“1”,延时2ms左右,如此下去,直到送完最后一列代码,又从头开始送。“胡”字向左移动一格,如下图所示:1 2 3 4 5 6 7 8其每列的显示代码可由上述代码循环左移得到,即:2EH,7AH,2EH,01H,7EH,54H,7FH,00H。“胡”字再次左移,
19、如下图所示:1 2 3 4 5 6 7 8其显示代码为:7AH,2EH,01H,7EH,54H,7FH,00H,2EH。“胡”字再次左移,得到下图:1 2 3 4 5 6 7 8其显示代码为:2EH,01H,7EH,54H,7FH,00H,2EH,7AH。“胡”字继续左移,得到下图:1 2 3 4 5 6 7 8其显示代码为:01H,7EH,54H,7FH,00H,2EH,7AH,2EH。继续左移,得到下图:1 2 3 4 5 6 7 8其显示代码为:7EH,54H,7FH,00H,2EH,7AH,2EH,01H。左移,如下图:1 2 3 4 5 6 7 8其显示代码为:54H,7FH,00H
20、,2EH,7AH,2EH,01H,7EH。继续左移,得到下图:1 2 3 4 5 6 7 8其显示代码为: 7FH,00H,2EH,7AH,2EH,01H,7EH,54H。继续左移,得到:1 2 3 4 5 6 7 8该图即还原到了起始图,显示代码为:00H,2EH,7AH,2EH,01H,7EH,54H,7FH。最后,亮的部分熄灭,原本熄灭的都显示出来,即得下图:1 2 3 4 5 6 7 8其显示代码为:0FFH,0D1H,85H,0D1H,0FEH,81H,0ABH,80H。2)软件实现汇编源程序TIM EQU 30HCNTA EQU 31HCNTB EQU 32H ORG 00H LJ
21、MP START ORG 0BH LJMP T0X ORG 30HSTART: MOV TIM,#00H MOV CNTA,#00H MOV CNTB,#00H MOV TMOD,#01H MOV TH0,#(65536-4000)/256 MOV TL0,#(65536-4000) MOD 256 SETB TR0 SETB ET0 SETB EA SJMP $T0X: MOV TH0,#(65536-4000)/256 MOV TL0,#(65536-4000) MOD 256 MOV DPTR,#TAB MOV A,CNTA MOVC A,A+DPTR MOV P3,A MOV DPTR
22、,#DIGIT MOV A,CNTB MOV B,#8 MUL AB ADD A,CNTA MOVC A,A+DPTR MOV P1,A INC CNTA MOV A,CNTA CJNE A,#8,NEXT MOV CNTA,#00HNEXT: INC TIM MOV A,TIM CJNE A,#250,NEX MOV TIM,#00H INC CNTB MOV A,CNTB CJNE A,#10,NEX MOV CNTB,#00HNEX: RETITAB: DB 0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FHDIGIT: DB 00H,2EH,7AH,2EH,
23、01H,7EH,54H,7FH DB 2EH,7AH,2EH,01H,7EH,54H,7FH,00H DB 7AH,2EH,01H,7EH,54H,7FH,00H,2EH DB 2EH,01H,7EH,54H,7FH,00H, 2EH,7AH DB 01H,7EH,54H,7FH,00H, 2EH,7AH, 2EH DB 7EH,54H,7FH,00H, 2EH,7AH, 2EH, 01H DB 54H,7FH,00H, 2EH,7AH, 2EH, 01H, 7EH DB 7FH,00H, 2EH,7AH, 2EH, 01H, 7EH, 54H DB 00H, 2EH,7AH, 2EH, 01
24、H, 7EH, 54H, 7FH DB 0FFH, 0D1H,85H,0D1H,0FEH,81H,0ABH,80H END心得体会:此次的单片机课程设计,由自己选定课题、自己上网查阅资料确定硬件电路,通过借鉴对比优秀程序编制出自己的程序,在单片机学习优秀的同学完成最后调试,最终完成了此次的单片机课程设计。通过这次单片机课程设计,锻炼了自己的实际动手能力,提高了自己的编程水平。同时,也暴露了自己在设计单片机最小应用系统过程中出现的一些问题:首先,专业基础知识不够扎实,在确定硬件电路过程中,复位电路设计错误。第二,动手能力较差,在焊接电路的过程中,经常出现引脚连接错误的情况。第三,编程水平不高,在最后调试过程中,刚开始程序导入不成功,软件提示错误,经过检查发现有几处指令格式错误。另外点阵式LED并未按照预期显示,经过检查,是程序编制错误。最后,在这次课程设计中,暴露出的最大毛病,就是自己粗心大意,电路连接出错,程序编制时也出现错误。这次的课程设计,是对自己这学期来所学知识的一次检测,使自己发现在学习过程中所存在的问题,同时也让自己意识到与身边优秀同学的差距。接下来不到一年的大学时光,更要努力。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1