📄 液晶12864(st7920控制器)msp430f149驱动.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 + -