本文包含原理图、PCB、源代码、封装库、中英文PDF等资源
您需要 登录 才可以下载或查看,没有账号?注册会员
×
本人最近在用320240 控制器为RA8835 的液晶模块,但发现显示的文字不全且显示的光标定位不对,看了好几天也看不出问题,求各路大侠,帮小弟看看问题所在,万分感激,一下是我的程序,省去了头文件,用STC89C5116RD+为芯片,两片74HC573锁存器,再次感激...
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
#define SystemSet 0x40 //控制器定义
#define Scroll 0x44 //显示域设置
#define SleepIn 0x53 //休闲模式设置
#define DispOn 0x59 //显示状态开
#define DispOff 0x58
#define Ovlay 0x5B //显示合成设置
#define HdotScr 0x5A //点位移设置
#define CsrForm 0x5D //光标形状设置
#define CgramAdr 0x5C //CGRAM首地址设置
#define CsrDirR 0x4C //光标移动右
#define CsrDirL 0x4D //左
#define CsrDirU 0x4E //上
#define CsrDirD 0x4F //下
#define CsrW 0x46 //设置光标地址
#define CsrR 0x47 //读出光标地址
#define mWrite 0x42 //显示数据写入
#define mRead 0x43
sbit LCDD_LATCH=P3^5; //74HC573锁存器使能输入液晶数据
sbit LCDC_LATCH=P1^4; //74HC573锁存器使能输入液晶命令
uchar bdata TS320240IO;
sbit TS320240_CS =TS320240IO^6;
sbit TS320240_WR =TS320240IO^2;
sbit TS320240_RD =TS320240IO^5;
sbit TS320240_A0 =TS320240IO^4;
sbit TS320240_RESET =TS320240IO^3;
code uchar table[][32]={
{0x10,0x10,0x10,0x10,0xFE,0x30,0x58,0x98,0x94,0x14,0x12,0x10,0x10,0x10,0x10,0x10,0x00,0x7E,0x42,0x42,0x42,0x7E,0x42,0x42,0x42,0x7E,0x42,0x42,0x42,0x42,0x7E,0x42},
{0x09,0x0C,0x10,0x17,0x20,0x34,0x52,0x52,0x91,0x11,0x11,0x10,0x10,0x1F,0x10,0x00,0x00,0xC0,0x40,0xFC,0x00,0x10,0x18,0x10,0x10,0x20,0x20,0x20,0x40,0xFE,0x00,0x00},
{0x00,0x00,0x7C,0x44,0x47,0x44,0x7C,0x45,0x44,0x44,0x7C,0x00,0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x10,0xFE,0x10,0x10,0x10,0x90,0x90,0x10,0x10,0x10,0x10,0x50,0x20},
{0x08,0x08,0x08,0x08,0x09,0x0E,0x08,0xFF,0x0A,0x09,0x08,0x08,0x09,0x0A,0x0C,0x08,0x00,0x10,0x20,0x40,0x80,0x00,0x00,0xFE,0x00,0x00,0x80,0x40,0x30,0x1C,0x08,0x00}
};
void delay(int i)
{
uint x,y;
for(x=0;x<i;x++)
for(y=0;y<110,y++)
}
void delay2(int i)
{
while(--i);
}
void Lcd_dataw(uchar Lcd_data)
{
TS320240_RESET=1; TS320240_A0=0; TS320240_CS=0; TS320240_RD=1; TS320240_WR=0; P0=TS320240IO;
LCDC_LATCH=1; LCDC_LATCH=0;
P0=Lcd_data; LCDD_LATCH=1; LCDD_LATCH=0;
TS320240_RESET=1; TS320240_A0=0; TS320240_CS=0; TS320240_RD=1; TS320240_WR=1; P0=TS320240IO;
LCDC_LATCH=1; LCDC_LATCH=0;
TS320240_RESET=1; TS320240_A0=0; TS320240_CS=1; TS320240_RD=1; TS320240_WR=0; P0=TS320240IO;
LCDC_LATCH=1; LCDC_LATCH=0;
TS320240_RESET=1; TS320240_A0=0; TS320240_CS=0; TS320240_RD=1; TS320240_WR=0; P0=TS320240IO;
LCDC_LATCH=1; LCDC_LATCH=0;
}
void Lcd_comw(uchar Lcd_com)
{
TS320240_RESET=1; TS320240_A0=1; TS320240_CS=0; TS320240_RD=1; TS320240_WR=0; P0=TS320240IO;
LCDC_LATCH=1; LCDC_LATCH=0;
P0=Lcd_com; LCDD_LATCH=1; LCDD_LATCH=0;
TS320240_RESET=1; TS320240_A0=1; TS320240_CS=0; TS320240_RD=1; TS320240_WR=1; P0=TS320240IO;
LCDC_LATCH=1; LCDC_LATCH=0;
TS320240_RESET=1; TS320240_A0=1; TS320240_CS=1; TS320240_RD=1; TS320240_WR=0; P0=TS320240IO;
LCDC_LATCH=1; LCDC_LATCH=0;
TS320240_RESET=1; TS320240_A0=1; TS320240_CS=0; TS320240_RD=1; TS320240_WR=0; P0=TS320240IO;
LCDC_LATCH=1; LCDC_LATCH=0;
}
void clean()
{
uint i;
i=32768;
Lcd_comw(CsrDirR);
Lcd_comw(CsrW);
Lcd_dataw(0x00);
Lcd_dataw(0x00);
Lcd_comw(mWrite);
while(i--)
Lcd_dataw(0x00);
}
void SystemSet_init()
{
Lcd_comw(SystemSet);
Lcd_dataw(0x30);
Lcd_dataw(0x87);
Lcd_dataw(0x07);
Lcd_dataw(0x27);
Lcd_dataw(0x2F);
Lcd_dataw(0xEF);
Lcd_dataw(0x28);
Lcd_dataw(0x00);
}
void Scroll_init()
{
Lcd_comw(Scroll);
Lcd_dataw(0x00);
Lcd_dataw(0x00);
Lcd_dataw(0xF0);
Lcd_dataw(0x80);
Lcd_dataw(0x25);
Lcd_dataw(0xF0);
Lcd_dataw(0x00);
Lcd_dataw(0x4B);
Lcd_dataw(0x00);
Lcd_dataw(0x00);
}
void Lcd_init()
{
SystemSet_init();
Scroll_init();
Lcd_comw(HdotScr);
Lcd_dataw(0x00);
Lcd_comw(Ovlay);
Lcd_dataw(0x0C);
Lcd_comw(DispOff);
clean();
Lcd_comw(CsrW);
Lcd_dataw(0x00);
Lcd_dataw(0x00);
Lcd_comw(CsrForm);
Lcd_dataw(0x04);
Lcd_dataw(0x86);
Lcd_comw(DispOn);
Lcd_dataw(0x54);
Lcd_comw(CsrDirR);
}
void Setpos(uchar x,uchar y)//设置光标定位
{
uint ipos;
ipos = y*40+x; //每行40B
Lcd_comw(CsrW);
Lcd_dataw(ipos%256); //取低位
Lcd_dataw(ipos/256); //去高位
}
void XHZ(uchar x,uchar y,uchar k) //显示文字
{
uchar i,m;
for(m=0;m<2;m++)
{
Setpos(x+m,y);
Lcd_comw(CsrDirD);
Lcd_comw(mWrite);
for(i=0;i<16;i++)
{
Lcd_dataw(table[k][i+m*16]);
}
}
}
void main()
{
Lcd_init();
while(1)
{
XHZ(0,0,0);
XHZ(2,0,1);
XHZ(4,0,2);
XHZ(6,0,3);
XHZ(0,16,0);
XHZ(2,16,1);
XHZ(4,16,2);
XHZ(6,16,3);
XHZ(0,32,0);
XHZ(2,32,1);
XHZ(4,32,2);
XHZ(6,32,3);
}
} |