📄 qh2001.c
字号:
/*
我用的是QH2001的LCD显示器,按照我下面的显示程序,显示器能点亮但是没有能显示出字符来,我把数据线依次反接后还是没有字符显示.请问各位大虾这是怎么回事啊?我觉得我的程序应该是没有问题的啊.
电路接法17到20以及5号脚(Vo)我没接,9到16接的P0口,3---GND,4---VDD(+5V),其他脚的接法为:
sbit DI = P1^5;
sbit RW = P1^4;
sbit CSB = P1^6;
sbit CSA = P1^7;
sbit E1 = P3^7;
sbit E2 = P3^6; //显示器的使能端E是从P3.6和P3.7经过一个与非门接上的,所以定义了E1和E2
*/
// Includes
//-----------------------------------------------------------------------------
#include "LPC23xx.h"
#define RW 1<<26 //P1.26
#define DI 1<<27 //p1.27
#define CSB 1<<28 //p1.28
#define CSA 1<<29
#define E1 1<<30
#define PORTD 0xff<<18 //p1.18- pp1.25
// Define the register command code
//-----------------------------------------------------------------------------
//正常p0-p7-->d0-d7
#define Disp_On 0x3F
#define Disp_Off 0x3E
#define Col_Add 0x40
#define Page_Add 0xB8
#define Start_Line 0xC0
//位置反了p0-p7-->d7-d0
//#define Disp_On 0xFC
//#define Disp_Off 0x7C
//#define Col_Add 0x40
//#define Page_Add 0xB8
//#define Start_Line 0xC0
// Function PROTOTYPES
//-----------------------------------------------------------------------------
void initial_LCD(void);
void DISPLAY(void);
void clear_LCD (void);
void send_com(unsigned char);
void send_data(unsigned char );
void delay(unsigned char);
void delay_10us(unsigned char);
void hz_disp16(unsigned char,unsigned char, unsigned char *);
unsigned char ChangeDat(unsigned char);
/* 二进制代码 */
// 照 --
unsigned char zhao[]={
0x00,0x00,0xFE,0x22,0x22,0xFE,0x40,0x21,0xD1,0x4F,0x41,0x51,0x61,0xDF,0x00,0x00,
0x40,0x60,0x3B,0x01,0x09,0x33,0x60,0x00,0x0F,0x32,0x62,0x02,0x0A,0x37,0x60,0x00};
// 射
unsigned char she[]={
0x00,0x00,0xFC,0x56,0x55,0x54,0x54,0xFC,0x10,0x90,0x10,0x10,0xFF,0x10,0x10,0x00,
0x00,0x42,0x23,0x12,0x0A,0x46,0x82,0x7F,0x00,0x00,0x47,0x80,0x7F,0x00,0x00,0x00};
// 冒号
unsigned char maohao[]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x36,0x36,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
// 测
unsigned char ce[]={
0x08,0x31,0x86,0x60,0x00,0xFE,0x02,0xF2,0x02,0xFE,0x00,0xF8,0x00,0x00,0xFF,0x00,
0x04,0xFC,0x03,0x00,0x80,0x47,0x30,0x0F,0x10,0x67,0x00,0x07,0x40,0x80,0x7F,0x00};
// 量
unsigned char liang[]={
0x40,0x40,0x40,0xDF,0x55,0x55,0x55,0xD5,0x55,0x55,0x55,0xDF,0x40,0x40,0x40,0x00,
0x40,0x40,0x40,0x57,0x55,0x55,0x55,0x7F,0x55,0x55,0x55,0x57,0x50,0x40,0x40,0x00};
// 样 --
unsigned char yang[]={
0x08,0x88,0x68,0xFF,0x48,0x88,0x00,0x49,0x4E,0x48,0xF8,0x4C,0x4B,0x48,0x08,0x00,
0x02,0x01,0x00,0xFF,0x00,0x00,0x04,0x04,0x04,0x04,0xFF,0x04,0x04,0x04,0x04,0x00};
// 1
unsigned char yi[]={
0x00,0x00,0x00,0x00,0x00,0x08,0x04,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x40,0x40,0x7F,0x40,0x40,0x00,0x00,0x00,0x00,0x00,0x00};
// 2
unsigned char er[]={
0x00,0x00,0x00,0x18,0x04,0x02,0x02,0x02,0x82,0x82,0x84,0x78,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x78,0x44,0x42,0x41,0x41,0x40,0x40,0x40,0x70,0x00,0x00,0x00,0x00};
// 分
unsigned char fen[]={
0x80,0x40,0x20,0x98,0x87,0x82,0x80,0x80,0x83,0x84,0x98,0x30,0x60,0xC0,0x40,0x00,
0x00,0x80,0x40,0x20,0x10,0x0F,0x00,0x00,0x20,0x40,0x3F,0x00,0x00,0x00,0x00,0x00};
// 秒
unsigned char miao[]={
0x12,0x12,0xD2,0xFE,0x91,0x11,0xC0,0x38,0x10,0x00,0xFF,0x00,0x08,0x10,0x60,0x00,
0x04,0x03,0x00,0xFF,0x00,0x83,0x80,0x40,0x40,0x20,0x23,0x10,0x08,0x04,0x03,0x00};
// MAIN Routine
//-----------------------------------------------------------------------------
main()
{
unsigned int i;
for(i=0;i<1000;i++); // 延时,等待系统上电稳定
initial_LCD();
clear_LCD();
for(i=0;i<6000000;i++); // 延时,等待系统上电稳定
while(1)
{
DISPLAY();
}
}
//***********清屏*****************************
void clear_LCD(void)
{
unsigned char m,i;
IOCLR1 = (CSA|CSB);// CSA=1; CSB=1;
send_com(Page_Add+0);
send_com(Col_Add+0);
for(i=0;i<8;i++)
{
send_com(Page_Add+i);
for(m=0;m<64;m++)
{
send_data(0x00);
}
}
IOSET1 = (CSA|CSB);
}
//**********LCD初始化************************
void initial_LCD(void)
{
IODIR1 |=(PORTD|E1|CSA|CSB|DI|RW);
delay(10);
IOCLR1 = (CSA|CSB);
delay(10);
send_com(Disp_Off);
send_com(Page_Add+0);
send_com(Start_Line+0);
send_com(Col_Add+0);
send_com(Disp_On);
IOSET1 = (CSA|CSB);
}
//**********数据写命令***************************
void send_com(unsigned char command )
{
command = ChangeDat(command);//数据变换
delay_10us(4);
IOCLR1 = (DI|RW); //
//PORTD=command;
IOCLR1 = PORTD;
IOSET1 = (command<<18);
IOCLR1 =E1;//
delay_10us(10);
IOSET1 =(E1); //
}
//**********写数据***************************
void send_data(unsigned char dat )
{
dat = ChangeDat(dat);//数据变换
delay_10us(4);
IOSET1 = DI;//DI=1;
IOCLR1 = RW;//RW=0
//PORTD=dat;
IOCLR1 = PORTD;
IOSET1 = (dat<<18);
IOCLR1 = E1;//E1 =0;
delay_10us(10);
IOSET1 = (E1); // E1 =1; E2 =1;
}
//---------------------指定位置显示汉字16*16-----------------------
void hz_disp16(unsigned char pag,unsigned char col, unsigned char *hzk)
{
unsigned char m=0,i=0;
for(m=0;m<2;m++)
{
send_com(Page_Add+pag+m);
send_com(Col_Add+col);
for(i=0;i<16;i++)
{
send_data(hzk[16*m+i]);
//send_data(0xff);
}
}
}
//******************显示点阵子程序************
void DISPLAY(void)
{
unsigned char m=0,i=0;
// clear_LCD();
IOSET1 = CSB;// CSA=1;
IOCLR1 = CSA;//CSB=0;
hz_disp16(0,0,zhao);
delay(50);
hz_disp16(0,16,she);
delay(50);
hz_disp16(0,32,maohao);
delay(50);
hz_disp16(2,0,ce);
delay(50);
hz_disp16(2,16,liang);
delay(50);
hz_disp16(2,32,maohao);
delay(50);
hz_disp16(4,0,yang);
delay(50);
hz_disp16(4,16,yi);
delay(50);
hz_disp16(4,32,maohao);
delay(50);
hz_disp16(6,0,yang);
delay(50);
hz_disp16(6,16,er);
delay(50);
hz_disp16(6,32,maohao);
delay(50);
IOCLR1 = CSB;//CSA=0;
IOSET1 = CSA;//CSB=1;
for(i=0;i<4;i++)
{
hz_disp16(m,0,fen);
delay(50);
hz_disp16(m,32,miao);
delay(50);
m+=2;
}
IOSET1 = CSA;
IOSET1 = CSB;
}
//***********延时*****************************
//-----------------------------------------------------------------------------
void delay_10us(unsigned char x)
{
while(x--);
}
void delay(unsigned char cnt)
{
unsigned char i;
do
{
i = 4;
do
{
delay_10us(39);
} while(--i);
} while(--cnt);
}
//*********************************************
//change d0-d7--->d7--d0
unsigned char ChangeDat(unsigned char dat)
{
unsigned char i,temp;
for(i=0;i<8;i++)
{
if(dat&1)
{
temp = (temp<<1)|1;
}
else
{
temp = (temp<<1);
}
dat =dat>>1;
}
return temp;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -