|
写了一个LPC213的12864液晶的程序,但显示乱码,请高手指点迷津!
程序在下面,我怀疑是写数据那里的问题。比如我写个"1"就会显示"w",高手们看看!
程序:
/********************************************************************
* 文件名 : 液晶12864显示
* 描述 : 该程序实现了LPC2131对液晶12864的控制。
* 创建人 : 刘欢,2010年7月23日
* 联系方式: QQ:282679703
* 版本号 : v1.2
* 说明 : P0.4~P0.11接液晶D1-D8,
* P0.12接RS,P0.13接RW,P0.14,直接显示内容版
***********************************************************************/
#include "config.h"
#define RS 1<<12 //设数据/命令选择为P0.12
#define RW 1<<13 //设数据/命令选择为P0.13
#define E 1<<14
#define RES 1<<15 //设数据/命令选择为P0.14
#define uchar unsigned char
#define uint unsigned int
#define FIRST_ADDR 0
/********************************************************************
* 名称 : delay()
* 功能 : 延时
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Delay()
{
int i,j;
for(i=255;i>0;i--)
for(j=12;j>0;j--);
}
/*------------------延时子程序-----------------------------*/
void Delay1(unsigned int t)
{ unsigned int i,j;
for(i=0;i<t;i++)
for(j=0;j<10;j++)
;
}
/********************************************************************
* 名称 : Enable(uchar del)
* 功能 : 命令函数
* 输入 : 输入的命令值
* 输出 : 无
***********************************************************************/
void Enable(uint32 del)
{
IO0CLR=RS;
IO0CLR=RW;
IO0SET=E;
IO0PIN=IO0PIN&0xfffff00f|del;
Delay();
IO0CLR=E;
Delay();
}
/********************************************************************
* 名称 : Init()
* 功能 : 初始化
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Init()
{
PINSEL0=0X00000000; //设端口位GPIO功能
IO0DIR=0xffffffff; //设端口位输出功能
IO0SET=0xffffffff; //初始化端口
Delay();
Enable(0x00000300);
Delay();
Enable(0x00000300);
Delay();
Enable(0x000000c0);
Delay();
Enable(0x00000010);
Delay();
Enable(0x00000060);
Delay();
}
/********************************************************************
* 名称 : Write(uchar del)
* 功能 : 写数据函数
* 输入 : 需要写入1602的数据
* 输出 : 无
***********************************************************************/
void Write(uint32 del)
{
Delay();
IO0SET=RS;
IO0CLR=RW;
IO0SET=E;
IO0PIN=del*16+(IO0PIN&0xfffff00f); //写数据
Delay();
IO0CLR=E;
Delay();
}
/*------------------显示字符串--------------------------*/
void hzkdis(char *s)
{ while(*s>0)
{ Write(*s);
s++;
Delay();
}
}
/*------------------单字符--------------------------*/
void dzf(char sign)
{
Enable(0x00000010);//清除显示,并且设定地址指针为00H
Delay();
Enable(0x00000800);
Write(sign);
//IO0PIN=IO0PIN&0xfffff00f|0x00000010;
}
/*------------------清整个GDRAM空间----------------------------*/
void clrgdram()
{ unsigned char x,y;
for(y=0;y<64;y++)
for(x=0;x<16;x++)
{ Enable(0x00000340);
Enable(y*16+0x00000800); //行地址
Enable(x*16+0x00000800); //列地址
Enable(0x00000300);
Write(0x0000000);
Write(0x0000000);
}
}
/*------------------清屏命令--------------------------*/
void clrscreen()
{
Enable(0x00000010);
Delay();
}
/********************************************************************
* 名称 : main()
* 功能 : 主函数
* 输入 : 无
* 输出 : 无
***********************************************************************/
int main(void)
{
//unsigned char i;
IO0CLR=RES;
Delay1(100);
IO0SET=RES;
Init();
IO0CLR=RW;
Init();
while(1)
{
clrscreen();
dzf('1'); //显示测试字样
Delay1(1000);
// while(1);
}
return(0);
} |
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|