基于ARM7的LCD设计与实现
t,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控制器相同的功能。
- 基于ARM+FPGA的大屏幕显示器控制系统设计(06-30)
- 基于ARM和μC/OS-II的车载定位终端的设计(06-24)
- 解读物联网时代下的ARM mbed 操作系统(05-03)
- 用ARM和FPGA搭建神经网络处理器通信方案(07-19)
- ARM新一代Cortex-A73架构解析 千元机也能有高端SoC(05-06)
- 阿里巴巴将大量采用ARM处理器 Intel怎么办?(11-14)