基于32位微处理器的液晶显示系统的设计和实现
时间:07-28
来源:互联网
点击:
汉字显示程序的设计
在对系统进行完正确的初始化后将ROM中的字模数据送到SED1353显示存储器,就可以使液晶显示屏显示出汉字。显示汉字需要指定其坐标位置,坐标对应该汉字模入口地址。在显示汉字界面前,首先清屏。由于本文中显示存储器结构为16位,所以X方向以字为单位(偶数地址对齐)。故规定显示区左上角坐标为(0,0) ,右下角坐标为(39,479)。每个汉字都有唯一的代码,所以在调用字模数据前需要对汉字的代码进行解码,对坐标进行解析。
字模入口地址=Y坐标×80+X 坐标×2;字模首地址=汉字代码×32+字库首地址。
以在坐标(30,148)处显示代码为24的16×16 汉字为例,程序如下:
(1) 清屏子程序
MOVE.L# $220000,A4 ;赋当前显示首址
BRA CLRLCD ;调用清屏子程序
CLRLCD CLR.LD3
CLR.LD4
MOVE.W#480,D3;需要清480 行
LOOP1 MOVE.W#40,D4 ;每行40 个字
LOOP2MOVE.W#$0000,(A4)+ ;清零
SUB.W#1,D4
BNE LOOP2
SUB.W#1,D3
BNE LOOP1
RTS
(2) 汉字显示子程序
MOVE.L#0,A1 ;清A1,A2
MOVE.L#0,A2
CLR.LD1 ;清D1~D4
CLR.LD2
CLR.LD3
CLR.LD4
MOVE.B #30,D2;赋坐标值
MOVE.W #148,D3
BSR ALXY;调坐标解析子程序
MOVE.LD3,A1 ;坐标的绝对地址送出
MOVE.W#24,D4 ;赋代码值
BSR DECODE ;调解码子程序
MOVE.LD4,A2;字模首址送出
LOOP MOVE.W(A2) +,(A1)
ADD.L#$50,A1 ;字模数据写入换行
SUB.B #1,D1
BNE LOOP
END
DECODE MULU #32,D4
ADD.W#TAB16,D4
MOVE.B #16,D1 ;循环16 次
RTS
....
ALXYMULU #$50,D3
MULU #$2,D2
ADD.WD2,D3
ADD.L#$220000,D3
RTS
TAB16 …
*****设“马”汉字代码为24 ******
DC.W$0020,$3FF0,$0020,$0820;马
DC.W$0820,$0820,$0820,$0824
DC.W$0FFE,$0004,$0024,$FFF4
DC.W$0004,$0004,$0028,$0010
...
结束语
32位嵌入式处理器的软件开发以C语言为主,通常情况下用汇编语言编写与硬件有关的程序,高级语言C编写主程序实现某些复杂算法,若再配上实时多任务任务操作系统更是如虎添翼。本文所述方法可移植性强,稍作修改可应用于摩托罗拉MC68K系列嵌入式系统;选用的SED1353具有直接管理128K大容量显示缓冲区的能力,编程简单、显示速度快和执行效率高;可支持多种单色/彩色液晶显示屏,可以实现数据显示、绘制图表以及翻转等功能,具有良好的显示界面,提高了系统的可操作性,值得在智能化仪器仪表中推广。
在对系统进行完正确的初始化后将ROM中的字模数据送到SED1353显示存储器,就可以使液晶显示屏显示出汉字。显示汉字需要指定其坐标位置,坐标对应该汉字模入口地址。在显示汉字界面前,首先清屏。由于本文中显示存储器结构为16位,所以X方向以字为单位(偶数地址对齐)。故规定显示区左上角坐标为(0,0) ,右下角坐标为(39,479)。每个汉字都有唯一的代码,所以在调用字模数据前需要对汉字的代码进行解码,对坐标进行解析。
字模入口地址=Y坐标×80+X 坐标×2;字模首地址=汉字代码×32+字库首地址。
以在坐标(30,148)处显示代码为24的16×16 汉字为例,程序如下:
(1) 清屏子程序
MOVE.L# $220000,A4 ;赋当前显示首址
BRA CLRLCD ;调用清屏子程序
CLRLCD CLR.LD3
CLR.LD4
MOVE.W#480,D3;需要清480 行
LOOP1 MOVE.W#40,D4 ;每行40 个字
LOOP2MOVE.W#$0000,(A4)+ ;清零
SUB.W#1,D4
BNE LOOP2
SUB.W#1,D3
BNE LOOP1
RTS
(2) 汉字显示子程序
MOVE.L#0,A1 ;清A1,A2
MOVE.L#0,A2
CLR.LD1 ;清D1~D4
CLR.LD2
CLR.LD3
CLR.LD4
MOVE.B #30,D2;赋坐标值
MOVE.W #148,D3
BSR ALXY;调坐标解析子程序
MOVE.LD3,A1 ;坐标的绝对地址送出
MOVE.W#24,D4 ;赋代码值
BSR DECODE ;调解码子程序
MOVE.LD4,A2;字模首址送出
LOOP MOVE.W(A2) +,(A1)
ADD.L#$50,A1 ;字模数据写入换行
SUB.B #1,D1
BNE LOOP
END
DECODE MULU #32,D4
ADD.W#TAB16,D4
MOVE.B #16,D1 ;循环16 次
RTS
....
ALXYMULU #$50,D3
MULU #$2,D2
ADD.WD2,D3
ADD.L#$220000,D3
RTS
TAB16 …
*****设“马”汉字代码为24 ******
DC.W$0020,$3FF0,$0020,$0820;马
DC.W$0820,$0820,$0820,$0824
DC.W$0FFE,$0004,$0024,$FFF4
DC.W$0004,$0004,$0028,$0010
...
结束语
32位嵌入式处理器的软件开发以C语言为主,通常情况下用汇编语言编写与硬件有关的程序,高级语言C编写主程序实现某些复杂算法,若再配上实时多任务任务操作系统更是如虎添翼。本文所述方法可移植性强,稍作修改可应用于摩托罗拉MC68K系列嵌入式系统;选用的SED1353具有直接管理128K大容量显示缓冲区的能力,编程简单、显示速度快和执行效率高;可支持多种单色/彩色液晶显示屏,可以实现数据显示、绘制图表以及翻转等功能,具有良好的显示界面,提高了系统的可操作性,值得在智能化仪器仪表中推广。
嵌入式 ARM 汽车电子 SoC 显示器 总线 EMC 电路 电阻 LCD C语言 相关文章:
- 嵌入式系统的定义与发展历史(11-15)
- 嵌入式系统亲密接触(11-22)
- 嵌入式系统设计中的USB OTG方案(02-01)
- 嵌入式线控驾驶系统开发过程中设计和测试考虑(02-02)
- 一个典型的嵌入式系统设计和实现 (02-02)
- DDR SDRAM在嵌入式系统中的应用(02-07)