单片机课程设计汉字液晶显示器显示.docx
- 文档编号:23089008
- 上传时间:2023-04-30
- 格式:DOCX
- 页数:21
- 大小:435.98KB
单片机课程设计汉字液晶显示器显示.docx
《单片机课程设计汉字液晶显示器显示.docx》由会员分享,可在线阅读,更多相关《单片机课程设计汉字液晶显示器显示.docx(21页珍藏版)》请在冰豆网上搜索。
单片机课程设计汉字液晶显示器显示
燕山大学
课程设计说明书
题目:
液晶显示控制实验
学院(系):
电气工程学院
年级专业:
09自动化仪表3班
学号:
0199
学生姓名:
苑海川
************************
教师职称:
教授
燕山大学课程设计(论文)任务书
院(系):
电气工程学院基层教学单位:
自动化仪表系
学号
0199
学生姓名
苑海川
专业(班级)
09仪表3班
设计题目
液晶显示控制实验
设
计
技
术
参
数
1.独立完成设计任务。
2.编程,上机调试。
3.连接硬件试验线路,实现所要求的功能。
4.完成设计,提交课程设计报告。
设
计
要
求
1.利用实验上的液晶显示屏电路,编写程序控制显示,输出汉字。
2.了解液晶显示屏的控制原理及方法。
3.了解点阵汉子的显示原理。
工
作
计
划
软件编程与硬件调试相结合,绘制设计流程图,并编程进行硬件实现。
参
考
资
料
1.《单片机原理及应用技术》张淑清,国防工业出版社(教材)
2.《过程控制系统及仪表》邵裕森编(教材)
3.《单片机及应用》李大友高等教育出版社(教材)
4.《机械量测量》机械工业出版社(教材)
周次
一周
应
完
成
任
务
绘制硬件电路,软件流程图。
熟悉伟福单片机编程环境,读程序,修改软件参数,修改硬件地址,硬件调试,撰写课程设计报告。
指导教师签字
张淑清
基层教学单位主任签字
谢平
说明:
此表一式四份,学生、指导教师、基层教学单位、系部各一份。
2012年06月29日
摘要
本文详细介绍了基于单片机和lab2000实验箱的液晶显示实验,并利用伟福仿真软件实现了程序的编译和连接,还利用proteus仿真软件对硬件电路进行了绘制和仿真。
本文系统的从总体设计思路、汉字取模的原理、液晶显示的原理、电路绘制和仿真和最好的上箱实验几个方面介绍了本次液晶显示实验。
基本掌握了电路仿真和绘制的仿真程序,了解了一些简单的硬件知识,对课本所学的理论知识有了更加深入的了解,对以后的学习也更有针对性。
关键字:
伟福仿真,lab2000,proteus仿真软件。
第一章绪论
1.1硬件环境分析
本设计是设计一个单片机控制的点阵液晶显示屏上显示“南京伟福”字样的设计‘近年来随着科学技术的飞速发展,单片机的应用正在不断的走向深入,同时带动着传统的控制检测日新月异更新。
本实验采用芯片,系统设计所需硬件都已集成于LAB6000实验箱上。
软件使用wave6000,并用80C51汇编语言进行编程;该系统可以完成汉字字模的显示。
当显示一次字模后LED指示灯闪亮一次提示显示完成。
汉字字模是各类电子装置显示汉字的依据,在工程应用中汉字字模都是从计算机的各种字库文件中获取,本文从应用的角度使用字模代码。
1.2实验箱简介
本次设计使用了LAB6000实验箱进行仿真,LAB6000系列逻辑分析仪是一款紧凑、快速调试数字电路设计强有力的便携式逻辑分析仪;高速的USB2.0接口、高端的FPGA、强大的ARM处理器等组成的嵌入式系统全方位智能控制;高速、高效、高性能,帮你轻松搞定问题。
LAB6000系列逻辑分析仪实现了业界领先的高带宽、大容量的高速采集技术,采样率从200M到500M不等,32通道每通道容量最高达16M;功能灵活强大,集逻辑分析仪、总线分析仪、协议分析仪、频率计、逻辑笔等多种测量开发仪器之大成于一身,适用于各种数字电路的开发、测量、分析和调试工作,还为方便某些特殊的用户提供定制插件服务,是电子研发、电子测量工程师、高校师生的科研开发和教学的得力助手。
第二章课程设计目的及课题分析
2.1课程设计目的
1.熟练掌握C51系统仿真开发系统的应用。
2.加强单片机的综合运用能力、提高单片机的软件编程和调试能力,为以后的学习
和开发工作打下良好基础。
3.掌握的液晶的工作原理以及应用设计。
4.掌握小系统开发设计的流程以及设计思路。
2.2课题分析
本实验仪采用的液晶显示屏内置控制器为SED1520,点阵为122x32,需要两片SED1520组成,由E1、E2分别选通,以控制显示屏左右两边的屏。
图形液晶显示模块有两种连接方式。
一种为直接访问方式,一种为间接控制方式。
本实验仪采用直接访问方式。
直接控制方式就是将液晶显示模块的接口作为存储器或I/O设备直接挂在计算机总线上。
计算机通过地址译码控制E1、E2选通;读/写操作信号R/W由地址线A1控制;数据/命令存储器选择信号A0由地址线A0控制。
实验电路图如下图所示。
地址映射如下(地址中的X由LCDCS决定,可参见地址译码部分说明)
0X00H
0X01H
0X02H
0X03H
0X04H
0X05H
0X06H
0X07H
写E1指令
写E1数据
读E1状态
读E1数据
写E2指令
写E2数据
读E2状态
读E2数据
间接控制方式是计算机通过自身的或系统的并行接口与液晶显示模块连接,如8031的P1口和P3口,8255的并行接口芯片。
计算机通过对该并行接口输出状态的编程操作,完成对液晶显示模块所需时序的操作和数据的传输。
这种间接控制方式的电路简单,控制时序通过编程来实现。
第三章实现原理
3.1点阵LCD的显示原理
在数字电路中,所有的数据都是以0和1保存的,对LCD控制器进行不同的数据操
作,可以得到不同的结果。
对于显示英文操作,由于英文字母种类很少,只需要8位(一
字节)即可。
而对于中文,常用却有6000以上,于是我们的DOS前辈想了一个办法,
0
0
1
1
1
0
0
0
0x38
0
1
0
0
0
1
0
0
0x44
0
1
0
0
0
1
0
0
0x44
0
1
0
0
0
1
0
0
0x44
0
1
0
0
0
1
0
0
0x44
0
1
0
0
0
1
0
0
0x44
0
0
1
1
1
0
0
0
0x38
0
0
0
0
0
0
0
0
0x00
就是将ASCII表的高128个很少用到的数值以两个为一组来表示汉字,即汉字的内码。
而剩下的低128位则留给英文字符使用,即英文的内码。
字模虽然也是一组数字,但它的意义却与数字的意义有了根本的变化,
它是用数字的各位信息来记载英文或汉字的形状,如数字的'0'在字模的记载方式如图1
所示:
图1“0”字模图
而中文的“你”在字模中的记载却如图2所示:
图2“你”字模
如果显示汉字的电子装置能够随时从PC机获得显示点阵(如通过串口通讯或通过局
域网通讯),则应使用Windows下的TrueType字库。
TrueType实际上就是一种高级的
曲线轮廓字库,如果直接研究其结构自己编写数显示是非常困难的,实际应用中都是使
用Windows提供的函数实现。
笔者下面介绍使用WindowsAPI函数获取字模的方法。
读
点取字模的思路是,在屏幕上显示汉字,然后逐点读取显示区域内每个点颜色,生成点
阵字模。
3.2取模
在编写软件代码之前必须要先掌握汉字取模的方法。
要得到上表中的文字,我们
可以借助取模软件来完成。
目前点阵LCD的取模软件有很多,我们以本开发板配套的取
模软件为例来介绍一下汉字的取模方法。
打开取模软件出现如下显示界面:
在文字输入区中输入文字,我们以输入一个欢迎的“欢”字为例,了解其取模过程。
在文字输入区中输入“欢”后按CTRL+ENTER组合键后就看到“欢”字已经在模拟显示区显示出来了
在“取模方式”中选择“C51格式”就可以在“点阵生成区”得到你要的汉字“欢”的显示代码。
经过以上步骤后一个汉字就取模成功了,在程序中只要调用这段代码就可显示出汉字“欢”
了,其它汉字也用同样的方法。
3.3功能扩展部分
源程序是静态显示四个汉字“南京伟福”通过每个字的扫描,变成动态显示,并且
显示“燕山大学”四个字。
第四章Proteus硬件仿真
4.1硬件模拟软件介绍
Proteus是英国Labcenterelectronics公司出版的EDA工具软件。
它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。
它是目前最好的仿真单片机及外围器件的工具。
虽然目前国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。
Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。
是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年又增加了Cortex和DSP系列处理器,并持续增加其他系列处理器模型。
在编译方面,它也支持IAR、Keil和MPLAB等多种编译器。
运行界面如下图:
通过此软件画出硬件电路的连线图如下:
4.2程序流程图
第五章主要的源程序及注释
实验程序如下:
#include
#definePD161//122/2分成左右两半屏(122x32)
sbitLED=P1^0;
unsignedcharColumn;
unsignedcharPage_;//页地址寄存器D1,DO:
页地址
unsignedcharCode_;//字符代码寄存器
unsignedcharCommand;//指令寄存器
unsignedcharLCDData;//数据寄存器
xdataunsignedcharCWADD1_at_0x8000;//写指令代码地址(E1)
xdataunsignedcharDWADD1_at_0x8001;//写显示数据地址(E1)
xdataunsignedcharCRADD1_at_0x8002;//读状态字地址(E1)
xdataunsignedcharDRADD1_at_0x8003;//读显示数据地址(E1)
xdataunsignedcharCWADD2_at_0x8004;//写指令代码地址(E2)
xdataunsignedcharDWADD2_at_0x8005;//写显示数进地址(E2)
xdataunsignedcharCRADD2_at_0x8006;//读状态字地址(E2)
xdataunsignedcharDRADD2_at_0x8007;//读显示数据地址(E2)
//英文字模库8x8点阵
codeunsignedcharEETAB[][8]={
{0x38,0x44,0x44,0x44,0x44,0x44,0x38,0x00},//0
{0x10,0x30,0x50,0x10,0x10,0x10,0x7c,0x00},//1
{0x38,0x44,0x04,0x08,0x10,0x20,0x7c,0x00},//2
{0x78,0x84,0x04,0x38,0x04,0x84,0x78,0x00}};//3
//中文字模库16x16点阵
codeunsignedcharCCTAB[][32]={
{0x44,0x42,0x44,0x62,0x44,0x39,0xF4,0x03,
0x04,0x08,0xDF,0x33,0x54,0x62,0x54,0x02,
0x54,0x0A,0xDF,0x33,0x04,0x60,0xE4,0x01,
0x44,0x0A,0x64,0x32,0x44,0x63,0x00,0x00},/*"燕",0*/
{0x00,0x00,0x00,0x20,0xE0,0x7F,0x00,0x20,
0x00,0x20,0x00,0x20,0x00,0x20,0xFF,0x3F,
0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x20,
0x00,0x20,0xE0,0x7F,0x00,0x00,0x00,0x00},/*"山",1*/
{0x20,0x00,0x20,0x80,0x20,0x40,0x20,0x20,
0x20,0x10,0x20,0x0C,0xA0,0x03,0x7F,0x00,
0xA0,0x01,0x20,0x06,0x20,0x08,0x20,0x30,
0x20,0x60,0x20,0xC0,0x20,0x40,0x00,0x00},/*"大",2*/
{0x40,0x00,0x30,0x02,0x10,0x02,0x12,0x02,
0x5C,0x02,0x54,0x02,0x50,0x42,0x51,0x82,
0x5E,0x7F,0xD4,0x02,0x50,0x02,0x18,0x02,
0x57,0x02,0x32,0x02,0x10,0x02,0x00,0x00},/*"学",3*/
};
//1.写指令代码子程序(E1)
voidWriteCommandE1()
{
while(CRADD1&0x80);
CWADD1=Command;
}
//2.写显示数据子程序(E1)
voidWriteDataE1()
{
while(CRADD1&0x80);
DWADD1=LCDData;
}
//3.读显示数据子程序(E1)
voidReadDataE1()
{
while(CRADD1&0x80);
LCDData=DRADD1;
}
//4.写指令代码子程序(E2)
voidWriteCommandE2()
{
while(CRADD2&0x80);
CWADD2=Command;
}
//5.写显示数据子程序(E2)
voidWriteDataE2()
{
while(CRADD2&0x80);
DWADD2=LCDData;
}
//6.读显示数据子程序(E2)
voidReadDataE2()
{
while(CRADD2&0x80);
LCDData=DRADD2;
}
//初始化程序
voidInit()
{
Command=0xe2;
WriteCommandE1();
WriteCommandE2();
Command=0xa4;
WriteCommandE1();
WriteCommandE2();
Command=0xa9;
WriteCommandE1();
WriteCommandE2();
Command=0xa0;
WriteCommandE1();
WriteCommandE2();
Command=0xc0;
WriteCommandE1();
WriteCommandE2();
Command=0xaf;
WriteCommandE1();
WriteCommandE2();
}
//清屏
voidClear()
{
unsignedchari,j;
i=0;
do{
Command=(i+0xb8);//页地址设置
WriteCommandE1();
WriteCommandE2();
Command=0x00;//列地址设置为"0"
WriteCommandE1();
WriteCommandE2();
j=0x50;//一页清80个字节
do{
LCDData=0x00;//显示数据为"0"
WriteDataE1();
WriteDataE2();
}while(--j!
=0);//页内字节清零循环
}while(++i!
=4);//页地址暂存器加一
//显示区清零循环
}
voidDELAY(intn)
{
inti,j;
for(i=0;i for(j=0;j<50;j++); } //延时程序 voidDelay() { unsignedchari,j; i=20; j=0; do{ do{ }while(--j! =0); }while(--i! =0); } //中文显示子程序 voidWriteCHN16x16() { unsignedchari,j,k; i=0; j=0; while(j<2){ Command=((Page_+j)&0x03)|0xb8;//设置页地址 WriteCommandE1(); WriteCommandE2(); k=Column;//列地址值 while(k if(k Command=k; WriteCommandE1();//设置列地址值 LCDData=CCTAB[Code_][i];//取汉字字模数据 WriteDataE1();//写字模数据 }else{//为右半屏显示区域(E2) Command=k-PD1; WriteCommandE2();//设置列地址值 LCDData=CCTAB[Code_][i];//取汉字字模数据 WriteDataE2();//写字模数据 }; i++; if(++k>=PD1*2)break;//列地址是否超出显示范围 }; j++; }; } //中文显示程序 voidmain() { unsignedcharflag=0x00,i; Init(); Clear(); Page_=0x02; Column=0x00; Code_=0x00; WriteCHN16x16(); Page_=0x02; Column=0x10; Code_=0x01; WriteCHN16x16(); Page_=0x02; Column=0x20; Code_=0x02; WriteCHN16x16(); Page_=0x02; Column=0x30; Code_=0x03; WriteCHN16x16(); while (1);} 第六章程序调试及结果分析 6.1调试过程 检查硬件线路的连接,将修改后的程序加载到开发工具中,调试程序编译程序,并 下载到单片机中运行,液晶屏中将显示“南京伟福”一行字依次显示,然后指示灯闪亮 一次指示显示完成。 6.2在程序设计和调试过程中,遇到和解决的几个问题: 1.在取模插入程序后,常出现乱码,而并非是我想要的字样。 最后通过设计点阵大 小,然后在取模工具中取模解决乱码的问题。 2.在显示时不能正确显示所要显示的内容,最后通过调整实验程序而达到预想效果。 6.3结论 整个程序实现了基本显示功能,但是还有一些方面做得不够好或者有待改进: 程序 结构不清晰,有部分过于繁琐,是对程序语言还不够了解所造成。 适当选择函数可以更 好的让程序达到理想的效果。 心得体会 通过一周的课程设计,让我感受最深的就是学习是一种乐趣。 在这次课程设计中,我们接触了一种新的实现,试验箱,他多样的功能激发了我们去学子它,进而掌握它的兴趣。 从拿到任务书,开始充分利用网络及图书馆等资源,查询资料,了解试验箱的功能。 在之前专业课理论知识的基础上,我们又从模糊到熟悉逐渐了解了什么是单片机编程。 然后面对我们的首要任务,我们的想法,我们的思路是什么? 顺着这个方向开始我们的工作,因此我觉得,目标和计划都是很重要的,我们要时刻保持大脑的清醒。 在整个过程中,我发现自己的理论知识的不足,同时所学的知识掌握不牢固,就是通过这次课程设计,不仅拓宽了我的知识面,还巩固和夯实了所学的理论知识,同时纠正了一些知识点上的错误认识和理解。 其次,有一些问题,当我们一个人面对的时候可能怎么都想不明白,可是当我们跟其他人一起探讨时,好多时候,问题都迎刃而解,可见团队合作的重要性,而且我们要养成谨慎,认真,踏实,有耐心,坚持的作风,尤其是要亲自动手去做,没有付出是不会有回报的。 回顾这一周的课设,我学会了单片机编程的一些功能的使用,但只是一小部分而已,我此后将继续研究这么一个强大的工具。 对于仿真软件的使用,非常有成就感,极大的激发了我们对新鲜事物学习的兴趣,从而以积极的心态去面对这次课程设计。 最后,我通过这次课程设计,使我对滤波器有了更深刻的认识。 总之,在这一周的时间,一直是有条不紊的进行着,到最后看到我们的努力得到收获的时候,我们满怀欣慰。 在这次课设中,我们看到了自己的进步,看到了老师和学长对工作的认真负责和对学生的耐心和热情,所以在以后的课程设计中,我将满怀激情,更加努力去面对。 参考文献 1.《单片机原理及应用技术》张淑清,国防工业出版社(教材) 2.《过程控制系统及仪表》邵裕森编(教材) 3.《单片机及应用》李大友高等教育出版社(教材) 4.《机械量测量》机械工业出版社(教材) 燕山大学课程设计评审意见表 指导教师评语: 成绩: 指导教师: 年月日 答辩小组评语: 成绩: 组长: 年月日 课程设计总成绩: 答辩小组成员签字: 年月日 仅供个人用于学习、研究;不得用于商业用途。 Forpersonaluseonlyinstudyandresearch;notforcommercialuse. NurfürdenpersönlichenfürStudien,Forschung,zukommerziellenZweckenverwendetwerden. Pourl'étudeetlarechercheuniquementàdesfinspersonnelles;pasàdesfinscommerciales. толькодлялюдей,которыеиспользуютсядляобучения,исследованийинедолжныиспользоватьсявкоммерческихцел
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 课程设计 汉字 液晶显示器 显示