新聞中心

        EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > msp430液晶屏1602驅(qū)動(dòng)程序

        msp430液晶屏1602驅(qū)動(dòng)程序

        作者: 時(shí)間:2016-11-23 來(lái)源:網(wǎng)絡(luò) 收藏
        1602液晶顯示:

        1,16腳:地

        本文引用地址:http://www.104case.com/article/201611/320416.htm

        2,15腳:+5

        3腳:接滑動(dòng)變阻器,滑動(dòng)變阻器另一端接地

        4腳:P4.5(RS)

        5腳: P4.6 (RW)

        6腳: P4.7(E)

        7~14腳:接單片機(jī)的數(shù)據(jù)口P5(D0~D7)

        #include<msp430x14x.h>
        #define RS_HIGN P4OUT|=BIT5 //P4.5
        #define RS_LOW P4OUT&=~BIT5
        #define RW_HIGN P4OUT|=BIT6 //P4.6
        #define RW_LOW P4OUT&=~BIT6
        #define E_HIGN P4OUT|=BIT7 //P4.7
        #define E_LOW P4OUT&=~BIT7
        void LcdPos(char,char);
        void LcdWd(char);
        void LcdWc(char);
        void LcdWcn(char);
        void Delay(char);
        void WaitIdle();

        void Delay(char wDelay) //延時(shí)子程序
        {
        while(wDelay!=0)
        wDelay--;
        }

        void WriteChar(char c,char x,char y)
        {
        LcdPos(x,y);
        LcdWd(c);
        }

        void WriteString(char *s,char x,char y)
        {
        char i;
        if(*s==0)
        return;
        for(i=0;;i++)
        {
        if(*(s+i)==0)
        break;
        WriteChar(*(s+i),x,y);
        x++;
        if(x>15)
        break;
        }
        }

        void SetCur(char Para) //設(shè)置光標(biāo),顯示狀態(tài)等
        { Delay(2);
        switch(Para)
        {case 0:
        {LcdWc(0x08);
        break;}
        case 1:
        {LcdWc(0x0c);
        break;}
        case 2:
        {LcdWc(0x0e);
        break;}
        case 3:
        {LcdWc(0x0f);
        break;}
        default:
        break;
        }
        }

        void ClrLcd()
        {
        LcdWc(0x01);
        }

        void WaitIdle()
        {
        char temp;
        P5DIR &=0;
        RS_LOW;//RS=0;
        RW_HIGN;//RW=1;
        Delay(1000);
        for(;;)
        {
        E_HIGN;//E=1;
        temp=P5IN;
        E_LOW;//E=0
        temp&=0x80;
        if(temp==0)
        {P5DIR=0xff;
        break;}
        }
        }

        void LcdWd(char c) //將待寫數(shù)據(jù)送到端口
        {WaitIdle();
        P5DIR=0xff;
        RS_HIGN;//RS=1;
        RW_LOW;//RW=0;
        P5OUT=c;
        E_HIGN;//E=1;
        Delay(2000);
        E_LOW;//E=0;
        }
        void LcdWc(char c)
        {
        WaitIdle();
        LcdWcn(c);
        }
        void LcdWcn(char c ) //送控制字子程序
        { P5DIR=0xff;
        RS_LOW;//RS=0;
        RW_LOW;//RW=0;
        P5OUT=c;
        E_HIGN;//E=1;
        Delay(1000);
        E_LOW;//E=0;
        }
        void LcdPos(char x,char y) //設(shè)置光標(biāo)所在位置
        {
        unsigned char temp;
        x &=0x0f;
        y &=0x01;
        if(y==0)
        temp=x;
        else
        temp=x+0x40;
        temp |=0x80;
        LcdWc(temp);
        }
        void RstLcd()
        { Delay(10000);
        LcdWc(0x38); //顯示模式設(shè)置
        LcdWc(0x08); //顯示關(guān)閉
        LcdWc(0x01); //顯示清屏
        LcdWc(0x06); //顯示光標(biāo)移動(dòng)位置
        LcdWc(0x0c); //顯示開及光標(biāo)設(shè)置
        }

        int main()
        {
        WDTCTL=WDTPW+WDTHOLD;
        P4DIR=0xff;
        RstLcd();
        ClrLcd();
        WriteString("welcome!",4,0);
        }



        評(píng)論


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

        關(guān)閉
        主站蜘蛛池模板: 手游| 江川县| 扎赉特旗| 武功县| 沈丘县| 当涂县| 伊金霍洛旗| 台东县| 梅河口市| 湘潭县| 犍为县| 宣武区| 商都县| 平邑县| 兰考县| 宣城市| 枝江市| 贵港市| 金川县| 兴安县| 襄樊市| 高淳县| 禹城市| 阿拉善右旗| 鄂托克前旗| 保定市| 奇台县| 黎川县| 新绛县| 淄博市| 张家港市| 个旧市| 泸州市| 韶山市| 深泽县| 孟津县| 丰都县| 阿克陶县| 万载县| 罗山县| 桂平市|