新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > PIC16F917 NOKIA5110液晶測(cè)試程序

        PIC16F917 NOKIA5110液晶測(cè)試程序

        作者: 時(shí)間:2016-11-18 來源:網(wǎng)絡(luò) 收藏

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

        /*************PIC16F917單片機(jī)程序******************************/
        /*****File Function : LCD NOKIA5110測(cè)試程序*****/
        /*****Program Author : ZhengWen(ClimberWin) *****/
        /*****MCU : PIC16F917 內(nèi)部晶振 *****/
        /*****Compile Date : 2010/08/18 *****/
        /*****Edition Info : V1.0 *****/
        /*****************************************************************/
        //
        //引腳定義:PORTD=8LED,KEY=RB0(INT) RA5(AN4)作為AD輸入
        /*修改日期: */

        /************************************/
        #include
        #include "english_6x8_pixel.h"
        #define uchar unsigned char
        #define uint unsigned int
        void Init(void); //初始化子程序
        void LCD_init(void); //LCD初始化程序
        void LCD_clear(void);
        void LCD_write_english_string(unsigned char X,unsigned char Y,const char *s);
        void LCD_write_byte(unsigned char data, unsigned char command);
        void delayms(unsigned int count);

        #define KEY RB0
        #define SPI_CLK RD0
        #define SPI_MOSI RD1
        #define LCD_DC RD2
        #define LCD_CE RD3
        #define LCD_RST RD4
        /***********************************************/

        const unsigned char mask_table[8]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};

        /*********************************************/
        void delayms(unsigned int count)
        {
        uint i,j;
        for(i=0;ifor(j=0;j<120;j++);
        }
        /*********************************************/
        void Init(void)
        {
        PORTA = 0B00000000;
        PORTB = 0B00000000;
        PORTD = 0B00000000;

        TRISA = 0B00100010;//設(shè)置RA5(AN4) RA1作為輸入
        TRISB = 0B00100001;//設(shè)置RB0為輸入,作為按鍵口
        TRISD = 0B00000000;//設(shè)置PORTD口為輸出,作為LCD/LED顯示口
        RD5=1;//關(guān)閉LED
        RD6=1;
        RD7=1;
        LCD_init(); //初始化液晶

        }

        void LCD_init(void)
        {
        LCD_RST=0; //LCD復(fù)位
        NOP();
        LCD_RST=1;

        LCD_CE=0 ;// 關(guān)閉LCD
        NOP();
        LCD_CE=1;// 使能LCD
        NOP();

        LCD_write_byte(0x21, 0);// 使用擴(kuò)展命令設(shè)置LCD模式
        LCD_write_byte(0xc8, 0);// 設(shè)置偏置電壓
        LCD_write_byte(0x06, 0);// 溫度校正
        LCD_write_byte(0x13, 0);// 1:48
        LCD_write_byte(0x20, 0);// 使用基本命令
        LCD_clear(); // 清屏
        LCD_write_byte(0x0c, 0);// 設(shè)定顯示模式,正常顯示

        LCD_CE=0 ; // 關(guān)閉LCD
        }

        /////////LCD清屏程序/////////////
        void LCD_clear(void)
        {
        uint i;
        LCD_write_byte(0x0c, 0);
        LCD_write_byte(0x80, 0);
        for (i=0; i<504; i++)
        LCD_write_byte(0x00, 1);//清零
        }

        ///////////設(shè)置LCD坐標(biāo)///////////////////
        void LCD_set_XY(unsigned char X, unsigned char Y)
        {
        LCD_write_byte(0x40 | Y, 0);
        LCD_write_byte(0x80 | X, 0);
        }

        ////////////////字符顯示程序/////////////////////
        void LCD_write_char(unsigned char c)
        {
        uint line;
        c=c-32;
        for (line=0; line<6; line++)
        LCD_write_byte( font6x8[c][line], 1);
        }


        /////////////////打印字符串/////////////////////////
        void LCD_write_english_string(unsigned char X,unsigned char Y, const unsigned char *s)
        {
        uchar i = 0;
        LCD_set_XY(X,Y);
        while(*s) {LCD_write_char(*s++);}
        }


        ////////////寫數(shù)據(jù)到LCD//////////////////////
        void LCD_write_byte(unsigned char data, unsigned char command)
        {
        uchar i;
        LCD_CE=0 ; // 使能LCD

        if (command == 0)
        {LCD_DC=0 ;} // 傳送命令
        else
        {LCD_DC=1 ;} // 傳送數(shù)據(jù)

        for(i=0;i<8;i++)
        {
        if(data&mask_table[i])
        {SPI_MOSI=1;}
        else
        {SPI_MOSI=0;}
        SPI_CLK=0;
        NOP();
        SPI_CLK=1;
        }

        LCD_CE=1 ;// 關(guān)閉LCD
        }


        ////////////主程序/////////////////////////
        void main (void)
        {
        Init();//初始化程序
        LCD_clear(); //LCD清屏
        delayms(1000);
        LCD_write_english_string(0,0,"Nokia5110 LCD" );
        LCD_write_english_string(0,1,"MCU:PIC16F917" );
        LCD_write_english_string(0,2,"Version: V1.0" );
        LCD_write_english_string(0,3,"Test OK! " );
        LCD_write_english_string(0,4,"By ClimberWin" );
        LCD_write_english_string(0,5,"2010.08.18 " );

        while(1);

        }



        評(píng)論


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

        關(guān)閉
        主站蜘蛛池模板: 盱眙县| 永登县| 高阳县| 蓬溪县| 龙南县| 石嘴山市| 莫力| 行唐县| 镇赉县| 吴旗县| 临泉县| 巫山县| 阿拉善左旗| 出国| 雅江县| 都江堰市| 沾益县| 清新县| 龙川县| 濮阳县| 叙永县| 安庆市| 济宁市| 舒兰市| 凤台县| 石泉县| 合川市| 兴山县| 白城市| 彭山县| 双城市| 广汉市| 开鲁县| 凤凰县| 左权县| 中江县| 仁寿县| 兴海县| 太湖县| 隆德县| 突泉县|