基于ARM7的LCD设计与实现

1 引言
随着科技的发展,arm在社会各个方面的应用越来越广。arm芯片广泛应用于无线产品、pda、gps、网络、消费电子产品、stb及智能卡。s3c4510b是samsung公司生产的基于arm7tdmi的risc微处理器,主频可达50mhz。液晶显示是嵌入式系统中反映系统输入/输出的人机交互界面,液晶显示以其微功耗、体积小、显示内容丰富、模块化,接口电路简单等诸多优点得到广泛应用。由于s3c4510b主要是针对以太网应用系统设计的,所以其内部没有lcd控制模块,这样在一些需要人机可视话交互过程中会产生诸多不便。我们在看重高性价比的情况下,利用s3c4510b的通用i/o口来控制液晶显示屏的软硬件方法,实现了与lcd控制模块一样的功能。
2 s3c4510b介绍
s3c4510b是三星公司的一款基于以太网应用系统的高性价比16/32位(精简指令集)risc微控制器,内含一个由arm公司设计的arm7tdmi risc处理器核,arm7tdmi为低功耗、高性能的16/32核。支持大、小端模式,内部架构为大端模式,外部存储器可为大、小端模式;基于jtag的调试方案;边界扫描接口。支持rom/sram、flash、dram和外部i/o以8/16/32位的方式操作。最适合用于对价格及功耗敏感的应用场合。
除了arm7tdmi核以外,s3c4510b比较重要的片内外围功能模块包括:
u 2个带缓冲描述符(buffer descriptior)的hdlc通道;
u 2个uart通道;
u 2个gdma通道;
u 2个32位定时器;
u 18个可编程的i/o口。
s3c4510b提供了18个可编程的通用i/o端口,用户可将每个端口配置为输入模式、输出模式或特殊功能模式,由片内的特殊功能寄存器iopmod和iopcon控制。所传输的数据存放在寄存器iopdata中。
端口0~端口7的工作模式仅由iopmod寄存器控制。另外通过设置iopcon寄存器,端口8~端口11可用作外部中断请求intreq0~intreq3的输入。端口12、端口13可用作外部dma请求xdreq0、xdreq1的输入。端口14、端口15可作为外部dma请求的应答信号xdack0、xdack1,端口16可作为定时器0的溢出tout0,端口17可作为定时器1的溢出tout1。
i/o口模式寄存器iopmod中的低18位用于配置i/o口p17~p0的工作方式。0为输入、1为输出。
3 ocmj4x8c液晶模块
该款液晶采用***矽创电子公司生产的st7920中文图形控制芯片。液晶屏幕为128x64点。其可以显示字母、数字符号、中文字型及图形,具有绘图及文字画面混合显示功能。内置2m中文字型rom(cgrom)总共提供8192个中文字型(16x16点阵),16k半宽字型rom(hcgrom)总共提供126个符号字型(16x8点阵),64x16位字型产生ram(cgram),另外绘图显示画面提供个个64x256点的绘图区域(gdram),可以和文字画面混合显示。提供多功能指令:画面清除(display clear)、光标归位(return home)、显示打开/关闭(display on/off)、光标显示/隐藏(cursor on/off)、显示字符闪烁(display character blink)、光标移位(cursor shift)、显示移位(display shift)、垂直画面旋转(vertical line scroll)、反白显示(by_line_reverse display)、待命模式(standby mode)。
ocmj4x8c(128x64)引脚说明(表1)
管脚号管脚符号说明
1vss逻辑电源地
2vdd逻辑电源+5v
3nc无连接
4rs(cs)高:数据/低:指令(串行输入的片选)
5r/w(sid)高:读/低:写(串行数据)
6e(sclk)使能端(串行时钟)
7-14db0-db7并行数据端
15psb高:并行/低:串行
16nc无连接
17/rst系统复位 低电平有效
18nc无连接
19leda背光电源+5v
20ledk背光电源0v
硬件电路:
对于该款液晶模块,当psb端接高电平时,模块将进入并行模式,并行模式又分为8-位和4-位传输模式。当psb段接低电平时,模块将进入串行模式。该设计采用4线串行输入方式,所以将psb端接地。并将背光电源端leda接电源+5v,ledk接地。
然后,将s3c4510b的io口分别与液晶模块相接如下:io3—sclk、io5—cs、io7—sid、io9—/rst。这里要注意的是需要通过软件设置s3c4510b相应的特殊功能寄存器,将io3,io5,io7,io9设置为输出模式。硬件连接图如图1所示:
图1:硬件连接图
4 软件实现
软件开发环境为arm sdt v2.5。程序分为两部分:首先为arm初始化,使用汇编语言书写。然后才是用c语言书写的显示主程序。
下面分别将两部分结合原代码略加说明。
汇编语言部分:
iopmod equ 0x3ff5000 ;定义io口模式寄存器
iopdata equ 0x3ff5008 ;定义io口数据寄存器
import main
area init,code,readonly
entry
ldr r0, =0x3ff0000
ldr r1, =0xe7ffff80 ;配置syscfg,片内4kcache,4ksram
str r1, [r0]
ldr sp, =0x3fe1000 ;sp指向4ksram的尾地址,堆栈向下生成
ldr r0, =0x3ff5000
ldr r1, =0x000002a8 ;设置io3,io5,io7,io9为输出模式
str r1,[r0]
bl main
b 。
end
c语言部分:因篇幅有限,这里就不完整的给出源程序了,只列出几个子函数。
#include “typdef.h”
#define iopmod (*(volatile unsigned *)0x03ff5000)
#define iopdata (*(volatile unsigned *)0x03ff5008)
/*定义子函数如下*/
void clr_lcd_rst(void){ iopdata &=0xfdff;} 清零复位引脚
void set_lcd_rst(void){ iopdata |=0x0200;} 置位复位引脚
void clr_lcd_sclk(void){iopdata &=0xfff7;}  时钟端置低
void set_lcd_sclk(void){iopdata |=0x0008;} 时钟端置高
void clr_lcd_sid(void){iopdata &=0xff7f;}   串行输出数据0
void set_lcd_sid(void){iopdata |=0x0080;} 串行输出数据1
void clr_lcd_cs(void){iopdata &=0xffdf;}   清零使能端
void set_lcd_cs(void){iopdata |=0x0020;} 置位使能端
void print_led_p0(void){iopdata |=0x0001;} 使led0亮
void print_led_p1(void){iopdata |=0x0002;} 使led1亮
void off_led_p0(void){iopdata &=0xfffe;} 使led0灭
/*液晶初始化部分*/
void init_lcd(void)
{set_lcd_rst();
delay(4);
write_lcd(0,0x01); 清除显示
delay(4);
write_lcd(0,0x0c); 显示状态设置
delay(4);
write_lcd(0,0x30); 设置为8位控制接口
delay(4);
}
图2:串行写操作时序图
程序严格按照串行的写操作时序(如图2所示)。此外应该注意当模块在接受指令前,微处理器必须先确认模块内部处于非忙碌状态,即读取bf标志时bf需为0,方可接受新的指令;如果在送出一个指令前并不检查bf标志,那么在前一个指令和这个指令中间必须延迟一段较长的时间,即是等待前一个指令确实执行完成,指令执行的时间请参考指令表中的个别指令说明。
5结束语:
本文介绍的方法可以实现汉字字符,英文字母,图形显示。除了上述的静态显示方式外,还可以通过编程来实现字符的动态显示及一些特效(如字符的移动,渐变,闪烁)显示。达到了与内置lcd控制器相同的功能。

2020工业互联与智能制造创新大赛成功举办!
2023年全球5G手机的出货量将达到近8亿部中国占出货总量的34%
5G时代缩小标准化差距对于产业的发展起着积极的促进作用
MEH控制系统的原理及功能介绍
了解TYPE-C接口背后的秘密
基于ARM7的LCD设计与实现
非视距技术助力汽车和智能手机摄像头“看清”四周角落
小米6最新消息:虽然有充电重启问题,小米6今日十点抢购依旧秒罄!
如何制作一个跟着音乐节奏灯做出反应的LED灯条
润和软件荣获2022年度中国软件技术领军企业奖
两篇大厂CTR预估最新工作
丰田mirai氢燃料汽车进入共享出行领域
智加科技携手黑莓在自动驾驶重卡上应用QNX安全操作系统
智能充电桩使用说明
OPPORenoZ好不好用
教您八招,如何成为优秀的射频工程师?
HanLP的使用方法
中国工业机器人自主品牌差距缩小,多关节机器人仍是主流
激光焊接技术在焊接奥氏体不锈钢的优点
Gradle Plugin和AGP的区别2