在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 基于MSP430F149的KS0108(LCD)驅(qū)動程序

            基于MSP430F149的KS0108(LCD)驅(qū)動程序

            作者: 時間:2016-11-13 來源:網(wǎng)絡(luò) 收藏
            //MSP43012864連接驅(qū)動程序(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 //背光*/

            本文引用地址:http://www.biyoush.com/article/201611/316436.htm

            #define RS 0x01//寄存器選擇信號(0--Command, 1--data) ks0108()
            #define RW 0x02//讀/寫選擇信號
            #define E 0x04//使能信號
            #define CS1 0x02// 左屏
            #define CS2 0x04// 右屏
            #define RST 0x01

            //數(shù)據(jù)線:p4口 ,控制線: p5口
            //**********************************************
            uchar cradd1,cradd2;

            uchar item1[5]={0,1,2,3,50}; //歡迎使用
            uchar item2[5]={4,5,6,7,50}; //請等待……

            unsigned char hzbei[32]={
            0x04,0x04,0x04,0xE4,0x24,0x24,0x25,0x26,0x24,0x24,0x24,0xE4,0x04,0x06,0x04,0x00,
            0x00,0x40,0x20,0x13,0x1A,0x42,0x82,0x7E,0x02,0x02,0x0A,0x13,0x30,0x60,0x00,0x00
            };

            //=======================================================
            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)// 寫指令代碼子程序(左)
            {
            P3DIR =0X7F; //P3為輸出口
            P1DIR =0X7F; //P3為輸出口
            P1OUT |=CS1; //csa=1
            P1OUT&=~CS2; //csb=0
            P3OUT&=~RS;
            P3OUT |=RW; //RS=0,R/W=1,以便讀液晶狀態(tài)
            P2DIR=0x00; //P2口為輸入口
            do
            {
            P3OUT |= E; //E=1
            cradd1=P2IN;
            P3OUT&=~E; //E=0
            }
            while((cradd1&0x80)!=0);
            P3OUT&=~RW; //rw=0
            P2DIR=0xff; //P2口為輸出口
            P2OUT=com1;
            P3OUT |=E; //E=1
            P3OUT&=~E; //E=0
            }
            //**************************************************
            void prl1(uchar dat1)// 寫顯示數(shù)據(jù)子程序(左)
            {
            P3DIR =0X7F; //P3為輸出口
            P1DIR =0X7F; //P3為輸出口
            P1OUT |=CS1; //csa=1
            P1OUT&=~CS2; //csb=0
            P3OUT&=~RS;
            P3OUT |=RW; //RS=0,R/W=1,以便讀液晶狀態(tài)
            P2DIR=0x00; //P2口為輸入口
            do
            {
            P3OUT |=E; //E=1
            cradd1=P2IN;
            P3OUT&=~E; //E=0
            }
            while((cradd1&0x80)!=0);
            P3OUT |=RS; //rs=1
            P3OUT&=~RW; //rw=0
            P2DIR=0xff; //P2口為輸出口
            P2OUT=dat1;
            P3OUT|=E; //E=1
            P3OUT&=~E; //E=0
            }
            //**************************************************
            void prr0(uchar com2)// 寫指令代碼子程序(右)
            {
            P3DIR =0X7F; //P3為輸出口
            P1DIR =0X7F; //P3為輸出口
            P1OUT&=~CS1; //csa=0
            P1OUT |=CS2; //csb=1
            P3OUT&=~RS;
            P3OUT |=RW; //RS=0,R/W=1,以便讀液晶狀態(tài)
            P2DIR=0x00; //P2口為輸入口
            do
            {
            P3OUT |= E; //E=1
            cradd1=P2IN;
            P3OUT&=~E; //E=0
            }
            while((cradd1&0x80)!=0);
            P3OUT&=~RW; //rw=0
            P2DIR=0xff; //P2口為輸出口
            P2OUT=com2;
            P3OUT |=E; //E=1
            P3OUT&=~E; //E=0
            }
            //*************************************************
            void prr1(uchar dat2)// 寫顯示數(shù)據(jù)子程序(右)
            {
            P3DIR =0X7F; //P3為輸出口
            P1DIR =0X7F; //P3為輸出口
            P1OUT&=~CS1; //csa=0
            P1OUT |=CS2; //csb=1
            P3OUT&=~RS;
            P3OUT |=RW; //RS=0,R/W=1,以便讀液晶狀態(tài)
            P2DIR=0x00; //P2口為輸入口
            do
            {
            P3OUT |=E; //E=1
            cradd1=P2IN;
            P3OUT&=~E; //E=0
            }
            while((cradd1&0x80)!=0);
            P3OUT |=RS; //rs=1
            P3OUT&=~RW; //rw=0
            P2DIR=0xff; //P2口為輸出口
            P2OUT=dat2;
            P3OUT |=E; //E=1
            P3OUT&=~E; //E=0
            }
            //****************************************************
            //讀顯示數(shù)據(jù)子程序 (左屏)
            //****************************************************
            uchar ReadDatal(void)
            {
            uchar Rdata;
            P3DIR =0X7F; //P3為輸出口
            P1DIR =0X7F; //P3為輸出口
            P1OUT |=CS1; //csa=1
            P1OUT&=~CS2; //csb=0
            P3OUT&=~RS;
            P3OUT |=RW; //RS=0,R/W=1,以便讀液晶狀態(tài)
            P2DIR=0x00; //P2口為輸入口
            do
            {
            P3OUT |=E; //E=1
            cradd1=P2IN;
            P3OUT&=~E; //E=0
            }
            while((cradd1&0x80)!=0);

            P3OUT |=RS; //RS=1
            //P3OUT =RW; //R/W=1
            P3OUT |=E; //E=1
            Rdata=P2IN;
            P3OUT&=~E; //E=0
            return Rdata;
            }
            //****************************************************
            //讀顯示數(shù)據(jù)子程序 (右屏)
            //****************************************************
            uchar ReadDatar(void)
            {
            uchar Rdata;
            P3DIR =0X7F; //P3為輸出口
            P1DIR =0X7F; //P3為輸出口
            P1OUT&=~CS1; //csa=0
            P1OUT |=CS2; //csb=1
            P3OUT&=~RS;
            P3OUT |=RW; //RS=0,R/W=1,以便讀液晶狀態(tài)
            P2DIR=0x00; //P2口為輸入口
            do
            {
            P3OUT |=E; //E=1
            cradd1=P2IN;
            P3OUT&=~E; //E=0
            }
            while((cradd1&0x80)!=0);

            P3OUT |=RS; //RS=1
            //P3OUT =RW; //R/W=1
            P3OUT |=E; //E=1
            Rdata=P2IN;
            P3OUT&=~E; //E=0
            return Rdata;
            }
            //**********************************************
            //**********************************************
            void clsr(void) //清屏
            { uchar i,j;
            for(i=0;i<8;i++)
            { prl0(i|0xb8); //設(shè)置頁地址
            prr0(i|0xb8);
            prl0(0x40);
            prr0(0x40);
            for(j=0;j<64;j++) //設(shè)置列地址
            { 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)// 寫漢字
            //page2:頁 colum2:列 code2:代碼 code2=0,1,2,3……表示第幾個漢字
            { uchar i,j,colum;
            uchar *hzp;

            uchar flag;

            hzp=hzbei;

            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; // 清除振蕩器失效標(biāo)志
            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 InitMcu430(void)
            {
            unsigned char ti;

            //_BIS_SR(OSCOFF); //Disable LFXT1
            BCSCTL1&=~XT2OFF; // XT2OFF=0
            //BCSCTL1|=XTS;
            BCSCTL2|=SELS+SELM1;

            do{
            IFG1&=~OFIFG; //Clear OscFault flag
            for(ti=255;ti>1;ti--);
            }while((IFG1 & OFIFG)==OFIFG);
            for(ti=255;ti>1;ti--);
            IFG1&=~OFIFG;

            //SCTL1&=~XTS;
            //BCSCTL1|=0x30; //8分頻
            BCSCTL1&=0x8F; //1分頻, ACLK=32768HZ

            /* ------------------------Setup Timer_A---------------------- */
            TACTL=0x0004; /*Timer_A控制寄存器:連續(xù)模式,輸入時鐘不分頻,時鐘源為TACLK,連續(xù)模式*/

            /* ------------------------Setup ADC12 ----------------- */

            //WDTCTL = WDTPW+0x0019; //500ms timer,MCLK

            //WDTCTL =WDT_ADLY_250; //ACLK
            //WDTCTL =WDTPW+BIT7;

            P1DIR=0x7F; //set P1 input
            P2DIR=0xFF; //set P2,P3,P5 is output
            P3DIR|=0x7F;
            P4DIR=0xFF;
            P5DIR=0xFF;

            P1SEL=0x00;
            P2SEL=0x00;
            P3SEL=0x00;
            P4SEL=0x00;
            P5SEL=0x00;
            //P6SEL=0xFF; //P6 外部模塊功能
            //P1SEL|=0x08; //P1.3 外部模塊功能

            }
            //***********************************************
            //主程序
            //***********************************************

            void main(void)
            {
            uchar a;
            // uchar i,j;
            WDTCTL=WDTPW+WDTHOLD;
            InitMcu430();
            //init_xt2();
            P1DIR =0X7F; //P3為輸出口
            //P1OUT&=~RST; //rst=0
            //delayms(50); //1ms
            //P1OUT |=RST; //rst=1
            //P3OUT&=~EL; //EL=0 背光=0

            clsr(); // clear screen
            do
            {
            prl0(0xc0);prr0(0xc0); //顯示開始行
            prl0(0x3f);prr0(0x3f); //開顯示
            //P3OUT&=~EL; //EL=0 背光=0
            //******************************************************
            clsr(); // clear screen
            //寫漢字字符串1 歡迎使用
            //寫漢字字符串2 請等待…
            //w_hzstr(32,2,item1);
            //w_hzstr(32,5,item2);
            hzw_pr(32,5);
            delayms(100);
            for(a=0;a<250;a++)
            { delayms(100);}

            delayms(100);
            for(a=0;a<250;a++)
            { delayms(100);}

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

            //stripe();
            //clsr();

            allon(); // fill screen

            delayms(100);
            for(a=0;a<250;a++)
            { delayms(100);}
            prl0(0xc0);prr0(0xc0);
            clsr(); // clear screen
            delayms(100);
            for(a=0;a<250;a++)
            { delayms(100);}


            // stripe screen
            prl0(0xc0);prr0(0xc0);
            stripe();
            delayms(100);
            for(a=0;a<250;a++)
            { delayms(100);}
            prl0(0xc0);prr0(0xc0);
            stripe1();
            delayms(100);
            for(a=0;a<250;a++)
            { delayms(100);}

            }while(1);}
            //****************************************************



            評論


            技術(shù)專區(qū)

            關(guān)閉