MSP430与12864连接驱动程序(KS0108)

来源:本站
导读:目前正在解读《MSP430与12864连接驱动程序(KS0108)》的相关信息,《MSP430与12864连接驱动程序(KS0108)》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《MSP430与12864连接驱动程序(KS0108)》的详细说明。
简介:本文主要介绍了MSP430与12864连接驱动程序(KS0108),有源码。

#include "msp430x14x.h" // Standard Equations

#include "math.h"

#include "stdlib.h"

#include "stdio.h"

#include "string.h"

#include "ctype.h"

#include "HZTable.h"

#include "ASCII816.h"

#define uint unsigned int

#define uchar unsigned char

//**********************************************

#define RS BIT0

#define RW BIT1

#define E BIT2

#define CS1 BIT3

#define CS2 BIT4

#define RST BIT5

#define EL BIT6 //背光

//数据线:p4口 ,控制线: p5口

//**********************************************

uchar cradd1,cradd2;

uchar item1[5]={0,1,2,3,50}; //欢迎使用

uchar item2[5]={4,5,6,7,50}; //请等待……

//=======================================================

void short_delay(uint i)

{ uint j;

for(j=0;j<=i;j++);

}

void delayms(uchar tickms)

{ uchar count,i;

_NOP();

_NOP();

_NOP();

for(i=tickms;i>0;i--)

{ for(count=0;count<=58;count++) {;}

_NOP();

}

}

//**************************************************

void prl0(uchar com1)// 写指令代码子程序(左)

{

P5DIR|=0X7F; //P5为输出口

P5OUT|=CS1; //csa=1

P5OUT&=~CS2; //csb=0

P5OUT&=~RS;

P5OUT|=RW; //RS=0,R/W=1,以便读液晶状态

P4DIR=0x00; //P4口为输入口

do

{

P5OUT|=E; //E=1

cradd1=P4IN;

P5OUT&=~E; //E=0

}

while((cradd1&0x80)!=0);

P5OUT&=~RW; //rw=0

P4DIR=0xff; //P4口为输出口

P4OUT=com1;

P5OUT|=E; //E=1

P5OUT&=~E; //E=0

}

//**************************************************

void prl1(uchar dat1)// 写显示数据子程序(左)

{

P5DIR|=0X7F; //P5为输出口

P5OUT|=CS1; //csa=1

P5OUT&=~CS2; //csb=0

P5OUT&=~RS;

P5OUT|=RW; //RS=0,R/W=1,以便读液晶状态

P4DIR=0x00; //P4口为输入口

do

{

P5OUT|=E; //E=1

cradd1=P4IN;

P5OUT&=~E; //E=0

}

while((cradd1&0x80)!=0);

P5OUT|=RS; //rs=1

P5OUT&=~RW; //rw=0

P4DIR=0xff; //P4口为输出口

P4OUT=dat1;

P5OUT|=E; //E=1

P5OUT&=~E; //E=0

}

//**************************************************

void prr0(uchar com2)// 写指令代码子程序(右)

{

P5DIR|=0X7F; //P5为输出口

P5OUT&=~CS1; //csa=0

P5OUT|=CS2; //csb=1

P5OUT&=~RS;

P5OUT|=RW; //RS=0,R/W=1,以便读液晶状态

P4DIR=0x00; //P4口为输入口

do

{

P5OUT|=E; //E=1

cradd1=P4IN;

P5OUT&=~E; //E=0

}

while((cradd1&0x80)!=0);

P5OUT&=~RW; //rw=0

P4DIR=0xff; //P4口为输出口

P4OUT=com2;

P5OUT|=E; //E=1

P5OUT&=~E; //E=0

}

//*************************************************

void prr1(uchar dat2)// 写显示数据子程序(右)

{

P5DIR|=0X7F; //P5为输出口

P5OUT&=~CS1; //csa=0

P5OUT|=CS2; //csb=1

P5OUT&=~RS;

P5OUT|=RW; //RS=0,R/W=1,以便读液晶状态

P4DIR=0x00; //P4口为输入口

do

{

P5OUT|=E; //E=1

cradd1=P4IN;

P5OUT&=~E; //E=0

}

while((cradd1&0x80)!=0);

P5OUT|=RS; //rs=1

P5OUT&=~RW; //rw=0

P4DIR=0xff; //P4口为输出口

P4OUT=dat2;

P5OUT|=E; //E=1

P5OUT&=~E; //E=0

}

//****************************************************

//读显示数据子程序 (左屏)

//****************************************************

uchar ReadDatal(void)

{

uchar Rdata;

P5DIR|=0X7F; //P5为输出口

P5OUT|=CS1; //csa=1

P5OUT&=~CS2; //csb=0

P5OUT&=~RS;

P5OUT|=RW; //RS=0,R/W=1,以便读液晶状态

P4DIR=0x00; //P4口为输入口

do

{

P5OUT|=E; //E=1

cradd1=P4IN;

P5OUT&=~E; //E=0

}

while((cradd1&0x80)!=0);

P5OUT|=RS; //RS=1

//P5OUT|=RW; //R/W=1

P5OUT|=E; //E=1

Rdata=P4IN;

P5OUT&=~E; //E=0

return Rdata;

}

//****************************************************

//读显示数据子程序 (右屏)

//****************************************************

uchar ReadDatar(void)

{

uchar Rdata;

P5DIR|=0X7F; //P5为输出口

P5OUT&=~CS1; //csa=0

P5OUT|=CS2; //csb=1

P5OUT&=~RS;

P5OUT|=RW; //RS=0,R/W=1,以便读液晶状态

P4DIR=0x00; //P4口为输入口

do

{

P5OUT|=E; //E=1

cradd1=P4IN;

P5OUT&=~E; //E=0

}

while((cradd1&0x80)!=0);

P5OUT|=RS; //RS=1

//P5OUT|=RW; //R/W=1

P5OUT|=E; //E=1

Rdata=P4IN;

P5OUT&=~E; //E=0

return Rdata;

}

//**********************************************

//**********************************************

void clsr(void) //清屏

{ uchar i,j;

for(i=0;i<8;i++)

{ prl0(i|0xb8); //设置页地址

prr0(i|0xb8);

prl0(0x40);

prr0(0x40);

for(j=0;j<64;j++) //设置列地址

{ prl1(0x00); //写0x00

prr1(0x00);

}

}

}

//**********************************************

void allon(void) //满屏

{ uchar i,j;

for(i=0;i<8;i++)

{ prl0(i|0xb8);

prr0(i|0xb8);

prl0(0x40);

prr0(0x40);

for(j=0;j<64;j++)

{ prl1(0xff); //写0xff

prr1(0xff);

}

}

}

//***********************************************

void stripe(void)

{ uchar i,j;

for(i=0;i<8;i++)

{ prl0(i|0xb8);

prr0(i|0xb8);

prl0(0x40);

prr0(0x40);

for(j=0;j<64;j++)

{ prl1(0xaa);

prr1(0xaa); // 写0xaa

}

}

}

//***********************************************

void stripe1(void)

{ uchar i,j;

for(i=0;i<8;i++)

{ prl0(i|0xb8);

prr0(i|0xb8);

prl0(0x40);

prr0(0x40);

for(j=0;j<64;j++)

{ prl1(0x55); // 写0x55

prr1(0x55);

}

}

}

//***************************************************

//***************************************************

void hzw_pr(uchar colum2,uchar page2,uchar code2)// 写汉字

//page2:页 colum2:列 code2:代码 code2=0,1,2,3……表示第几个汉字

{ uchar i,j,colum;

uchar *hzp;

uchar flag;

hzp=&HZTable[code2][0];

for(j=0;j<2;j++)

{ prl0(page2|0xb8); //页

prr0(page2|0xb8);

colum=colum2;

if(colum2>63) //右屏

{ colum=colum-64;

prr0(colum|0x40);

flag=1;

}

else //左屏

{prl0(colum|0x40);

flag=0;

}

//*********************

for(i=0;i<16;i++)

{

if(flag==0)

{

prl1(*hzp);

}

else

{prr1(*hzp);}

hzp++;

if(colum==64) //列=64

{

colum=0;

if(flag==0)

{

flag=1;

prr0(colum|0x40);

}

else{break;}

}

colum++;

}

page2++;

}

}

//***********************************************

void w_hzstr(uchar colum4,uchar page4,uchar *str1)// 写汉字字符串

{

while(*str1!=50)

{

hzw_pr( colum4, page4,*str1) ;

colum4=colum4+16;

str1++;

}

}

//***************************************************

//init_xt2; 初始化XT2 晶振为4MHZ

//*****************************************************

void init_xt2(void)

{

unsigned int iq0;

//使用XT2振荡器

BCSCTL1&=~XT2OFF; //打开XT2振荡器

do

{

IFG1 &= ~OFIFG; // 清除振荡器失效标志

for (iq0 = 0xFF; iq0 > 0; iq0--); // 延时,等待XT2起振

} while ((IFG1 & OFIFG) != 0); // 判断XT2是否起振

BCSCTL2 =SELM_2+SELS; //选择MCLK、SMCLK为XT2,

BCSCTL2 |=DIVM_1; //MCLK 2分频SMCLK=MCLK=2MHZ

}

//***********************************************

//主程序

//***********************************************

void main(void)

{

uchar a;

// uchar i,j;

WDTCTL=WDTPW+WDTHOLD;

init_xt2();

P5DIR|=0X7F; //P5为输出口

P5OUT&=~RST; //rst=0

delayms(10); //1ms

P5OUT|=RST; //rst=1

P5OUT&=~EL; //EL=0 背光=0

do

{

prl0(0xc0);prr0(0xc0); //显示开始行

prl0(0x3f);prr0(0x3f); //开显示

//P5OUT&=~EL; //EL=0 背光=0

//******************************************************

clsr(); // clear screen

//写汉字字符串1 欢迎使用

//写汉字字符串2 请等待…

w_hzstr(32,2,item1);w_hzstr(32,5,item2);

delayms(100);

for(a=0;a<50;a++)

{ delayms(100);}

prl0(0xc0);prr0(0xc0);

clsr();

allon(); // fill screen

delayms(100);

for(a=0;a<25;a++)

{ delayms(100);}

prl0(0xc0);prr0(0xc0);

clsr(); // clear screen

delayms(100);

for(a=0;a<25;a++)

{ delayms(100);}

/* stripe screen */

prl0(0xc0);prr0(0xc0);

stripe();

delayms(100);

for(a=0;a<20;a++)

{ delayms(100);}

prl0(0xc0);prr0(0xc0);

stripe1();

delayms(100);

for(a=0;a<50;a++)

{ delayms(100);}

 }while(1);

}

//****************************************************

提醒:《MSP430与12864连接驱动程序(KS0108)》最后刷新时间 2024-03-14 01:07:58,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《MSP430与12864连接驱动程序(KS0108)》该内容的真实性请自行鉴别。