還是那個(gè)89C52和12232的組合。但是這個(gè)12232沒(méi)有Datasheet。最后我還是靠自己的分析能力和對(duì)賣(mài)家資料那么一點(diǎn)點(diǎn)的信任(現(xiàn)在看來(lái)是錯(cuò)誤的)搞定(?)了這個(gè)的驅(qū)動(dòng)。
現(xiàn)在我一直找不到方法讓這個(gè)玩意顯示下半屏,F(xiàn)在上半屏顯示什么,下半屏就跟著顯示。我暈……
不過(guò)至少靠前面兩個(gè)程序的幫助顯示出了可以辨認(rèn)的字符。
不過(guò)說(shuō)道這個(gè)倒讓我說(shuō)一下,我的P0口上的上拉電阻貌似掛掉了,結(jié)果導(dǎo)致我顯示漢字老是掉筆畫(huà),很奇怪,嘗試了用NE555/4046產(chǎn)生的時(shí)鐘信號(hào)驅(qū)動(dòng)CLK端均未成功。結(jié)果加上上拉電阻就好了。
這個(gè)是上次的驅(qū)動(dòng)http://www.zg4o1577.cn/mcu/1560.html 效果好像更好些了
上顯示效果圖:
上程序(還是3/4成品,我得看看怎么著讓下半屏亮起來(lái)):
完整的源代碼下載: http://www.zg4o1577.cn/f/12232de.rar
/*------ *FILE main.c * 測(cè)試驅(qū)動(dòng)12232 */ #include <at89x52.h> #include <type-def.h> //#define DEBUG #ifdef DEBUG #include <stdio.h> #endif /*-----DEVICE IO Pin map. * NMTB-S000389FGHSAY-A * 死馬當(dāng)活馬醫(yī)吧。! * 時(shí)序68 series */ //仿二進(jìn)制賦值 #define HEX__(n) 0x##n##UL #define B8__(x) ( (x & 0x0000000FUL) ? 1:0 )\ +( (x & 0x000000F0UL) ? 2:0 )\ +( (x & 0x00000F00UL) ? 4:0 )\ +( (x & 0x0000F000UL) ? 8:0 )\ +( (x & 0x000F0000UL) ? 16:0 )\ +( (x & 0x00F00000UL) ? 32:0 )\ +( (x & 0x0F000000UL) ? 64:0 )\ +( (x & 0xF0000000UL) ? 128:0 ) #define B8(x) ((unsigned char)B8__(HEX__(x))) #define B16(x_msb,x_lsb) (((unsigned int)B8(x_msb)<<8) + B8(x_lsb)) #define B32(x_msb,x_2,x_3,x_lsb) (((unsigned long)B8(x_msb)<<24) + ((unsigned long)B8(x_2)<<16) + ((unsigned long)B8(x_3)<<8) + B8(x_lsb)) #define TH 0xFE #define TL 0x40//2K定時(shí)器值 #define LCD_RESET 0xE2 //復(fù)位 #define LCD_DISPLAY_ON 0xAF //顯示開(kāi) #define LCD_DISPLAY_OFF 0xAE //顯示關(guān) #define LCD_PS_ON 0xA5 //節(jié)電驅(qū)動(dòng) #define LCD_PS_OFF 0xA4 //正常驅(qū)動(dòng) #define LCD_DUTY16 0xA8 //占空比1/16 #define LCD_DUTY32 0xA9 //占空比1/32 #define LCD_END 0xEE #define LCD_RWMODE 0xE0 #define LCD_LINE0 0xC0 //開(kāi)始行 #define LCD_PAGE0 0xB8 //開(kāi)始頁(yè) #define LCD_COLUMN0 0x00 //開(kāi)始列 #define Both_Write_Cmd(cmd) LCD_Write(0,0,cmd);LCD_Write(1,0,cmd) #define Both_Write_Data(dat) LCD_Write(0,1,dat);LCD_Write(1,1,dat) #define CLK P1_3 #define RESET P1_6 #define A0 P1_0 #define E1 P1_2 #define E2 P1_1 #define LCD_RD P1_4 #define LCD_WR P1_5 #define DATA P0 //渣字庫(kù),從16x8轉(zhuǎn)到8x8 unsigned char __code ASCII[][8]={ {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}, {0x0,0x0,0xE,0xFF,0xFF,0xE,0x0,0x0}, {0x0,0x3,0x7,0x0,0x0,0x7,0x3,0x0}, {0x8,0xFE,0xFE,0x8,0xFE,0xFE,0x8,0x0}, {0xE,0x9F,0x91,0x91,0x91,0xF3,0x66,0x0}, {0x8C,0xC,0x40,0x60,0x30,0x98,0x8C,0x0}, {0x60,0xF6,0x9F,0xB9,0x6F,0xF6,0x90,0x0}, {0x0,0x4,0x7,0x3,0x0,0x0,0x0,0x0}, {0x0,0x0,0x7C,0x7E,0x83,0x81,0x0,0x0}, {0x0,0x0,0x81,0x83,0x7E,0x7C,0x0,0x0}, {0x20,0x28,0x78,0x70,0x70,0x78,0x28,0x20}, {0x0,0x20,0x20,0x78,0x78,0x20,0x20,0x0}, {0x0,0x0,0x0,0x80,0x80,0x0,0x0,0x0}, {0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x0}, {0x0,0x0,0x0,0x80,0x80,0x0,0x0,0x0}, {0x80,0x0,0x40,0x60,0x30,0x18,0xC,0x0}, {0x7C,0x7E,0x83,0xB1,0x83,0x7E,0x7C,0x0}, {0x0,0x84,0x86,0xFF,0xFF,0x80,0x80,0x0}, {0x82,0xC3,0xE1,0xB1,0x99,0x8F,0x86,0x0}, {0x2,0x83,0x91,0x91,0x91,0xFF,0x6E,0x0}, {0x30,0x38,0x2C,0xA6,0xFF,0xFF,0xA0,0x0}, {0x1F,0x9F,0x91,0x91,0x91,0xF1,0x61,0x0}, {0x7C,0xFE,0x93,0x91,0x91,0xF0,0x60,0x0}, {0x3,0x3,0xC1,0xE1,0x31,0x1F,0xF,0x0}, {0x6E,0xFF,0x91,0x91,0x91,0xFF,0x6E,0x0}, {0xE,0x9F,0x91,0x91,0x91,0x7F,0x7E,0x0}, {0x0,0x0,0x0,0xC,0xC,0x0,0x0,0x0}, {0x0,0x0,0x80,0x8C,0xC,0x0,0x0,0x0}, {0x0,0x20,0x70,0x58,0xC,0x86,0x82,0x0}, {0x0,0x48,0x48,0x48,0x48,0x48,0x48,0x0}, {0x0,0x82,0x86,0xC,0x58,0x70,0x20,0x0}, {0x6,0x7,0x1,0xF1,0xF9,0xF,0x6,0x0}, {0x7C,0xFE,0x82,0xF2,0xF2,0xFE,0x7C,0x0}, {0xF8,0xFC,0x26,0x23,0x26,0xFC,0xF8,0x0}, {0x81,0xFF,0xFF,0x91,0x91,0xFF,0x6E,0x0}, {0x7C,0x7E,0x83,0x81,0x81,0x83,0x6,0x0}, {0x81,0xFF,0xFF,0x81,0x83,0x7E,0x7C,0x0}, {0x81,0xFF,0xFF,0x91,0xB9,0x83,0x87,0x0}, {0x81,0xFF,0xFF,0x91,0x39,0x3,0x7,0x0}, {0x7C,0x7E,0x83,0xA1,0xA1,0x63,0xE6,0x0}, {0xFF,0xFF,0x10,0x10,0x10,0xFF,0xFF,0x0}, {0x0,0x0,0x81,0xFF,0xFF,0x81,0x0,0x0}, {0x40,0xC0,0x80,0x81,0xFF,0x7F,0x1,0x0}, {0x81,0xFF,0xFF,0x30,0x78,0xCF,0x87,0x0}, {0x81,0xFF,0xFF,0x81,0x80,0x80,0x80,0x0}, {0xFF,0xFF,0xE,0x1C,0xE,0xFF,0xFF,0x0}, {0xFF,0xFF,0xE,0x1C,0x38,0xFF,0xFF,0x0}, {0x7E,0xFF,0x81,0x81,0x81,0xFF,0x7E,0x0}, {0x81,0xFF,0xFF,0x91,0x11,0x1F,0xE,0x0}, {0x7E,0xFF,0x81,0x81,0x81,0xFF,0x7E,0x0}, {0x81,0xFF,0xFF,0x11,0x31,0xFF,0xCE,0x0}, {0x6,0x8F,0x99,0x91,0xB1,0xE7,0x46,0x0}, {0x0,0x7,0x83,0xFF,0xFF,0x83,0x7,0x0}, {0x7F,0xFF,0x80,0x80,0x80,0xFF,0x7F,0x0}, {0x7F,0x7F,0x0,0x80,0x0,0x7F,0x7F,0x0}, {0x7F,0xFF,0x80,0x70,0x80,0xFF,0x7F,0x0}, {0x83,0xCF,0x7C,0x78,0x7C,0xCF,0x83,0x0}, {0x0,0xF,0x9F,0xF0,0xF0,0x9F,0xF,0x0}, {0x87,0xC3,0xE1,0xB1,0x99,0x8F,0x87,0x0}, {0x0,0x0,0xFF,0xFF,0x81,0x81,0x0,0x0}, {0xE,0x1C,0x38,0x70,0x60,0x40,0x80,0x0}, {0x0,0x0,0x81,0x81,0xFF,0xFF,0x0,0x0}, {0x2,0x3,0x1,0x0,0x1,0x3,0x2,0x0}, {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}, {0x0,0x0,0x0,0x1,0x1,0x0,0x0,0x0}, {0x40,0xE8,0xA8,0xA8,0x78,0xF0,0x80,0x0}, {0x1,0xFF,0xFF,0x88,0x98,0xF0,0x60,0x0}, {0x70,0xF8,0x88,0x88,0x88,0x98,0x10,0x0}, {0x60,0xF0,0x98,0x89,0x7F,0xFF,0x80,0x0}, {0x70,0xF8,0xA8,0xA8,0xA8,0xB8,0x30,0x0}, {0x90,0xFE,0xFF,0x91,0x3,0x6,0x0,0x0}, {0x70,0xF8,0x88,0x88,0xF0,0xF8,0x8,0x0}, {0x81,0xFF,0xFF,0x10,0x8,0xF8,0xF0,0x0}, {0x0,0x0,0x88,0xFB,0xFB,0x80,0x0,0x0}, {0x0,0x0,0x0,0x0,0x8,0xFB,0xFB,0x0}, {0x81,0xFF,0xFF,0x60,0x70,0x98,0x88,0x0}, {0x0,0x0,0x81,0xFF,0xFF,0x80,0x0,0x0}, {0xF8,0xF8,0x18,0x70,0x18,0xF8,0xF0,0x0}, {0x8,0xF8,0xF0,0x8,0x8,0xF8,0xF0,0x0}, {0x70,0xF8,0x88,0x88,0x88,0xF8,0x70,0x0}, {0x8,0xF8,0xF0,0x88,0x88,0xF8,0x70,0x0}, {0x70,0xF8,0x88,0x88,0xF0,0xF8,0x8,0x0}, {0x88,0xF8,0xF0,0x98,0x8,0x38,0x30,0x0}, {0x10,0xB8,0xE8,0xC8,0xC8,0x98,0x10,0x0}, {0x8,0x8,0x7E,0xFF,0x88,0x88,0x0,0x0}, {0x78,0xF8,0x80,0x80,0x78,0xF8,0x80,0x0}, {0x0,0x78,0x78,0x80,0x80,0x78,0x78,0x0}, {0x78,0xF8,0x80,0x60,0x80,0xF8,0x78,0x0}, {0x88,0x98,0x70,0x60,0x70,0x98,0x88,0x0}, {0x78,0xF8,0x80,0x80,0x80,0xF8,0xF8,0x0}, {0x98,0x98,0xC8,0xE8,0xB8,0x98,0x88,0x0}, {0x0,0x10,0x10,0x7E,0xEF,0x81,0x81,0x0}, {0x0,0x0,0x0,0xEF,0xEF,0x0,0x0,0x0}, {0x0,0x81,0x81,0xEF,0x7E,0x10,0x10,0x0}, {0x2,0x3,0x1,0x3,0x2,0x3,0x1,0x0} }; /*--------------------- 生成的以下字的字庫(kù):驅(qū)動(dòng)編寫(xiě)萬(wàn)致遠(yuǎn) 字庫(kù)由萬(wàn)致遠(yuǎn)HZK軟件建立。使用點(diǎn)陣顯示模式 HZ就是您需要的漢字庫(kù) ----------------*/ unsigned char __code HZ[][32]={ /******點(diǎn)陣******* 0000100000000100 1111110111111110 0000100100000000 0100100101000100 0100100101000100 0100100100101000 0100100100101000 0100100100010000 0111110100010000 0000010100101000 0000010100101000 0001110101000100 1110010110000100 0100010100000000 0001010111111110 0000100000000000 *******點(diǎn)陣結(jié)束********/ {0x2,0xFA,0x2,0x2,0xFF,0x2,0x0,0xFE,0x2,0x1A,0x62,0x82,0x62,0x1B,0x2,0x0,0x10,0x31,0x11,0x49,0x89,0x7F,0x0,0x7F,0x50,0x48,0x46,0x41,0x46,0x58,0x40,0x0}, /******點(diǎn)陣******* 0000000001000000 0000100001000000 0111110001000000 0000000001000100 0000010111111110 1111111001000100 0001000001000100 0001000001000100 0010000001000100 0010010001000100 0100001010000100 1111111010000100 0100000100000100 0000000100000100 0000001000101000 0000010000010000 *******點(diǎn)陣結(jié)束********/ {0x20,0x24,0x24,0xE4,0x26,0x34,0x20,0x10,0x10,0xFF,0x10,0x10,0x10,0xF8,0x10,0x0,0x8,0x1C,0xB,0x8,0x8,0x8A,0x4C,0x30,0xC,0x3,0x40,0x80,0x40,0x3F,0x0,0x0}, /******點(diǎn)陣******* 0001000010000000 0001000001001000 0010001111111100 0010001000001000 0100101000001000 1111101111111000 0001001000000000 0010001000000100 0100001111111110 1111011010010100 0100101010010100 0000001111111100 0001101010010100 1110001010010100 0100001010010100 0000001000001100 *******點(diǎn)陣結(jié)束********/ {0x20,0x30,0xAC,0x63,0x30,0x0,0xFC,0x24,0x25,0x26,0x24,0x24,0x3E,0x84,0x0,0x0,0x22,0x67,0x22,0x12,0x14,0x2,0xFF,0x9,0x7F,0x9,0x9,0x7F,0x89,0xFF,0x1,0x0}, /******點(diǎn)陣******* 0000000000000000 0111111111111110 0100000000000010 1000100000000100 0000100000100000 0000111111110000 0000100000000000 0000100000001000 0000111111111100 0000000000001000 0000000001001000 0111111111101000 0000000000001000 0000000000001000 0000000001010000 0000000000100000 *******點(diǎn)陣結(jié)束********/ {0x8,0x6,0x2,0x2,0xFA,0x22,0x22,0x22,0x22,0x22,0x32,0x22,0x82,0xA,0x6,0x0,0x0,0x8,0x8,0x8,0x9,0x9,0x9,0x9,0x9,0x4D,0x89,0x41,0x3F,0x1,0x0,0x0}, /******點(diǎn)陣******* 0000000000000000 0000000000000100 1111111111111110 0000001000000000 0000001000000000 0000001000010000 0000001111111000 0000001000010000 0000001000010000 0000010000010000 0000010000010000 0000010000010000 0000100000010000 0001000000010000 0010000010100000 0100000001000000 *******點(diǎn)陣結(jié)束********/ {0x4,0x4,0x4,0x4,0x4,0x4,0xFC,0x44,0x44,0x44,0x44,0xE4,0x44,0x6,0x4,0x0,0x0,0x80,0x40,0x20,0x10,0xE,0x1,0x0,0x40,0x80,0x40,0x3F,0x0,0x0,0x0,0x0}, /******點(diǎn)陣******* 0000010001000000 1111111001000000 0001000001000000 0001000001000100 0010000011111110 0100010100001000 1111111010001000 0001000010001000 0001000010001000 0111110010010000 0001000001010000 0001000000100000 0001111001010000 1111000010001000 0100000100001110 0000011000000100 *******點(diǎn)陣結(jié)束********/ {0x42,0x62,0x52,0xCE,0x42,0x63,0x42,0x20,0xD0,0x1F,0x10,0x10,0xF0,0x18,0x10,0x0,0x20,0x62,0x22,0x3F,0x12,0x92,0x90,0x40,0x23,0x14,0x8,0x16,0x61,0xC0,0x40,0x0}, /******點(diǎn)陣******* 0000000000010000 0100001111111000 0011000000000000 0001000000000000 0000000000001000 0000011111111100 1111000100100000 0001000100100000 0001000100100000 0001000100100100 0001001000100100 0001001000011100 0001010000000000 0010100000000110 0100011111111100 0000000000000000 *******點(diǎn)陣結(jié)束********/ {0x40,0x42,0x44,0xCC,0x0,0x20,0x22,0xE2,0x22,0x22,0xE2,0x23,0x32,0x20,0x0,0x0,0x0,0x40,0x20,0x1F,0x20,0x50,0x4C,0x43,0x40,0x40,0x47,0x48,0x48,0x6E,0x20,0x0} }; void OutCLK() __interrupt 1 __using 1//CLK out 2kHz { TF0=0;//CLR TR0=0; EA=0; TH0=TH;TL0=TL; CLK=!CLK; TR0=1; EA=1; } void Delay_ms(UINT x) { UINT y; while(x--) { for(y=0;y<600;y++); } } void Init_Timer() { TMOD=0x21;//T0計(jì)數(shù)器模式,T1八位重載模式 TH0=TH; TL0=TL; TR0=1; ET0=1; SCON = 0x50; TH1 = 0xFF; //57600 TL1 = 0xFF; TR1 = 1; PCON=PCON|0x80;//波特率加倍 EA=1; } void putchar(char s) { SBUF=s; while(!TI); TI=0; } BYTE Read_Status(BOOL right) { BYTE tData; DATA=0xff; LCD_WR=1; LCD_RD=0; A0=0; if(right) { E1=0; } else { E2=0; } tData=DATA; if(right) { E1=1; } else { E2=1; } LCD_RD=1; A0=1; return tData; } void LCD_Write(BOOL right,BOOL disp,BYTE Data) {//模擬8080 /*BYTE rTemp=0xff; while(rTemp & 0x7F) { rTemp=Read_Status(right); }*/ if(right) { E1=0; } else { E2=0; } A0=disp;//disp=1數(shù)據(jù),disp=0顯示 DATA=Data; LCD_RD=1; LCD_WR=0; __asm NOP NOP NOP NOP __endasm; LCD_WR=1; if(right) { E1=1; } else { E2=1; } __asm NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP __endasm; } BYTE LCD_Read(BOOL right) {//模擬8080 BYTE tData; if(right) { E1=0; } else { E2=0; } DATA=0xFF; LCD_WR=1; LCD_RD=0; tData=DATA; LCD_RD=1; if(right) { E1=1; } else { E2=1; } return tData; } void SetPage(BYTE page0,BYTE page1) { LCD_Write(0,0,0xB8|page1); LCD_Write(1,0,0xB8|page0); } void SetAddress(BYTE address0,BYTE address1) { LCD_Write(0,0,address1); LCD_Write(1,0,address0); } void LCD_Cls(BYTE FILL) { BYTE i; BYTE page; for (page=0;page<4;page++) { SetPage(page,page); SetAddress(0,0); for (i=0;i<61;i++) { Both_Write_Data(FILL); } } } void Init_LCD() { RESET=1; RESET=0;//8080時(shí)序 #ifdef DEBUG printf("Status(Chip1):0x%X\n",Read_Status(0)); printf("Status(Chip2):0x%X\n",Read_Status(1)); #endif Both_Write_Cmd(LCD_RESET);//軟復(fù)位 #ifdef DEBUG printf("Status(Chip1):0x%X\n",Read_Status(0)); printf("Status(Chip2):0x%X\n",Read_Status(1)); #endif Both_Write_Cmd(LCD_PS_OFF);//正常驅(qū)動(dòng) Both_Write_Cmd(LCD_DISPLAY_ON);//開(kāi)顯示 Both_Write_Cmd(LCD_DUTY16);//16%占空比 #ifdef DEBUG printf("Status(Chip1):0x%X\n",Read_Status(0)); printf("Status(Chip2):0x%X\n",Read_Status(1)); #endif } /* * CODE: A0 /RD /WR D7 D6 D5 D4 D3 D2 D1 D0 L L H BUSY ADC ON/OFF RESET LLLL */ void Draw8(BOOL right,BYTE Asc) { BYTE i; for(i=0;i<8;i++) { LCD_Write(right,1,ASCII[Asc-32][i]); } } void DrawASCIIStr(BOOL right,BYTE *str) { while(*str!='\0') { Draw8(right,*str); str++; } } void main() { BYTE i,j; Init_Timer();//啟動(dòng)定時(shí)器 #ifdef DEBUG printf("System started.\n"); #endif Init_LCD(); LCD_Cls(0x00);//清屏 SetPage(0,0); SetAddress(0,0); for(j=0;j<4;j++) { for(i=0;i<16;i++) { LCD_Write(0,1,HZ[j][i]); } } SetPage(1,1); SetAddress(0,0); for(j=0;j<4;j++) { for(i=16;i<32;i++) { LCD_Write(0,1,HZ[j][i]); } } //顯示“驅(qū)動(dòng)編寫(xiě)” SetPage(0,0); SetAddress(0,0); DrawASCIIStr(1,"BY"); //顯示BY for(j=4;j<7;j++) { for(i=0;i<16;i++) { LCD_Write(1,1,HZ[j][i]); } } SetPage(1,1); SetAddress(16,16); for(j=4;j<7;j++) { for(i=16;i<32;i++) { LCD_Write(1,1,HZ[j][i]); } } //顯示“萬(wàn)致遠(yuǎn)” while(1) { //LCD_Cls(0xff); //Delay_ms(100); //LCD_Cls(0xAA); //Delay_ms(100); //LCD_Cls(0x55); //Delay_ms(100); } }