12864(精选三篇)
12864 篇1
本实验所用芯片为ALTERA公司开发的EP1C6Q240C8芯片,cyclone系列,具有240个引脚,工作时最多可同时处理10路控制信号,工作电压为1.4V~3.6V。
液晶屏为12864,显示类型STN,点阵格式128 x 64,点尺寸0.48 x 0.48mm。
软件编程环境:Altera的Quartus II。
2 焊接板子,原理图如下
左侧为EP1C6Q240C8芯片:共有240个引脚,相当于把4块芯片联系在一起,备选的引脚比较多。右侧为液晶屏引脚,本液晶屏内置汉字库(通过查汉字编码库,得到代码)。
3 静态显示的设计
3.1 给data_buffer赋内容
constant data_buf2与constant data_buf3所赋值均为x"20",由图片可知,后两行并未输出内容。x"20"代表空格,即此处不输入内容。也可根据需要,通过查汉字编码表输入内容。
3.2 分频部分
3.3 把汉字加到液晶地址
同理将"FPGA"送到第一行(地址为80),第三行和第四行也可根据需要加入相关汉字。
3.4 引脚的配置
4 动态程序的显示部分
因为是动态显示所以拍摄的不够清晰。
大部分程序与静态类似,下面只列出不相同的部分[竖行显示]。
4.1 分频
process(clk)//此处是分频,结果是5 000Hz,此部非常重要,我们后面显示用到clk_5000,动态显示效果,就是靠这个频率。
variable cnttemp:integer range 0 to 9999;
具体可参照静态显示的分频,只需将原来的clk_100k改为clk_5000即可,每幅间隔是
1/5000=200us。假如频率设的过高,则汉字一扫而过,无法观看到清晰图像。
4.2 显示
动态显示与静态显示不同之处为:
静态显示只需进行一次初始化,分别在四行上显示出字符或汉字。
动态显示的原理是:第一次将汉字送到第一行,之后擦去内容,第二次送到第二行,擦去内容,依次进行直到第四行,之后再跳到第一行。给人眼的感觉是汉字在不停的移动。所以每屏显示之前都要进行初始化(相当于擦去上一幅的内容),故在每行显示之前都要加上类似s0,s1的初始化信息。
例如s0->s1->s2(第一行确定地址80)->s3(送入显示内容)>s4(代码s0一样)->s5(代码与s1一样)->s6(第二行确定地址90)->s7(送入显示内容)->s8(代码s0一样)->s9->(代码与s1一样)s10(第三行确定地址88)->s11(送入显示内容)->s12(代码s0一样)->s13(代码与s1一样)->s14(第四行确定地址98)->s15(送入显示内容)->s0最后再跳到s0,循环显示。
参考文献
[1]罗朝霞,高书莉.CPLD/FPGA设计及应用[M].人民邮电出版社,2007.
12864 篇2
关键词:C51;M12864-7A7;KS0108
中图分类号:TN873+.93文献标识码:A文章编号:1007-9599 (2010)03-0096-02
LCD display with C51 to realize the display driver M12864-7A7
Wang Zhanhai
(Shenyang University,ShenYang110044,China)
Abstract: The paper introduces the C51 programming, which drives LCD display screen M12864-7A7, and points out part of circuit theory diagram and inserted programming code.
Keywords: C51;M12864-7A7;KS0108
随着科技不断发展,工业设备中使用的小型LCD显示屏的外观和显示效果也得到了很大的提高,本文介绍一款非常实用的LCD显示屏M12863-7A7的使用方法,这里采用目前较为流行的C51语言进行编程,该程序可读性好,便于个性化修改,可移植性强,具有一定实用价值。
一、M12864-7A7LCD液晶显示屏介绍
显示角度:6点钟直视;
STN正视反射模式;
显示颜色:黄绿底兰字;
点阵:128点X64点;
点尺寸:0.36(W)X0.36(H)(mm);
点距:0.40(W)X0.40(H)(mm);
二、KS0108控制器介绍
KS0108 液晶显示控制驱动器是一种带有驱动输出的图形液晶显示控制器,它可以直接与8位微处理器相连。
KS0108与微处理器接口信号
三、C51 应用程序
显示控制程序:
//初始化=============================================
void lcd_init(void)
//设置显示起始行为第一行
writecl(0xc0);writecr(0xc0);
//开显示设置
writecl(0x3f);writecr(0x3f);
}
//清屏==============================================
void lcd_clear(void)
{
uchar linpage,linbyte;
uchar linpage1;
for(linpage=1;linpage<=8;linpage++)
{
linpage1=linpage|0x0b8;
writecl(linpage1);writecr(linpage1);
writecl(0x40);writecr(0x40);
for(linbyte=1;linbyte<=64;linbyte++)
{
writedl(0x00); writedr(0x00);
}
}
}
//=====================================================
void writecl(uchar commm)//写指令代码左
{
uchar readlin5;
csa=1;csb=0;rs=0;rw=1;
wait6:lcdaddr=0xff;e08=1;readlin5=lcdaddr;e08=0;readlin5=readlin5&0x80;
if(readlin5==0x80)
{goto wait6;}
rw=0;
lcdaddr=commm;e08=1;e08=0;
}
//=====================================================
void writedl(uchar datatoo)//写显示数据左
{
uchar readlin4;
csa=1;csb=0;rs=0;rw=1;
wait5:lcdaddr=0xff;e08=1;readlin4=lcdaddr;e08=0;readlin4=readlin4&0x80;
if(readlin4==0x80)
{goto wait5;}
rs=1;rw=0;lcdaddr=datatoo;e08=1;e08=0;
}
//=====================================================
void writecr(uchar commm)//写指令代码右
{
uchar readlin2;
csa=0;csb=1;rs=0;rw=1;
wait3:lcdaddr=0xff;e08=1;readlin2=lcdaddr;e08=0;readlin2=readlin2&0x80;
if(readlin2==0x80)
{goto wait3;}
rw=0;lcdaddr=commm;e08=1;e08=0;
}
//=====================================================
void writedr(uchar datatoo)//写显示数据右
{
uchar readlin1;
csa=0;csb=1;rs=0;rw=1;
wait2:lcdaddr=0xff;e08=1;readlin1=lcdaddr;e08=0;readlin1=readlin1&0x80;
if(readlin1==0x80)
{goto wait2;}
rs=1;rw=0;lcdaddr=datatoo;e08=1;e08=0;
}
//=====================================================
/*西文写入
参数:uchar pagen:页号(0x00--0x07)
uchar colun:起始列(0x00--0x7f) 0---127(0--191 only 19264)
uchar ncode:数字代码(0x00--0x09对应BCD数字0--9)
uchar fonte:字体代码0x00--6x8点阵,0x80--8x8点阵
*/
void writexw(uchar pagen,uchar colun,uchar ncode,uchar fonte)
{略}
//=====================================================
/* 中文写入
uchar hzpage //页地址
uchar wcol //起始列
uchar *hzaddr//取点阵开始地址,代码数组起始地址。
uchar starhzad //从第starhzad个汉字开始显示.
uchar hzcount //连续显示的字数
*/
void writezw(uchar hzpage,uchar wcol,uchar *hzaddr,uchar starhzad,uchar hzcount)
{略}
四、结束语
由于不同的应用选用的微控制器也不相同,所以这里给出的程序要根据不同的具体应用加以修改,本人应用的Syncmos SM系列单片机SM59264硬件连接采用间接访问方式,已经调试通过。
参考文献:
[1]李华,MCS-51系列单片机实用接口技术[M].北京:航空航天大学出版社,1999.8
[2]王建校,杨建国,宁改娣,危建国.51系列单片机及C51程序设计[M].北京:科学出版社,2002
[3]马忠梅,马岩,张凯,籍顺心.单片机的C语言应用程序设计[M].北京:航空航天大学出版社,1997.3
[4]杨振江,杜铁军,李群.流行单片机实用子程序及应用实例[M].西安:西安电子科技大学出版社,2002.7
作者简介:
12864 篇3
在许多单片机应用系统中,液晶显示器LCD被广泛地应用于终端显示人机接口中[1,2,3,4]。点阵式LCD不仅可以显示字符、数字,还可以显示图形、曲线及汉字,并能够实现多种动画显示效果,使人机界面更加友好,使用操作更加灵活方便。MGLS12864是市场上比较常见的内藏HD61202控制器的图形液晶显示模块,具有功耗低、体积小、重量轻、结构简单,使用方便的优点。SPCE061A是继SPCE500A等之后凌阳科技推出的一款16位结构的微处理器[5,6]。CPU内核采用16位μ′nSP微处理器芯片,比MCS-51系列单片机集成度高、性价比高、使用更加灵活方便。
本文阐述了点阵式液晶MGLS12864的结构特点及其控制器HD61202的指令系统,并具体设计调试了MGLS12864与单片机SPCE061A的硬件接口电路和软件程序。经过实际运行,该液晶显示模块工作可靠,满足了设计要求。
1 MGLS12864的工作原理
MGLS12864显示模块内置2片HD61202作为列驱动器和一片HD61203作为行驱动器,可显示64 KB的点阵图形。点阵数为64行×128列,每屏可以显示4行×8个汉字(每汉字16×16点阵)。具有64 KB的内部存储器,显示屏共分8页。
1.1 引脚特性
MGLS12864引脚特性[7,8,9]如表1所示。
由表1的引脚特性可知,MGLS12864模块有18个引脚,1,2引脚为两个片选信号,组合功能定义是:CS1,CS2为00时禁止使用,01时选左区,10时选右区,11时未选;3引脚为电源地Vss;4引脚为电源电压Vdd;5引脚为液晶显示驱动电源V0;6引脚为数据指令选择端RS;7引脚为读/写选择信号R/W;8引脚为使能信号E;9~16引脚为数据总线DB0~DB7,可方便同单片机连接;17,18引脚为背光灯提供电源。
1.2 HD61202的指令系统
MGLS12864控制器HD61202内置4 096位(64×64)显示RAM,RAM中每位数据对应LCD屏上一个点的亮、暗状态,HD61202通过一系列操作指令实现对显示屏的控制。HD61202指令系统见表2。
(1) 显示开关设置:
D=1时LCD显示RAM中的内容,D=0时关闭显示;
(2) 显示起始行设置:
L0~L5在0~3FH(0~63行)范围内取值;
(3) 页面地址设置:
P0~P2:设置页号(0~7),显示RAM共64行分8页,每页8行;
(4) 列地址设置:
C0~C5:设置显示列地址0~3FH(0~63行);
(5) 控制器状态:
BUSY=1时内部在工作,BUSY=0时正常状态;ON/OFF=1时显示关闭,ON/OFF=0时显示打开;REST=1时复位状态,REST=0时正常状态。在BUSY和REST状态时,除读状态指令外,其他指令均不对HD61202产生作用。在对HD61202操作之前要查询BUSY状态,以确定是否可以对HD61202进行操作;
(6) 读/写数据指令每执行完一次读/写操作,列地址就会自动加1。
进行读操作前,必须有一次空读操作,紧接着再读数据才会读出所要读的单元中的数据。
2 MGLS12864与SPCE061A的硬件接口电路设计
SPCE061A内置2 KB的SRAM,32 KB的FLASH,32 b可编程输入输出端口,7路10 b的ADC和1路为声音模-数转换器,2路10 b的DAC,2个16 b可编程定时/计数器,可编程音频处理等。SPCE061A工作电压为2.6~3.6 V(CPU),2.6~5.5 V(I/O),CPU时钟为0.32~49.152 MHz[10]。
MGLS12864与SPCE061A单片机的硬件接囗电路如图1所示,SPCE061A的IOA0~IOA7与MGLS12864的DB0~DB7口相连作为数据输入输出用,IOB0~IOB4与MGLS12864的CS1,CS2,E,RS,R/W相连作为单片机对液晶模块的控制端。
3 显示程序设计
本系统程序包括主程序和子程序模块,其中,子程序包括初始化、清全屏子程序、汉字显示子程序、清单个字子程序。主程序通过调用子程序来完成液晶模块的控制。液晶显示程序流程图如图2所示,首先判断显示控制器HD61202是否处于“忙”状态,若不忙先送关显示指令关闭所有显示,接着仍判断“忙”状态,若不忙送开显示指令,为显示做准备,然后调用清全屏子程序、汉字显示子程序,最后根据内容需要调用清单个字子程序。
4 结 语
本文介绍了内置HD61202的液晶显示器MGLS12864在凌阳SPCE061A上的应用,在硬件方面,利用SPCE061A上丰富的I/O资源驱动液晶模块,简化了接口电路设计。在软件方面,使用凌阳μ′nSP IDE开发环境采用C语言编译调试液晶程序,方便可靠。从调试效果来看,采用MGLS-12864提高了系统的可视化程度,达到了设计要求。SPCE061A不仅具有一般控制器的功能,加上其独具特色的语音处理功能,可以开发出许多智能化产品。
参考文献
[1]赵志衡,马金海,李文清,等.89C51与液晶模块MSC-G12864的接口设计[J].微处理机,2006,27(6):12-14.
[2]梁燕,胡浩.OLED显示模块与C8051F单片机的接口设计[J].新器件新技术,2006(1):48-50.
[3]高云红,张杰飞.SED-1330点阵式液晶显示控制器及汉字显示技术[J].昆明理工大学学报,2001,26(2):52-55.
[4]张弘.基于CAN总线的信号采集与处理模块研究[D].南京:南京航空航天大学,2007.
[5]南光群.基于SPCE061A的SPLC501液晶显示模块的应用设计[J].微计算机信息,2007,23(26):304-306.
[6]张平均,陈志华.SPCE061A单片机与液晶显示模块HS12864-1的接口及其编程[J].微计算机信息,2005,21(5):117-118.
[7]远飞.基于单片机和MGLS12864显示模块的液晶显示系统设计[J].电子元器件应用,2009,11(1):22-24.
[8]苟欣璞,吴言荪,梁帅奇.80C196单片机与MGLS12864液晶显示模块的接口[J].仪表技术,2002(6):20-22.
[9]王林兵,童子权.LCD MGLS12864在高速数据采集系统中的应用[J].电子工程师,2002,28(2):42-43.