用ARM LPC2131控制液晶(金鹏OCMJ4*8C),请指教
点击浏览该文件
点击浏览该文件
程序如下,敬请指教
#include "config.h"
const uint32 rst=1; //resrt
const uint32 rs=1 < <1 ; //H=data; L=command;
const uint32 rw=1 < <4 ; //H=read; L=write;
const uint32 e=1 < <5 ; //input enable;
const uint32 busy=1 < <25 ; // test busy
const uint32 DB8=(0xFF < <18); // P1[25:18]控制D0-D7,
#define uint unsigned int
#define uchar unsigned char
#define comm 0
#define dat 1
void wr_lcd(uchar dat_comm,uchar content);
void chk_busy (void);
uchar tab1[]={
"本系列中文模块内"
"任意位置反白显示"
"置二级字库,可在"
"使用更方便更灵活"
};
/*------------------初始化-----------------*/
void init_lcd(void)
{
IO0SET=rst;
wr_lcd(comm,0x30); /*30---基本指令动作*/
wr_lcd(comm,0x01); /*清屏,地址指针指向00H*/
wr_lcd(comm,0x06); /*光标的移动方向*/
wr_lcd(comm,0x0c); /*开显示,关游标*/
}
/*---------------显示汉字或字符----------------*/
void chn_disp(uchar *chn)
{
uchar i,j;
wr_lcd (comm,0x30); //30,基本指令集
wr_lcd (comm,0x80); //80,从第一行第一列开始显示
for (j=0;j <4;j++)
{
for(i=0;i <16;i++)
wr_lcd(dat,chn[j*16+i]);
}
}
/*--------------写数据和指令-----------------*/
void wr_lcd(uchar dat_comm,uchar content)
{
uint i;
chk_busy ();
if(dat_comm)
{
IO0SET=rs; //data
IO0CLR=rw; //write
}
else
{
IO0CLR=rs; //command
IO0CLR=rw; //write
}
IO1PIN=content < <18; //write data or comm
IO0SET=e; //模拟使能E下降沿
for (i=0; i <0xFFFF; i++);
IO0CLR=e;
}
/*--------------检验忙信号-----------------*/
void chk_busy(void)
{
uint i;
IO0CLR=rs; //读取忙信号
IO0SET=rw;
IO0SET=e;
for (i=0; i <0xFFFF; i++);
while((IO1PIN&busy)==1);
IO0CLR=e;
for (i=0; i <0xFFFF; i++);
}
/*------------------主程序--------------------*/
int main(void)
{
uint i;
PINSEL0 = 0x00000000;
PINSEL2 = PINSEL2 & (~0x08); // P1[25:18]连接GPIO
IO0DIR = 0xff; // 设置0口为输出
IO1DIR = DB8; // 设置DB控制口为输出
init_lcd();
chn_disp(tab1);
for (i=0; i <0xFFFFFF; i++);
return 0;
}
发表时间:2006年1月17日12:33:45