微机原理课程设计.docx
《微机原理课程设计.docx》由会员分享,可在线阅读,更多相关《微机原理课程设计.docx(19页珍藏版)》请在冰豆网上搜索。
![微机原理课程设计.docx](https://file1.bdocx.com/fileroot1/2023-1/21/469a73ba-8cdb-419f-8fa0-29524e7a3a4f/469a73ba-8cdb-419f-8fa0-29524e7a3a4f1.gif)
微机原理课程设计
西安科技大学高新学院
微机原理与接口技术
课程设计
课题一个16×16点阵汉字显示
院系机电信息学院
专业______电气自动化技术___
姓名____涂发
学号1001210223
指导教师刘敏层
日期2012.7.13
目录
1.课程2
1.1设计目的2
1.2设计内容2
1.3设计要求2
1.4设计分析3
2.概要4
2.1硬件电路设计4
2.2软件设计5
3.详细设计7
3.1程序流程图8
3.2程序代码9
4.调试15
4.1Keil软件调试15
4.2Protues软件调试16
5.运行结果与分析18
6.设计总结与心得体会18
7.参考文献19
1.课程
16×16点阵汉字显示
1.1设计目的
(1)掌握单片机扩展LCD显示器接口的设计与编程;
(2)利用汉字式LCD显示器显示汉字。
(3)以AT89C51系列单片机为核心器件,组成一个点阵式汉字电
字显示屏
(4)通过编程熟练掌握对显示汉字进行修改、调试。
(5)熟练的掌握并且使用keil软件及proteus软件调试方法。
1.2设计内容
使用一个16×16共阴极LED点阵显示汉字字符串“西安科技大学高新学院电专1002”
1.3设计要求
(1)画出硬件电路图及程序流程图;
(2)整理实验程序清单,并给程序加详细注释;
(3)解决实验中出现的问题并进行总结;
(4)给出实验结果及对实验的改进意见。
1.4设计分析
一个16X16共阴极LED点阵是由4个8X8点阵构成,如图1,4个8X8所示阵可由单片机P0口和P2口输出段码值,片选为由74HC154控制。
这些字符串的字模可通过相关软件实现,也可通过人工方式实现。
例如“西”和“02”字模如图2所示。
图1
2.概要
2.1硬件电路设计
添加硬件元件清单表
元件名称
所属类
所属子类
AT89C51
MicroprocessorICs
8051Family
CRYSTAL
miscellaneous
--
CAP
Capacitors
Generic
CAP-ELEC
Capacitors
Generic
RES
Resistor
7WaitWirewound
Resistor
10Waitwirewound
MATR1X-8×8-RED
Optoelectronics
DotMatrixDisplays
BUTTON
Switches&Relays
Switches
74HC154
TTL74HCseries
Decoders
RESPACK-8
Resistors
ResistorPacks
硬件连线图
一个16×16点阵汉字显示
2.2软件设计
16×16共阴极LED点阵由4个8×8点阵构成,需要显示汉字字符串“西安科技大学高新学院电专1002”,可通过建立数据表格的形式进行。
通过16×16点阵汉字字模提取软件,可提取各显示汉字的字模数据。
汉字分批输出显示采用动态扫描驱动方式,阐述16×16LED点阵汉字分批显示原理。
在初始化设置(关显示)后,首先,对P0输出段码汉字上半部的相应段点亮;接着,对P2输出段码值汉字下半部的相应段点亮,即送出了第一个汉字“西”的字模数据,同理再送出第2个汉字“安”的字模数据,…如此进行,就可显示第1个汉字“西”;再进行第2个汉字“安””的显示;…,直到汉字字符串显示完成。
若字符显示完毕,又从头开始循环显示。
字符提取界面
3.详细设计
一个16X16共阴极LED点阵是由4个8X8点阵构成,要想显示汉字字符串“西安科技大学高新学院电专1002”,可以通过建立一个数据表格的形式进行。
首先,位选1有效,将段码值20H送给P0,C1送给P2以驱动相应段点亮;然后位选2有效,将段码值20H送给P0,C1送给P2以驱动相应段点亮……如此进行,直到送完16个段码,就可显示”西”再进行字符”安”的显示……每个字符的显示与字符"安"的显示过程相同,只是段码值不同而已,片选位有C0~C15,由单片机的P1口控制74HC154输出。
。
初始化设置
取段码值送P0
位选
指向下一个段码
Y
N
取段码值送P2
指向下一个段码
位选加1
暂时清屏
N
Y
字符显示片刻
位选复位
N
3.2程序代码
ORG00H
START:
MOVA,#00H
MOVP0,A;清除画面
ANLP2,#00H;P2清零
MOVR2,#200
D1:
MOVR3,#0F8H;延时1s
DJNZR3,$;不为0则跳转至当前地址
DJNZR2,D1
MOV20H,#00H;取码指针初值
L1:
MOVR1,#80H;每字设置停留时间
L2:
MOVR6,#16;每字十六码
MOVR4,#00H;扫描初值
MOVR0,20H;取码指针存入R0
L3:
MOVA,R4;扫描指针载入A
MOVP1,A;取码指针存入R0
INCR4;扫描下一个断码
MOVA,R0;取码指针载入A
MOVDPTR,#TABLE;数据指针指到TABLE
MOVCA,@A+DPTR;至TABLE取上半部分数据码
MOVR7,A
MOVP0,A;输出至P0显示
INCR0;取码指针加1
MOVA,R0;取码指针载入A
MOVDPTR,#TABLE;数据指针指到TABLE
MOVCA,@A+DPTR;至TABLE取上半部分数据码
MOVR7,A
MOVP2,A;输出数据码
INCR0;取下一个码
MOVR3,#02H;扫描时间1ms
D2:
MOVR5,#0F8H;延时1
DJNZR5,$
DJNZR3,D2
MOVA,#00H;清除屏幕
MOVP0,A
ANLP2,#00H;对P2清零
DJNZR6,L3;是否已显示一个字
DJNZR1,L2;停留时间是否到了
MOV20H,R0;取吗指针存入20H地址
MOVA,R7
CJNER0,#0,L1;不相等则跳转指令
CJNER0,#255,L11
MOV20H,#00H;取码指针初值
L11:
MOVR1,#80H;每字设置停留时间
L22:
MOVR6,#16;每字十六码
MOVR4,#00H;扫描初值
MOVR0,20H;取码指针存入R0
L33:
MOVA,R4;扫描指针载入A
MOVP1,A;取码指针存入R0
INCR4;扫描下一个断码
MOVA,R0;取码指针载入A
MOVDPTR,#TABLE2;数据指针指到TABLE
MOVCA,@A+DPTR;至TABLE取上半部分数据码
MOVR7,A
MOVP0,A
INCR0;输出至P0显示
MOVA,R0;取码指针载入A
MOVDPTR,#TABLE2;数据指针指到TABLE
MOVCA,@A+DPTR;至TABLE取上半部分数据码
MOVR7,A
MOVP2,A
INCR0;取码指针加1
MOVR3,#02H;扫描时间1ms
D22:
MOVR5,#0F8H;延时1
DJNZR5,$
DJNZR3,D22
MOVA,#00H;清除屏幕
MOVP0,A
ANLP2,#00H;对P2清零
DJNZR6,L33;是否已显示一个字
DJNZR1,L22;停留时间是否到了
MOV20H,R0;取吗指针存入20H地址
MOVA,R7
CJNER0,#0,L11;不相等则跳转
CJNER0,#255,L1
JMPL1
TABLE:
DB40H,00H,40H,00H,47H,0FFH,44H,12H;
DB44H,22H,7FH,0C2H,44H,02H,44H,02H;
DB44H,02H,7FH,0C2H,44H,22H,44H,22H;
DB47H,0FFH,40H,00H,40H,00H,00H,00H;"Î西",0
DB01H,00H,09H,01H,31H,01H,21H,21H;
DB21H,62H,21H,92H,0AFH,14H,61H,08H;
DB21H,08H,21H,34H,21H,0C4H,21H,02H;
DB29H,01H,31H,00H,01H,00H,00H,00H;"安",1
DB24H,10H,24H,60H,25H,80H,7FH,0FFH;
DB0C5H,00H,44H,80H,00H,20H,44H,20H;
DB33H,20H,00H,20H,00H,20H,0FFH,0FFH;
DB00H,40H,00H,40H,00H,40H,00H,00H;"科",2
DB08H,20H,08H,22H,08H,41H,0FFH,0FEH;
DB08H,80H,09H,01H,10H,01H,11H,02H;
DB11H,0C2H,11H,34H,0FFH,08H,11H,14H;
DB11H,62H,11H,81H,10H,01H,00H,00H;"技",3
DB04H,01H,04H,01H,04H,02H,04H,04H;
DB04H,08H,04H,30H,04H,0C0H,0FFH,00H;
DB04H,0C0H,04H,30H,04H,08H,04H,04H;
DB04H,02H,04H,01H,04H,01H,00H,00H;"大",4
DB02H,20H,0CH,20H,88H,20H,69H,20H;
DB09H,20H,09H,22H,89H,21H,69H,7EH;
DB09H,60H,09H,0A0H,19H,20H,28H,20H;
DB0C8H,20H,0AH,20H,0CH,20H,00H,00H;"学",5
DB20H,00H,20H,7FH,20H,40H,20H,40H;
DB2FH,5EH,29H,52H,0A9H,52H,69H,52H;
DB29H,52H,29H,52H,2FH,5EH,20H,40H;
DB20H,41H,20H,7FH,20H,00H,00H,00H;"高",6
DB02H,04H,22H,48H,2AH,52H,0A6H,41H;
DB63H,0FEH,26H,40H,2AH,50H,22H,49H;
DB00H,06H,3FH,0F8H,22H,00H,22H,00H;
DB23H,0FFH,42H,00H,02H,00H,00H,00H;"新",7
TABLE2:
DB02H,20H,0CH,20H,88H,20H,69H,20H;
DB09H,20H,09H,22H,89H,21H,69H,7EH;
DB09H,60H,09H,0A0H,19H,20H,28H,20H;
DB0C8H,20H,0AH,20H,0CH,20H,00H,00H;"学",8
DB00H,00H,7FH,0FFH,44H,20H,5AH,10H;
DB61H,0E0H,08H,01H,30H,82H,24H,8CH;
DB24H,0F0H,0A4H,80H,64H,80H,24H,0FCH;
DB24H,82H,28H,82H,30H,8EH,00H,00H;"院",9
DB00H,00H,00H,00H,1FH,0F8H,11H,10H;
DB11H,10H,11H,10H,11H,10H,0FFH,0FEH;
DB11H,11H,11H,11H,11H,11H,11H,11H;
DB1FH,0F9H,00H,01H,00H,0FH,00H,00H;"电",10
DB02H,00H,02H,00H,12H,00H,12H,00H;
DB12H,0C0H,13H,48H,1EH,48H,0F2H,44H;
DB12H,44H,12H,4AH,12H,51H,12H,60H;
DB12H,00H,02H,00H,02H,00H,00H,00H;"专",11
DB00H,00H,08H,04H,08H,04H,1FH,0FCH;
DB00H,04H,00H,04H,00H,00H,00H,00H;"1",12
DB00H,00H,07H,0F0H,08H,08H,10H,04H;
DB10H,04H,08H,08H,07H,0F0H,00H,00H;"0",13
DB00H,00H,07H,0F0H,08H,08H,10H,04H;
DB10H,04H,08H,08H,07H,0F0H,00H,00H;"0",14
DB00H,00H,0EH,0CH,10H,14H,10H,24H;
DB10H,44H,11H,84H,0EH,0CH,00H,00H;"2",15
DB00H,00H,00H,00H,00H,00H,00H,00H;停顿一秒
DB00H,00H,00H,00H,00H,00H,00H,00H;
DB00H,00H,00H,00H,00H,00H,00H,00H;
DB00H,00H,00H,00H,00H,00H,00H,00H;
DB2BH
LJMPL1
RET
END
4.调试
4.1Keil软件调试
(1)打开单片机软件开发系统keil单击keil菜单中的“工程”选择子菜单下的“新建新工程”选项弹出建立新建工程对话框,键入新建文件名称,单击“保存”。
(2)在弹出的对话框中单击“是”,再选择“AT89C51“。
(3)新建文本,输入程序,保存为“.asm”格式,将其添加到新建的工程中,最后生成“文件名.hex”。
(4)使用keil软件对程序进行调试,如图3所示
4.2Protues软件调试
使用proteus软件建立仿真图,然后进行调试,加载keil软件生成的“文件名.hex”文件到AT80C51的单片机上,通过LED屏观察,如图4所示。
5.运行结果与分析
(1)由于取码时是先取TABLE取上半部分数据码再取TABLE取下半部分数据码,而在编程和程序调用时没设计好同步显示,因而出现了上下显示不同步的乱码,经多次修改和调试后,程序最终能完整显示。
(2)生成的字模中大于十六进制的ASCII码中常忘加零,例如数字”2”的码DB00H,00H,EH,CH,10H,14H,10H,24H;
DB10H,44H,11H,84H,EH,CH,00H,00H;其正确的字模码为:
DB00H,00H,0EH,0CH,10H,14H,10H,24H;
DB10H,44H,11H,84H,0EH,0CH,00H,00H;。
(3)显示一个汉字需要32个码而程序中的R0最大为255,即最多显示8个字,因此字符表要创建两个标号,当要显示的字大于8个时,则判断R0是否为255,若等于255则设置其跳转至第二个标号。
6.设计总结与心得体会
通过本次课程设计,我发现自己对以前所学过的知识理解得不够深刻,掌握得不够牢固。
以前在上课的时候,老师经常强调在写一个程序之前,一定要事先把程序原理方框图画出来,但是我开始总觉得这样做没必要,很浪费时间。
但是,这次课程设计完全改变了我以前的那种错误的认识,以前我接触的那些程序都是很短、很基础的,但是在这次课程设计中碰到的那些需要很多代码才能完成的任务,画程序方框图是很有必要的。
因为通过程序方框图,在做设计的过程中,我们每一步要做什么,每一步要完成什么任务都有一个很清楚的思路,而且在程序测试的过程中也有利于查错。
通过不断的调试使我加深了对80C51芯片的理解和应用,熟练的掌握了Keil和Protues软件。
在设计过程中难免会遇到许多问题,但在老师和同学们及资料书的帮助下,终于胜利地完成了本次的课程设计,此次课程设计巩固了自己的理论知识,锻炼了自己的动手能力,弥补了在课程上面的知识漏洞。
通过这两周的努力,使我认识到要想成功必须要耐心、恒心、细心、专心。
这次实训真正做到理论联系实际,提高动手能力和分析问题、解决问题的能力,实现由学习知识到应用知识的初步过渡。
通过本次课程设计熟练掌握微机系统与接口扩展电路的设计方法,熟练应用汇编语言编写应用程序和实际设计中的调试方法和步骤,熟悉了微机系统的硬软件开发工具的使用方法。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,才能提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到了各种各样的问题,在这些问题中也认识到了自己的种种不足,,在今后的学习中,决不能再一知半解我会更加专心,刻苦的学习,让自己的技术学的更精。
7.参考文献
[1]候玉宝、陈忠平、李成群.基于Proteus的51系列单片机设计与仿真电子工业出版社.2008年
[2]刘建清.轻松玩转51单片机北京航空航天大学出版社.2011年
[3]周航慈.单片机应用程序设计技术北京航空航天大学出版社.2010年
[4]刘建清.51单片机非常入门与视频演练电子工业出版社.2010年
[5]万隆.单片机原理与实例应用清华大学出版社.2011年