基于单片机的电子课程表系统课程设计.docx
《基于单片机的电子课程表系统课程设计.docx》由会员分享,可在线阅读,更多相关《基于单片机的电子课程表系统课程设计.docx(22页珍藏版)》请在冰豆网上搜索。
基于单片机的电子课程表系统课程设计
数理与信息工程学院
《单片机原理及应用》期末课程设计
题目:
基于单片机的电子课程表系统
专业:
计算机科学与技术
班级:
计算机072班
姓名:
梁姣
学号:
07220111
指导老师:
余水宝
成绩:
(2010.1)
目录
第1节引言……………………………………………………………………………3
1.1电子课表系统概述……………………………………………………………3
1.2本设计任务和主要内容………………………………………………………4
第2节系统主要硬件电路设计………………………………………………………5
2.1单片机控制系统原理…………………………………………………………5
2.2单片机主机系统电路…………………………………………………………6
2.2.1时钟电路………………………………………………………………7
2.3七段数码管显示电路…………………………………………………………7
2.4LED显示系统电路……………………………………………………………8
2.5汉字显示硬件电路……………………………………………………………9
第3节系统软件设计…………………………………………………………………10
3.1系统主程序设计………………………………………………………………10
3.2汉字的点阵显示原理及字库代码获取方法…………………………………15
第4节结束语…………………………………………………………………………18
参考文献…………………………………………………………………………19
附录…………………………………………………………………………20
基于单片机的电子课程表系统
数理与信息工程学院计算机科学与技术梁姣
指导教师:
余水宝
第1节引言
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—FalshProgrammableandErasableReadOnlyMemory)的低电压,高性能CMOS8位微处理器,俗称单片机。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
LED因其体积小,耗电量低,高亮度及环保等优点而被广泛应用于公共场所的大屏显示上,LED点阵大屏可应用于户外广告,交通导航,大厅公告,比赛的多媒体实时显示等领域。
学校新建体育馆内就置有大幅LED显示,校运会时为赛事信息实时显示提供了便捷。
我们的课程设计是基于AT89C51单片机,用16*16点阵显示滚动的课程名称,至于教室门口,可即时显示该教室内正在上的课程名称,方便师生选择合适的教室学习。
所作的点阵屏具有可移植性强,功能简单,可以简单继续添加更多相关功能的模型,也可以扩展成多块点阵屏的组合,以改良显示效果。
该系统灵活性强,易于操作,可靠性高。
1.1电子课表系统概述
经过一段时间的观察,我们发现,同学们上自习是经常遇到一个问题。
教室中有很多人,但不能确定里面是不是准备要上课,能不能到里面去自习。
有时候坐下没多久刚刚进入学习状态,就有人进来说此教室将被班级活动占用或临时调整为上课教室。
所以我们设想,能不能设计一个电子课表,放在每个教室的门口,显示当前在上的课程,并可以通过一定的按键来及时改变课程,以应对临时变化。
我首先想到的是设计一种有控制终端的课程显示系统。
即每个教室门口都有一个电子课表,通过终端的控制完成所有课表的显示。
但后来发现,以我们的能力做这样的工作太过复杂,所以选择了更容易的方式:
单一的放在教室门口的电子课表,只显示当前的课程。
于是现在的作品应运而生。
发光二极管具有亮度高、体积小、单色性好、响应速度快、驱动简单、寿命长等优点,LED显示屏由发光二极管阵列构成并通过一定的控制方式,用于显示文字、图像、行情等各种信息以及电视、录像信号,由于由LED器件阵列组成的显示屏幕成本低,安装方便灵活,正受到社会各界尤其是商业界、广告界的极大重视。
在大型商场、车站、码头、地铁站以及各类办事窗口等越来越多的场所需要用LED点阵显示图形和汉字。
显然,LED显示已成为城市亮化、现代化和信息化社会的一个重要标志。
本文基于单片机(AT89C51)讲述了16×16LED汉字点阵显示的基本原理、硬件组成与设计、程序编译与下载等基本环节和相关技术,根据点阵屏和七段数码管的基本原理,做出了方便实用的电子课表!
1.2本设计任务和主要内容
本课程设计的主要任务是以AT89C51为核心芯片设计16×16LED汉字点阵显示电路。
硬件电路主要由AT89C51单片机控制器、LED显示屏行列驱动电路以及LED点阵显示屏,六位七段数码管4部分组成。
通过汉字字模点阵数据批量生成软件来实现汉字点阵,采用汇编语言对单片机进行控制操作。
完成实物电路并在Proteus软件的基础上对结果进行仿真,得到了汉字点阵效果图。
预计设计完成的电子课程表有如下功能:
1.实现LED点阵屏汉字名称的滚动显示。
2.实现不通课程汉字名称的自动切换。
3.实现按键控制课程名称的临时更改。
4.实现节日动画的显示。
5.实现6位七段数码管显示时分秒。
6.实现按键控制时间的调整。
第2节系统主要硬件电路设计
2.1组成框图
硬件设计思想:
通过按键输入控制信号,由单片机进行处理,并将行列信号分别通过显示驱动输入点阵屏和数码管,控制点阵和数码管的显示.
图2-1电子课表系统原理框图
图2-2系统主要硬件电路图
2.2单片机主机系统电路
本产品采用以AT89C51单片机为核心芯片的电路来实现,主要由AT89C51芯片、时钟电路、复位电路、列扫描驱动电路(74HCl54)、16×16LED点阵5部分组成,如图2-1所示。
其中,AT89C51单片机是51系列单片机的一个成员,是8051单片机的简化版。
内部自带2K字节可编程FLASH存储器的低电压、高性能COMS八位微处理器,与IntelMCS-51系列单片机的指令和输出管脚相兼容。
由于将多功能八位CPU和闪速存储器结合在单个芯片中,因此,AT89C2051构成的单片机系统是具有结构最简单、造价最低廉、效率最高的微控制系统,省去了外部的RAM、ROM和接口器件,减少了硬件开销,节省了成本,提高了系统的性价比。
图2-3AT89C51引脚图
2.2.1时钟电路
时钟电路由AT89C5l的18,19脚的时钟端(XTAIl及XTAL2)以及12MHz晶振X、电容C2、C3组成,采用片内振荡方式。
复位电路采用简易的上电复位电路,主要由电阻R,R2,电容C,开关K组成,分别接至AT89C51的RST复位输入端。
2.3七段数码管显示电路
用74HC164实现8路并口输出的扩展,占用单片机的两个端口。
程序控制PD6作为数据线,将一字节由高位到低位,依次输出,输出时先根据该位的数值置PD6为“1”或“0”,然后控制PA7输出“1”,再输出“0”,模拟时钟信号,将PD6数据打入74HC164。
循环移位8次后,将1字节的数据由低位到高位串行输入到74HC164中,即可在74hc164的输出端得到并行的8位数据,即七段数码管的段码值。
用74LS138实现6路并口输出的扩展,将位选的段码值依次打入74LS138,74LS138任一时刻只有一个输出口输出低电平,对应的一位数码管被选中,扫描6次后可以实现六位数码管的显示。
电阻起限流的作用。
该模块可以实现时分秒的显示,补充并强化了电子课表的功能,为了节省单片机布局有些不合理的端口,用了两处串入并出的扩展。
图2-4六位七段数码管显示结构图
2.4LED显示系统电路
LED点阵显示屏采用16×16共256个象素的点阵,可通过万用表检测发光二极管的方法测试判断出该点阵的引脚分布。
我们把行列总线接在单片机的I/0口,然后把上面分析到的扫描代码送入总线,就可以得到显示的汉字了。
但是若将LED点阵的行列端口全部直接接入AT89C51单片机,则需要使用32条I/0口,这样会造成I/0口资源的耗尽,系统也再无扩充的余地。
因此,我们在实际应用中只是将LED点阵的16条行线直接接在P0口和P2口,至于列选扫描信号则是由4—16线译码器74HCl54来选择控制,这样一来列选控制只使用了单片机的4个I/O口,节约了很多I/O口资源,为单片机系统扩充使用功能提供了条件。
考虑到P0口必需设置上拉电阻,我们采用4.7kΩ排电阻作为上拉电阻。
汉字扫描显示的基本过程是这样的:
通电后由于电阻R,电容c1的作用,使单片机的RST复位脚电平先高后低,从而达到复位;之后,在C、C3、X以及单片机内部时钟电路的作用下,单片机89C51按照设定的程序在P0和P2接口输出与内部汉字对应的代码电平送至LED点阵的行选线(高电平驱动),同时在P1.1,P1.2,P1.3,P1.4接口输出列选扫描信号(低电平驱动),从而选中相应的象素LED发光,并利用人眼的视觉暂留特性合成整个汉字的显示。
再改变取表地址实现汉字的滚动显示。
图2-5LED显示原理框图
2.5 汉字显示硬件电路
本文所设计的目标是在16×16LED点阵上实现汉字显示。
汉字点阵控制电路选用AT89C51。
硬件电路分为单片机控制器、LED显示屏行列驱动电路、LED点阵显示屏3部分,完整的硬件电路如图2-2所示。
选用4216译码器74154作为行选址逻辑控制端,AT89C51的P0、P2口作为列数据输入端。
图2-616*16LED汉字显示仿真图
第3节系统的软件设计
软件程序主要由开始、初始化、主程序、字库组成。
其中主程序的流程图如图2-7所示。
图2-7汉字输出流程图
3.1系统主程序设计
ORG0000H
ST:
MOVA,#0FFH;初始化
MOVP1,A
MOVP2,A
MOVP3,A
MOVP0,A
CLRA
MOVR0,#50H;显示缓存清0
MOVR1,#20H;控制清0的次数
ST0:
MOV@R0,A
INCR0
DJNZR1,ST0
;正文显示
CHINESE:
MOVDPTR,#TAB1;查表指针指向TAB1
LCALLHZ
;结束动画
SCREE:
MOVDPTR,#TAB2;查表指针指向TAB2
ACALLDD
MOVDPTR,#TAB3;查表指针指向TAB3
ACALLDD
MOVDPTR,#TAB4;查表指针指向TAB4
ACALLDD
LJMPCHINESE
;显示8幅画面子程序,SCREE专用,用字模软件字要倒置(表必须深256字节)
DD:
MOVB,#00H
MOVR0,#08H;显示8幅画面
AJMPCC
CC0:
MOVA,B
ADDA,#20H;指向下一幅画面
MOVB,A
CC:
MOVR7,#08H;画面停留时间
MOVR3,B
MOV37H,R0
LCALLENTER
DIS00:
LCALLDISPLAY
DJNZR7,DIS00
MOVR0,37H
DJNZR0,CC0
RET
;汉字上移子程序,可显示8个汉字,(表必须深256字节)
HZ:
MOVR3,#00H;查表偏移量
MOVR5,#81H;查表128次
MOVBACK:
MOVR4,#10H;使显示完一个汉字
MOVBACK0:
MOVR7,#02H;一桢画面显示时间
MOVR0,#6DH;低8位R0指向显示缓存倒数第3个字节,以备与最后1个字节交换
MOVR1,#6CH;高8位R1指向显示缓存倒数第4个字节,以备与倒数第2个字节交换
MOVR2,#10H;内存后移的次数
DJNZR5,MOVBACK1
RET;显示完该表,返回
MOVBACK1:
MOVA,@R0;低8位被后移的内存单元数据暂存入A
INCR0;后移两字节
INCR0
MOV@R0,A;放入要移的低8位数据
MOVA,R0;R0指向下一个要后移的内存单元
SUBBA,#04H
MOVR0,A
MOVA,@R1;高8位被后移的内存单元数据暂存入A
INCR1;后移两字节
INCR1
MOV@R1,A;放入要移高8位的数据
MOVA,R1;R1指向下一个要后移的内存单元
SUBBA,#04H
MOVR1,A;R1指向下一个要后移的内存单元
DJNZR2,MOVBACK1;显示缓存数据依次后移
MOVA,R3;从表TAB1读入要移进50H,51H的数据
MOVCA,@A+DPTR;先给50H读数据
MOV50H,A
MOVA,R3;指向下一字节
INCA
MOVR3,A
MOVCA,@A+DPTR;再给51H读数据
MOV51H,A
MOVA,R3;指向下一字节
INCA
MOVR3,A
MOV30H,R3;保护数据
MOV31H,R4
MOV32H,R5
DISMOV:
LCALLDISPLAY;显示当前数据
DJNZR7,DISMOV
MOVR3,30H
MOVR4,31H
MOVR5,32H
DJNZR4,MOVBACK0
MOV30H,R3;保护数据
MOV32H,R5
MOVR7,#24H;显示当前数据延时
DISMOV0:
LCALLDISPLAY
DJNZR7,DISMOV0
MOVR3,30H
MOVR5,32H
LJMPMOVBACK
;放进一幅显示数据到显示缓存子程序,要先设好指针DPTR和R3,影响R1,R2,R3
ENTER:
MOVR1,#50H;从50H单元起把表存入
MOVR2,#20H;查表次数
MOVA,R3
CLLOOP_:
MOVCA,@A+DPTR;查表
MOV@R1,A;将表放进5X,6X单元
INCR1;R1指向下一个地址空间
MOVA,R3;查表指针后移
INCA
MOVR3,A;将指针修改结果存入R3
DJNZR2,CLLOOP_;没查完转CLLOOP_
RET
;15MS,显示子程序,一桢32个字节,影响A,R0,R1,R3,R4,R5,R6;
;单片机网提供汉字取模工具,可显示任意汉字
DISPLAY:
MOVA,#0FFH
MOVP0,A
MOVP1,A
MOVP2,A
MOVP3,A
SETBC
MOVR6,#7FH;赋扫描字初值,左移后初值为0FEH
MOVR5,#00H;列扫描低8位控制
MOVR0,#50H;行的高8(p1)位要显示的数据起始地址
MOVR1,#10H;扫描次数
DISLOOP:
MOVA,@R0;从内存读数据
MOVP2,#0FFH;装入数据时不显示任何东西
MOVP3,#0FFH
CPLA;数据取反以适合显示
MOVP1,A;送入行的高8(p1)位要显示的数据
INCR0;修改R0指向低8位要显示的数据
MOVA,@R0;读低8位要显示的数据
CPLA;数据取反以适合显示
MOVP0,A;送入行的低8(p0)位要显示的数据
INCR0;R0指向下一个高8(p0)位要显示的数据
LCALLNEXT;调用列扫描程序
LCALLDELAY1MS;显示延时
DJNZR1,DISLOOP;一桢显示完返回
MOVP3,#0FFH;全灭
RET
;列扫描子程序DISLOOP专用
NEXT:
JNCNEXT1;C=0转扫描高8(p3)位行
MOVA,R6;修改扫描字
RLA
MOVR6,A
INCR5
CJNER5,#09H,NEXT0;R6=#0FEH时C=0
AJMPNEXT1
BACK:
RET
NEXT0:
MOVP2,R6;扫描低8(p2)位行
AJMPBACK
NEXT1:
MOVP2,#0FFH
MOVP3,R6;扫描高8(p3)位行
MOVA,R6;修改扫描字
RLA
MOVR6,A
AJMPBACK
;延时1MS子程序
DELAY1MS:
MOVR3,#10
D0:
MOVR4,#50
D1:
DJNZR4,D1
DJNZR3,D0
RET
TAB1:
DB01FH,0F8H,001H,000H,07FH,0FEH,041H,004H,01DH,070H,001H,000H,01DH,070H,000H,000H
DB01FH,0F0H,011H,010H,01FH,0F0H,011H,010H,01FH,0F2H,001H,002H,001H,002H,000H,0FEH;電
DB000H,000H,03FH,0F0H,000H,020H,000H,040H,000H,080H,001H,000H,001H,000H,001H,004H
DB0FFH,0FEH,001H,000H,001H,000H,001H,000H,001H,000H,001H,000H,005H,000H,002H,000H;子其余字略
;当前所选字体下一个汉字对应的点阵为:
宽度x高度=16x16,调整后为:
16x16
END
3.2汉字的点阵显示原理及字库代码获取方法
我们以UCDOS中文宋体字库为例,每一个字由16行16列的点阵组成显示。
即国标汉字库中的每一个字均由256点阵来表示。
我们可以把每一个点理解为一个象素,而把每一个字的字形理解为一幅图像。
事实上这个汉字屏不仅可以显示汉字,也可以显示在256象素范围内的任何图形。
如查用8位的AT89C51单片机控制,由于单片机的总线由8位,一个字需要拆分为2个部分,如图2-7所示
图2-7汉字输出点阵图
为了弄清楚汉字的点阵组成规律,首先通过列扫描方法获取汉字的代码。
汉字可拆分为上部和下部,上部由8×16点阵组成,下部也由8×16点阵组成。
本例通过列扫描方法首先显示左上角的第一列的上半部分,即第0列的P00~P07口,方向为P00到P07,显示汉字“我”时,为全灭,第一列的下半部分也为全灭。
第二列的上半部分P06、点亮,由上往下排列,为:
PO.0灭,PO.1灭,P0.2灭PO.3灭,PO.4灭,P0.5灭,P0.6亮,P0.7灭。
即二进制00000010,转换为十六进制为02h。
上半部第二列完成后,继续扫描下半部的第二列,为了接线的方便,我们仍设计成由上往下扫描,即从P27向P20方向扫描,从图3可以看到,这一列P23亮,即为00001000,十六进制则为08h。
依照这个方法转向第三列、第四列,……,直至第十六列的扫描,一共扫描32个8位,可以得出汉字“我”的扫描代码为:
00H,02H,08H,06H,28H,02H,24H,22H
0FCH,3FH,24H,21H,20H,10H,3CH,08H
0E2H,07H,20H,0AH,0E4H,11H,0A8H,20H
20H,30H,00H,00H,00H,00H,00H,00H
由这个原理可以看出,无论显示何种字体或图像,都可以用这个方法来分析出他的扫描代码从而显示在屏幕上。
上述方法虽然能够让我们弄清楚汉字点阵代码的获取过程,但是依靠人工方法获取汉字代码是一件非常繁琐的事情。
为此,我们经常采用字库软件查找字符代码,软件打开后输入汉字,点“检取”,十六进制数据的汉字代码即可自动生成,把我们所需要的竖排数据复制到程序中即可,如图2-8所示。
图2-8字库提取程序
可见,汉字点阵显示一般有点扫描、行扫描和列扫描3种。
为了符合视觉暂留要求,点扫描方法的扫描频率必须大于16×64—1024Hz,周期小于1ms即可。
行扫描和列扫描方法的扫描频率必须大于16×8一128Hz,周期小于7.8ms即可,但是一次驱动一列或一行(8颗LED)时需外加驱动电路提高电流,否则LED亮度会不足。
结束语
首先,通过这次应用系统设计,在很大程度上提高了自己的独立思考能力和单片机的专业知识,也深刻了解写一篇应用系统的步骤和格式,有过这样的一次训练,相信在接下来的日子我们都会了,而且会做得更好。
因为对期末将近自习教室管理混乱的状况有所感触,所以选择了书写这个系统,如果设计一个电子课表,放在每个教室的门口,显示当前在上或者将要上的课程,并可以通过一定的按键来及时改变课程,以应对临时变化,一定可以给广大复习学习的同学带来便利,于是现在的作品应运而生。
虽然本设计只使用了一块16×16LED点阵,电路简单,但是已经包涵了LED显示屏的电路基本原理和基本程序,只要扩展单片机的IO接口,并增加一些LED点阵和相关芯片,就能设计出更大面积、更多花样的LED显示屏。
因此本文对同类设计具有一定的理论和实践参考价值。
我所写的系统主要根据目前节水灌溉技术的发展趋势和国内实际的应用特点和要求,采用了自动化的结构形式,实现对土壤湿度的自动检测和控制。
系统基于单片机(AT89C51)讲述了16×16LED汉字点阵显示的基本原理、硬件组成与设计、程序编译与下载等基本环节和相关技术,根据点阵屏和七段数码管的基本原理,做出了方便实用的电子课表!
利用MCS51汇编语言编制,运行程序该系统的主要特点是:
1)LED点阵屏汉字名称的滚动显示,醒目了然。
2)不通课程汉字名称的自动切换,简明易懂。
3)按键控制课程名称的临时更改,为班会等班级活动临时占用教室提供方便。
4)节日动画的显示,喜庆欢快,带给同学们好心情。
5)6位七段数码管显示时分秒,以便老师和同学们随时获知准确时间。
6)按键控制时间的调整,确保时间的准确性。
另外,该系统适用性强,成本低廉,操作非常简单,在现实中的推广使用具有十分重要的意义:
参考文献
[1]王飞,靳桅,邬芝权.LED大屏幕输出电路的优化设计[J].液晶与显示,2008,23
(1):
1022105.
[2]刘飞,田承雷.单片机控制液晶显示器[J].矿业科学技术,2005,
(2):
9212.
[3]张平均,黄家骏.点阵式液晶显示模块的旋转式菜单设计[J].液晶与显示,2005,20(4):
3422345.
[4]陈伟锋,高宝建,汪俊,等.基于点阵图形液晶模块的多菜单设计[J].液晶与显示,2007,22(5):
6342638.
[5]郑喜凤,邓春健,冯永茂,等.一种实现LED显示屏显示信息的方法[J].液晶与显示,2007,22(3):
3312335.
[6]冯道宁,王念春.地铁列车LED显示屏的设计[J].液晶与显示,2007,22
(1):
992103.
[7]吴金戌,沈庆阳,郭庭吉.8051单片机实践与应用[M].北京:
清华大学出版社,2006:
15.
[8]石长华,周杰.基于Proteus的单