?? qh2001.c
字號(hào):
/*
我用的是QH2001的LCD顯示器,按照我下面的顯示程序,顯示器能點(diǎn)亮但是沒有能顯示出字符來,我把數(shù)據(jù)線依次反接后還是沒有字符顯示.請(qǐng)問各位大蝦這是怎么回事啊?我覺得我的程序應(yīng)該是沒有問題的啊.
電路接法17到20以及5號(hào)腳(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經(jīng)過一個(gè)與非門接上的,所以定義了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);
/* 二進(jìn)制代碼 */
// 照 --
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};
// 冒號(hào)
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};
// 測(cè)
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++); // 延時(shí),等待系統(tǒng)上電穩(wěn)定
initial_LCD();
clear_LCD();
for(i=0;i<6000000;i++); // 延時(shí),等待系統(tǒng)上電穩(wěn)定
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);
}
//**********數(shù)據(jù)寫命令***************************
void send_com(unsigned char command )
{
command = ChangeDat(command);//數(shù)據(jù)變換
delay_10us(4);
IOCLR1 = (DI|RW); //
//PORTD=command;
IOCLR1 = PORTD;
IOSET1 = (command<<18);
IOCLR1 =E1;//
delay_10us(10);
IOSET1 =(E1); //
}
//**********寫數(shù)據(jù)***************************
void send_data(unsigned char dat )
{
dat = ChangeDat(dat);//數(shù)據(jù)變換
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);
}
}
}
//******************顯示點(diǎn)陣子程序************
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;
}
//***********延時(shí)*****************************
//-----------------------------------------------------------------------------
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;
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -