新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > MSP430F149與1602LCD模塊程序

        MSP430F149與1602LCD模塊程序

        作者: 時間:2016-11-13 來源:網絡 收藏
        /*****************MSP430F1491602LCD模塊程序***********************/
        /* ShangYu */
        /**************************Pins defination***************************/
        /* RS P4.4 寄存器選擇信號 H-數據寄存器?。?指令寄存器 */
        /* RW P4.5 讀寫信號   ?。?讀    ?。?寫   */
        /* E P4.6 片選信號    下降沿觸發        */
        /* DB0-DB7 P5.0-P5.7 數據線 數據傳輸             */
        /**************************over*************************************/
        #include "msp430x14x.h"
        #include "stdio.h"
        #define uchar unsigned char
        #define uint unsigned int
        uchar dis1[]="ShangYu";
        uchar dis2[]=" AnNa";
        void int_clk()
        {
        uchar i;
        BCSCTL1&=~XT2OFF; //打開XT振蕩器
        BCSCTL2|=SELM1+SELS; //MCLK為8MHz,SMCLK為8MHz
        do
        {
        IFG1&=~OFIFG; //清除振蕩錯誤標志
        for(i=0;i<100;i++)
        _NOP(); //延時等待
        }
        while((IFG1&OFIFG)!=0); //如果標志為1,則繼續循環等待
        IFG1&=~OFIFG;
        }
        void delay(int j)
        {
        int i;
        while(j--)
        {
        for(i = 0; i< 2000; i++)
        {
        _NOP();
        _NOP();
        _NOP();
        _NOP();
        }
        }
        }
        /******************* 檢查LCD忙狀態 *********************/
        /************* lcd_busy為1時,忙,等待 *****************/
        /************* lcd-busy為0時,閑,可寫指令與數據 *********/
        int lcd_busy()
        {
        int busy;
        P5DIR=0x00;
        P4OUT &=~ BIT4 ; // RS = 0
        P4OUT |= BIT5 ; // RW = 1
        P4OUT |= BIT6 ; // EN = 1
        _NOP();
        busy =P5IN&0x80;
        _NOP();
        P4OUT &=~ BIT6 ; // EN = 0
        P4OUT &=~ BIT5 ; // RW = 0
        P4OUT |= BIT4 ; // RS = 1
        P5DIR=0XFF;
        return busy;
        }
        //寫指令數據到LCD RS=L,RW=L,E=高脈沖,D0-D7=指令碼。
        void lcd_wcmd(uchar cmd)
        {
        while(lcd_busy());
        P4OUT &=~ (BIT4 + BIT5) ; // RS = 0 RW = 0
        P5OUT = cmd;
        _NOP();
        P4OUT |= BIT6 ; // E = 1
        _NOP();
        P4OUT &=~ BIT6 ;
        }
        //寫顯示數據到LCD RS=H,RW=L,E=高脈沖,D0-D7=數據。
        void lcd_wdat(uchar dat)
        {
        while(lcd_busy());
        P4OUT |= BIT4 ; // RS = 1
        P4OUT &=~ (BIT5 + BIT6) ; // RW = 0 E = 0
        P5OUT = dat;
        _NOP();
        P4OUT |= BIT6 ; // E = 1
        _NOP();
        P4OUT &=~ BIT6 ; // E = 0
        }
        void lcd_pos(uchar pos)
        {
        lcd_wcmd(pos|0x80); //數據指針=80+地址變量
        }
        void lcd_clr()
        {
        lcd_wcmd(0x01); //清除LCD的顯示內容
        delay(1);
        }
        void lcd_init()
        {
        delay(10); //等待LCD電源穩定
        lcd_wcmd(0x38); //16*2顯示,5*7點陣,8位數據
        delay(1);
        lcd_wcmd(0x38);
        delay(50);
        lcd_wcmd(0x38);
        delay(1);
        lcd_wcmd(0x0c); //顯示開,關光標
        delay(1);
        lcd_wcmd(0x06); //移動光標
        delay(1);
        lcd_wcmd(0x01); //清除LCD的顯示內容
        delay(1);
        }
        int main( void )
        {
        // Stop watchdog timer to prevent time out reset
        WDTCTL = WDTPW + WDTHOLD;
        int_clk();
        P4DIR |= BIT4 + BIT5 + BIT6 ;
        while(1)
        { int i;
        lcd_init();
        lcd_pos(0x00);
        for(i=0;i<7;i++)
        {lcd_wdat(dis1[i]);
        delay(100);
        }
        lcd_pos(0x40);
        for(i=0;i<11;i++)
        {lcd_wdat(dis2[i]);
        delay(100);
        }
        delay(1000);
        }
        }


        關鍵詞: MSP430F1491602LCD模

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 龙川县| 香港| 淳安县| 临朐县| 龙胜| 忻城县| 延边| 溧阳市| 芜湖县| 腾冲县| 白水县| 弥勒县| 柳林县| 周口市| 曲阜市| 民勤县| 扎囊县| 双流县| 威海市| 余姚市| 疏勒县| 隆子县| 东至县| 山西省| 普洱| 武陟县| 唐山市| 麻城市| 门头沟区| 县级市| 玉环县| 宜宾县| 徐水县| 逊克县| 吉首市| 县级市| 聂拉木县| 和田县| 托克托县| 法库县| 永安市|