久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

用51單片機(jī)來驅(qū)動(dòng)12232液晶

作者:佚名   來源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2012年08月31日   【字體:

上排屏幕和下排屏幕重復(fù)我就不說了。字體難看我就不說了。這個(gè)液晶真是煩人啊,引腳定義都是反的……唉………先放個(gè)程序。發(fā)現(xiàn)如何setpage,set到0、1沒問題,2、3就顯示不出了。真不知道是我的錯(cuò)還是液晶的錯(cuò)。無論是左還是右都一樣。

這個(gè)是模擬8080時(shí)序的,比6800稍微簡(jiǎn)單。在STC89C52 @ 11.0592下通過。

這塊液晶最后還讓我用串口進(jìn)行調(diào)試了,暈。






這個(gè)液晶真是……哎……

好吧。附上真正的引腳定義(淘寶賣家那個(gè)害死我了):

GND VCC Vo A0 CS1 CS2 CLK(2KHZ的時(shí)鐘輸入) RD WR DB0~DB7 RST LED+ LED-

注意在5V系統(tǒng)上用的時(shí)候LED+需要串個(gè)20~47R的電阻。要不然會(huì)嚴(yán)重發(fā)熱。

CLK不能直接接單片機(jī)的ALE腳,否則不會(huì)有任何顯示(那個(gè)是2M)

RESET無法拉高所以6800時(shí)序沒法用。只能用8080時(shí)序。

貌似上下兩排顯示公用一個(gè)VRAM。我現(xiàn)在還沒找到解決顯示重復(fù)的辦法……

順帶提醒一下,這個(gè)液晶的視角很窄,所以更加建議使用3塊錢紫晶的。更便宜更好用,資料也比較齊全。
 
全部的完整源代碼從http://www.zg4o1577.cn/f/12232ces.rar  這里下載

/*------
 *FILE main.c
 * 測(cè)試驅(qū)動(dòng)12232
 * 萬致遠(yuǎn)@rwzy.co.cc
 */
#include <at89x52.h>
#include <type-def.h>
#include <stdio.h>
/*-----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    //顯示開 
#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     //開始行 
#define LCD_PAGE0        0xB8     //開始頁 
#define LCD_COLUMN0      0x00	  //開始列 
#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

//渣字庫,從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}
};
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顯示
	P0=Data;
	LCD_RD=1;
	LCD_WR=0;
	__asm
	NOP
	__endasm;
	LCD_WR=1;
	if(right)
	{
		E1=1;
	}
	else
	{
		E2=1;
	}
	__asm
	NOP
	NOP
	NOP
	NOP
	NOP
	__endasm;
}

BYTE LCD_Read(BOOL right)
{//模擬8080
	BYTE tData;
	if(right)
	{
		E1=0;
	}
	else
	{
		E2=0;
	}
	P0=0xFF;
	LCD_WR=1;
	LCD_RD=0;
	tData=P0;
	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 clrscr(void)
{
	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(0x00);
		}
	}
}

void Init_LCD()
{
	RESET=1;
	RESET=0;//8080時(shí)序
	printf("Status(Chip1):0x%X\n",Read_Status(0));
	printf("Status(Chip2):0x%X\n",Read_Status(1));
	Both_Write_Cmd(LCD_RESET);//軟復(fù)位
	printf("Status(Chip1):0x%X\n",Read_Status(0));
	printf("Status(Chip2):0x%X\n",Read_Status(1));
	Both_Write_Cmd(LCD_PS_OFF);//正常驅(qū)動(dòng)
	Both_Write_Cmd(LCD_DISPLAY_ON);//開顯示
	Both_Write_Cmd(LCD_DUTY16);//32%占空比
	printf("Status(Chip1):0x%X\n",Read_Status(0));
	printf("Status(Chip2):0x%X\n",Read_Status(1));
}
/*
 * 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 printstr(BOOL right,BYTE *str)
{
	while(*str!='\0')
	{
		Draw8(right,*str);
		str++;
	}
}
void main()
{  
	BYTE i;
	BYTE page;
	Init_Timer();//啟動(dòng)定時(shí)器
	printf("System started.\n");
	Init_LCD();
	//Set_xyPos_LCD(0,0);
	//LCD_Write(0,1,0xff);
	//printstr("THELL");
	clrscr();
		page=0;
		SetPage(page,page);
		SetAddress(0,0);
		/*for (i=0;i<61;i++)
		{
			Both_Write_Data(0xFF);
		}*/
		printstr(0,"Hello");
		page=1;
		SetPage(page,page);
		SetAddress(0,0);
		printstr(0,"world!");
		
		page=2;
		SetPage(page,page);
		SetAddress(0,0);
		printstr(0,"are you?");
    while(1)
    {
		
	}
}

關(guān)閉窗口

相關(guān)文章

主站蜘蛛池模板: 午夜影院在线免费观看视频 | 毛片综合 | 99精品一区二区三区 | 日韩av福利在线观看 | 国产观看| 精品国产鲁一鲁一区二区张丽 | 在线看av网址| 97人人超碰| 久久久中文 | 在线成人av | 成人小视频在线观看 | 亚洲视频一区二区三区 | 日日日操 | 在线中文字幕亚洲 | 欧美区在线观看 | 日韩欧美不卡 | 久久成人亚洲 | 久久草在线视频 | 国际精品鲁一鲁一区二区小说 | 91久久久精品国产一区二区蜜臀 | 国产91在线播放 | 91不卡在线| 国产免费一区 | 日本久久一区 | 日韩三级电影在线看 | 久久新| 国产日韩欧美另类 | 青青久在线视频 | 亚洲成人av在线播放 | 久久国产区 | 成人国产精品一级毛片视频毛片 | 国产精品久久久久久久久久久免费看 | 三级免费av | 欧美日韩亚洲一区 | 免费人成在线观看网站 | 欧美日本一区二区 | 久久新视频 | 又爽又黄axxx片免费观看 | 福利av在线| 97精品一区二区 | 久久亚洲国产 |