|
液晶控制器HD61202中文使用手册<table class=ubb cellspacing=0><TR><td class=ubb></td></TR><TR><td class=ubb></td></TR><TR><td class=ubb><br /><img src="http://www.laogu.com/Script/download.gif"> 下载地址一:<br /><a href="http://soft.laogu.com/download/hd61202new.pdf " target=_blank>http://soft.laogu.com/download/hd61202new.pdf </a><br /><br /><br /></td></TR></table><br /><br /><br /><br /><img src="https://bbs.21ic.com/upfiles/img/20075/200751618558472.gif"><br /><br /><br /> <br /> <font color=#FF0040>KS0108 → </font> <font color=#0040FF> </font><font color=#0040FF>http://www.laogu.com/wz_1282.htm</font><br /><br /><table class=ubb cellspacing=0><TR><td class=ubb><H3>MSP430与12864连接驱动程序(KS0108)</H3></td></TR><TR><td class=ubb>发布时间:2006年3月13日 点击次数:1211 </td></TR><TR><td class=ubb>来源: </td></TR><TR><td class=ubb>作者:</td></TR><TR><td class=ubb>详细内容: </td></TR></table><table class=ubb cellspacing=0><TR><td class=ubb> </td></TR><TR><td class=ubb><br />#include "msp430x14x.h" // Standard Equations<br />#include "math.h"<br />#include "stdlib.h"<br />#include "stdio.h"<br />#include "string.h"<br />#include "ctype.h"<br />#include "HZTable.h"<br />#include "ASCII816.h"<br />#define uint unsigned int<br />#define uchar unsigned char<br />//**********************************************<br />#define RS BIT0<br />#define RW BIT1<br />#define E BIT2<br />#define CS1 BIT3<br />#define CS2 BIT4<br />#define RST BIT5<br />#define EL BIT6 //背光<br />//数据线:p4口 ,控制线: p5口<br />//**********************************************<br />uchar cradd1,cradd2;<br /> uchar item1[5]={0,1,2,3,50}; //欢迎使用<br /> uchar item2[5]={4,5,6,7,50}; //请等待……<br />//=======================================================<br />void short_delay(uint i)<br /> { uint j;<br /> for(j=0;j<=i;j++);<br /> }<br />void delayms(uchar tickms)<br /> { uchar count,i;<br /> _NOP(); <br /> _NOP(); <br /> _NOP();<br /> for(i=tickms;i>0;i--)<br /> { for(count=0;count<=58;count++) {;}<br /> _NOP();<br /> }<br /> }<br />//**************************************************<br />void prl0(uchar com1)// 写指令代码子程序(左)<br />{ <br /> P5DIR =0X7F; //P5为输出口<br /> P5OUT =CS1; //csa=1 <br /> P5OUT&=~CS2; //csb=0<br /> P5OUT&=~RS; <br /> P5OUT =RW; //RS=0,R/W=1,以便读液晶状态<br /> P4DIR=0x00; //P4口为输入口<br /> do<br /> {<br /> P5OUT =E; //E=1<br /> cradd1=P4IN;<br /> P5OUT&=~E; //E=0 <br /> }<br /> while((cradd1&0x80)!=0);<br /> P5OUT&=~RW; //rw=0<br /> P4DIR=0xff; //P4口为输出口<br /> P4OUT=com1;<br /> P5OUT =E; //E=1<br /> P5OUT&=~E; //E=0 <br />}<br />//**************************************************<br />void prl1(uchar dat1)// 写显示数据子程序(左)<br />{ <br /> P5DIR =0X7F; //P5为输出口<br /> P5OUT =CS1; //csa=1 <br /> P5OUT&=~CS2; //csb=0<br /> P5OUT&=~RS; <br /> P5OUT =RW; //RS=0,R/W=1,以便读液晶状态<br /> P4DIR=0x00; //P4口为输入口<br /> do<br /> {<br /> P5OUT =E; //E=1<br /> cradd1=P4IN;<br /> P5OUT&=~E; //E=0 <br /> }<br /> while((cradd1&0x80)!=0);<br /> P5OUT =RS; //rs=1 <br /> P5OUT&=~RW; //rw=0<br /> P4DIR=0xff; //P4口为输出口<br /> P4OUT=dat1;<br /> P5OUT =E; //E=1<br /> P5OUT&=~E; //E=0 <br /> }<br />//**************************************************<br />void prr0(uchar com2)// 写指令代码子程序(右)<br />{ <br /> P5DIR =0X7F; //P5为输出口<br /> P5OUT&=~CS1; //csa=0 <br /> P5OUT =CS2; //csb=1<br /> P5OUT&=~RS; <br /> P5OUT =RW; //RS=0,R/W=1,以便读液晶状态<br /> P4DIR=0x00; //P4口为输入口<br /> do<br /> {<br /> P5OUT =E; //E=1<br /> cradd1=P4IN;<br /> P5OUT&=~E; //E=0 <br /> }<br /> while((cradd1&0x80)!=0);<br /> P5OUT&=~RW; //rw=0<br /> P4DIR=0xff; //P4口为输出口<br /> P4OUT=com2;<br /> P5OUT =E; //E=1<br /> P5OUT&=~E; //E=0 <br />}<br />//*************************************************<br />void prr1(uchar dat2)// 写显示数据子程序(右)<br />{ <br /> P5DIR =0X7F; //P5为输出口<br /> P5OUT&=~CS1; //csa=0 <br /> P5OUT =CS2; //csb=1<br /> P5OUT&=~RS; <br /> P5OUT =RW; //RS=0,R/W=1,以便读液晶状态<br /> P4DIR=0x00; //P4口为输入口<br /> do<br /> {<br /> P5OUT =E; //E=1<br /> cradd1=P4IN;<br /> P5OUT&=~E; //E=0 <br /> }<br /> while((cradd1&0x80)!=0);<br /> P5OUT =RS; //rs=1 <br /> P5OUT&=~RW; //rw=0<br /> P4DIR=0xff; //P4口为输出口<br /> P4OUT=dat2;<br /> P5OUT =E; //E=1<br /> P5OUT&=~E; //E=0 <br />}<br />//****************************************************<br />//读显示数据子程序 (左屏)<br />//****************************************************<br />uchar ReadDatal(void)<br />{<br /> uchar Rdata;<br /> P5DIR =0X7F; //P5为输出口<br /> P5OUT =CS1; //csa=1 <br /> P5OUT&=~CS2; //csb=0<br /> P5OUT&=~RS; <br /> P5OUT =RW; //RS=0,R/W=1,以便读液晶状态<br /> P4DIR=0x00; //P4口为输入口<br /> do<br /> {<br /> P5OUT =E; //E=1<br /> cradd1=P4IN;<br /> P5OUT&=~E; //E=0 <br /> }<br /> while((cradd1&0x80)!=0);<br /> P5OUT =RS; //RS=1 <br /> //P5OUT =RW; //R/W=1<br /> P5OUT =E; //E=1<br /> Rdata=P4IN;<br /> P5OUT&=~E; //E=0 <br /> return Rdata; <br />}<br />//****************************************************<br />//读显示数据子程序 (右屏)<br />//****************************************************<br />uchar ReadDatar(void)<br />{<br /> uchar Rdata;<br /> P5DIR =0X7F; //P5为输出口<br /> P5OUT&=~CS1; //csa=0 <br /> P5OUT =CS2; //csb=1<br /> P5OUT&=~RS; <br /> P5OUT =RW; //RS=0,R/W=1,以便读液晶状态<br /> P4DIR=0x00; //P4口为输入口<br /> do<br /> {<br /> P5OUT =E; //E=1<br /> cradd1=P4IN;<br /> P5OUT&=~E; //E=0 <br /> }<br /> while((cradd1&0x80)!=0);<br /> P5OUT =RS; //RS=1 <br /> //P5OUT =RW; //R/W=1<br /> P5OUT =E; //E=1<br /> Rdata=P4IN;<br /> P5OUT&=~E; //E=0 <br /> return Rdata; <br />}<br />//**********************************************<br />//**********************************************<br />void clsr(void) //清屏 <br />{ uchar i,j;<br /> for(i=0;i<8;i++)<br /> { prl0(i 0xb8); //设置页地址<br /> prr0(i 0xb8);<br /> prl0(0x40);<br /> prr0(0x40);<br /> for(j=0;j<64;j++) //设置列地址<br /> { prl1(0x00); //写0x00 <br /> prr1(0x00);<br /> }<br /> }<br />}<br />//**********************************************<br />void allon(void) //满屏<br /> { uchar i,j;<br /> for(i=0;i<8;i++)<br /> { prl0(i 0xb8);<br /> prr0(i 0xb8);<br /> prl0(0x40);<br /> prr0(0x40);<br /> for(j=0;j<64;j++)<br /> { prl1(0xff); //写0xff<br /> prr1(0xff);<br /> }<br /> }<br /> }<br />//***********************************************<br />void stripe(void)<br /> { uchar i,j;<br /> for(i=0;i<8;i++)<br /> { prl0(i 0xb8);<br /> prr0(i 0xb8);<br /> prl0(0x40);<br /> prr0(0x40);<br /> for(j=0;j<64;j++)<br /> { prl1(0xaa);<br /> prr1(0xaa); // 写0xaa<br /> }<br /> }<br /> }<br />//***********************************************<br />void stripe1(void)<br />{ uchar i,j;<br /> for(i=0;i<8;i++)<br /> { prl0(i 0xb8);<br /> prr0(i 0xb8);<br /> prl0(0x40);<br /> prr0(0x40);<br /> for(j=0;j<64;j++)<br /> { prl1(0x55); // 写0x55<br /> prr1(0x55);<br /> }<br /> }<br />}<br />//***************************************************<br />//***************************************************<br />void hzw_pr(uchar colum2,uchar page2,uchar code2)// 写汉字 <br />//page2:页 colum2:列 code2:代码 code2=0,1,2,3……表示第几个汉字<br />{ uchar i,j,colum;<br /> uchar *hzp; <br /> uchar flag;<br /> hzp=&HZTable[code2][0]; <br /> for(j=0;j<2;j++)<br /> { prl0(page2 0xb8); //页<br /> prr0(page2 0xb8);<br /> colum=colum2;<br /> if(colum2>63) //右屏<br /> { colum=colum-64;<br /> prr0(colum 0x40); <br /> flag=1;<br /> }<br /> else //左屏<br /> {prl0(colum 0x40);<br /> flag=0;<br /> }<br /> //*********************<br /> for(i=0;i<16;i++)<br /> { <br /> if(flag==0)<br /> {<br /> prl1(*hzp);<br /> }<br /> else<br /> {prr1(*hzp);}<br /> hzp++;<br /> if(colum==64) //列=64<br /> {<br /> colum=0;<br /> if(flag==0)<br /> {<br /> flag=1;<br /> prr0(colum 0x40);<br /> }<br /> else{break;}<br /> }<br /> colum++;<br /> }<br /> page2++;<br /> }<br />}<br />//***********************************************<br />void w_hzstr(uchar colum4,uchar page4,uchar *str1)// 写汉字字符串 <br />{<br /> while(*str1!=50)<br /> { <br /> hzw_pr( colum4, page4,*str1) ;<br /> colum4=colum4+16;<br /> str1++;<br /> }<br />}<br />//***************************************************<br />//init_xt2; 初始化XT2 晶振为4MHZ<br />//*****************************************************<br />void init_xt2(void)<br />{<br /> unsigned int iq0;<br /> <br /> //使用XT2振荡器<br /> BCSCTL1&=~XT2OFF; //打开XT2振荡器<br /> do<br /> {<br /> IFG1 &= ~OFIFG; // 清除振荡器失效标志<br /> for (iq0 = 0xFF; iq0 > 0; iq0--); // 延时,等待XT2起振<br /> } while ((IFG1 & OFIFG) != 0); // 判断XT2是否起振<br /> BCSCTL2 =SELM_2+SELS; //选择MCLK、SMCLK为XT2,<br /> BCSCTL2 =DIVM_1; //MCLK 2分频SMCLK=MCLK=2MHZ<br />}<br />//***********************************************<br />//主程序 <br />//***********************************************<br />void main(void)<br />{ <br /> uchar a;<br /> // uchar i,j;<br /> WDTCTL=WDTPW+WDTHOLD; <br /> init_xt2();<br /> P5DIR =0X7F; //P5为输出口<br /> P5OUT&=~RST; //rst=0 <br /> delayms(10); //1ms<br /> P5OUT =RST; //rst=1<br /> P5OUT&=~EL; //EL=0 背光=0 <br /> do<br /> { <br /> prl0(0xc0);prr0(0xc0); //显示开始行<br /> prl0(0x3f);prr0(0x3f); //开显示<br /> //P5OUT&=~EL; //EL=0 背光=0 <br /> //******************************************************<br /> clsr(); // clear screen <br /> //写汉字字符串1 欢迎使用 <br /> //写汉字字符串2 请等待… <br /> w_hzstr(32,2,item1);w_hzstr(32,5,item2); <br /> delayms(100); <br /> for(a=0;a<50;a++)<br /> { delayms(100);} <br /> prl0(0xc0);prr0(0xc0);<br /><br /> clsr(); <br /> allon(); // fill screen <br /> delayms(100);<br /> for(a=0;a<25;a++)<br /> { delayms(100);}<br /> prl0(0xc0);prr0(0xc0);<br /> clsr(); // clear screen <br /> delayms(100);<br /> for(a=0;a<25;a++)<br /> { delayms(100);}<br /><br /> /* stripe screen */<br /> prl0(0xc0);prr0(0xc0);<br /> stripe();<br /> delayms(100);<br /> for(a=0;a<20;a++)<br /> { delayms(100);}<br /> prl0(0xc0);prr0(0xc0);<br /> stripe1();<br /> delayms(100);<br /> for(a=0;a<50;a++)<br /> { delayms(100);}<PRE> }while(1);<br />}</PRE><br />//****************************************************</td></TR></table>
|