⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 液晶12864(st7920控制器)msp430f149驱动.c

📁 lcd19264显示的驱动程序。采用KEIL C51编写。
💻 C
字号:
//液晶12864(st7920控制器)msp430f149驱动 


//    作者:[清风徐徐]
// =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  = //
//名称:带字库液晶显示模块12864(st7920控制器)msp430f149驱动程序//
//适用:在济南清风电子购买的12864k液晶模块和所有7920驱动器的液晶模块//
//作者:徐世龙(网名:清风徐徐)//
//QQ:78779514//
//email:xsl88888@tom.comjnqfdz@yeah.net//
//web:http://www.qfmcu.com清风单片机(作者主页)//
//更多的原创程序和资料尽在[清风单片机]//
//时间:2004年3月//
//声明:1。软件版权归作者所有,转载请保留所有信息,用于商业用途,请联系作者//
//2。程序问题请到http://www.mcubbs.net(单片机技术论坛)寻求技术支持//
// =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  = //
// =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  = //
//mcumsp430f149//
//晶振内部dco//
//p43rs//
//p42r/w//
//p41e//
//p40rst//
//p30-p37db//
// =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  =  = //

#include

/*************************/
#define UCHAR unsigned char
#define UNIT  unsigned int
#define ULONG unsigned long

UCHAR busy,hang,lie;

/********************************/
//定义字符串数组*/
/********************************/
char STR2[] = "http://www.qfmcu.com";
char STR3[] = "http://www.mcubbs.net";

/**************************定义函数原型********************************/
void Delayus( ULONG ilinshi);	/*延时函数*/
void BUSYLOOP();				//*判忙函数*//
void Write_command( UCHAR CMD, UCHAR bb);	//*发控制字函数*//
void Write_data( UCHAR CMD);				//*发数据函数*//
void CHUSHIHUA();	//*初始化函数*//
void CLEAR();		//*清屏*//
void Display( UCHAR *ptr, UCHAR ddram);		//**显字符串函数**//


/*********************************************延时
**************************************/
//void Delayus( ULONG t)
//{ ULONG i,j;
//for(i = 0;i//for(j = 0;j//;
//}

void Delayus( ULONG ilinshi)
{ 
	ULONG ii;
	for(ii = 0; ii < ilinshi; ii++);
}
//*********************判忙函数************************//
void BUSYLOOP()
{
	//P1 = 0x0ff;
	//do{
	//P4OUT& = 0xf7;//RS = 0;
	//P4OUT| = 0x04;//RW = 1;
	//P4OUT| = 0x02;//E = 1;
	//busy = P3IN;//BUSY = P1;
	//P4OUT& = 0xfd;//E = 0;
	//}
	//while(busy>0x7f);
	Delayus(10);
}
//*********************写控制字函数****************************//
void Write_command( UCHAR CMD, UCHAR bb)
{
	if(bb){
		BUSYLOOP();
	}
	P4OUT &= 0xf7;//RS = 0;
	P4OUT &= 0xfb;//RW = 0;
	P4OUT |= 0x02;//E = 1;
	P3OUT = CMD;//P1 = CMD;
	Delayus(10);
	P4OUT &= 0xfd;//E = 0;
}

//*********************写数据函数****************************//
void Write_data( UCHAR CMD)
{
	BUSYLOOP();
	//Delayus(1000);
	P4OUT |= 0x08;//RS = 1;
	P4OUT &= 0xfb;//RW = 0;
	P4OUT |= 0x02;//E = 1;
	P3OUT = CMD;//P1 = CMD;
	Delayus(10);
	P4OUT& = 0xfd;//E = 0;
}

/***************************清屏*************************************/
void CLEAR()
{
	P4OUT &= 0xf7;//RS = 0;
	P4OUT &= 0xfb;//RW = 0;
	P4OUT |= 0x02;//E = 1;
	P3OUT = 0x01;//P1 = 0x01;
	Delayus(10);
	P4OUT &= 0xfd;//E = 0;
}

//*************************液晶初始化********************************//
void CHUSHIHUA()
{
	Delayus(40000);
	Write_command(0x30,0);
	Delayus(1500);
	Write_command(0x30,0);
	Delayus(400);
	Write_command(0x0C,1);
	Delayus(1500);
	Write_command(0x01,1);
	Delayus(15000);
	Write_command(0x06,1);
}

//************************显示字符串********************************//
void Display( UCHAR *ptr, UCHAR ddram)
{
	UCHAR l,i1,x;
	l = 0;
	if(ddram < 0x88){	//定位行地址:第一行
		hang = 0;
	}
	else if(ddram < 0x90){	//定位行地址:第三行	
		hang = 2;
	}
	else if(ddram < 0x98){	//定位行地址:第二行
		hang = 1;
	}
	else{	//定位行地址:第四行
		hang = 3;
	}	
	lie = 0x0f & ddram;	//定位列地址
	if(lie > 0x07){
		lie = lie-0x08;
	}
	x = lie*2;
	Write_command(ddram, 0);	//定位显示起始地址
	while((ptr[l]) != "\0"){
		l++;
	}
	for(i1 = 0; i1 < l; i1++)
	{
		Write_data(ptr[i1]);	//输出单个字符
		x++;
		if(x == 0x10){
			x = 0;
			hang++;
			switch(hang)
			{
			case 0:
				Write_command(0x80,0);
				break;
			case 1:
				Write_command(0x90,0);
				break;
			case 2:
				Write_command(0x88,0);
				break;
			case 3:
				Write_command(0x98,0);
			}
			if(hang>3){
				Write_command(0x80,0);
				hang = 0;
			}
		}
	}
}

/**************************主函数开始***********************************/
main()
{
	WDTCTL = WDTPW+WDTHOLD;//停止看门狗
	DCOCTL = 0XE0;//初始化时钟
	BCSCTL1 = 0X86;
	BCSCTL2 = 0X00;
	P3DIR = 0xff;
	P3OUT = 0x00;
	P4DIR = 0x0f;
	P4OUT = 0x00;
	////////////////////////////////
	CLEAR();
	CHUSHIHUA();//初始化函数//
	Display(STR2,0x80);//上面一行显示一个预定字符串
	Display(STR3,0x88);
	Delayus(200);
	Write_command(0x9C,0);//将光标移到0x9C
	Write_command(0x0f,0);//光标处反白闪烁
	
	//write_command(0x08,0);//进入睡眠状态
	//delayus(200);
	//write_command(0x0C,0);//唤醒
	
	while(1)
	{;}
}
/*************************主函数结束*************************************/ 


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -