專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

PIC單片機(jī)驅(qū)動(dòng)LCD1602液晶顯示字符串程序

作者:huqin   來(lái)源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2014年03月31日   【字體:

/***************************************************************************
*** 功能:LCD1602的使用
*** 實(shí)驗(yàn)內(nèi)容:LCD顯示本站網(wǎng)址和電話
*** 開發(fā)板連接方法: 調(diào)節(jié)1602電位器,使LCD對(duì)比度最好,裝1602時(shí)不要裝錯(cuò)了,否測(cè)會(huì)燒掉。
***************************************************************************/
#include<pic.h>

__CONFIG(0xFF32);
//芯片配置字,看門狗關(guān),上電延時(shí)開,掉電檢測(cè)關(guān),低壓編程關(guān),加密,4M晶體HS振蕩

//LCD控制線宏定義
#define rs RA5      
#define rw RA4
#define e  RA3
              
//顯示公司web地址
char web[ ] = {"***.*********.***"};

//顯示公司電話號(hào)碼
char tel[ ] = {"    110    " };

void init();                   //申明I/O口初始化函數(shù)
void lcd_init();               //申明LCD初始化函數(shù)
void write(char x);            //申明顯示1字節(jié)數(shù)據(jù)函數(shù)
void lcd_enable();             //申明LCD顯示設(shè)置函數(shù)
void delay();                  //申明延時(shí)函數(shù)
void writelcd(char *pt);           //聲明LCD寫字符串函數(shù)

/****************************************************************************
* 名    稱:main()
* 功    能:主函數(shù)
* 入口參數(shù):
* 出口參數(shù):
* 說(shuō)    明:
* 備    注:
****************************************************************************/
void main()
{
        init();                //調(diào)用I/O口初始化函數(shù)
        lcd_init();            //調(diào)用LCD初始化函數(shù)      
        while (1)
        {
                writelcd(web);                        //調(diào)用顯示公司web地址函數(shù)
        PORTD = 0XC0;           //設(shè)置第2行顯示地址
                lcd_enable();                  //調(diào)用LCD顯示設(shè)置函數(shù)
                writelcd(tel);                        //調(diào)用顯示公司tel函數(shù)
        }
}

/****************************************************************************
* 名    稱:init()
* 功    能:I/O口初始化
* 入口參數(shù):
* 出口參數(shù):
* 說(shuō)    明:
* 備    注:
****************************************************************************/
void init()
{
        ADCON1 = 0X07;               //設(shè)置A口為普通I/O口
     RA1=1;
        TRISA = 0X00;                //設(shè)置A口為輸出
        TRISD = 0X00;                //設(shè)置D口為輸出
}

/****************************************************************************
* 名    稱:lcd_init()
* 功    能:LCD初始化
* 入口參數(shù):
* 出口參數(shù):
* 說(shuō)    明:
* 備    注:
****************************************************************************/
void lcd_init()
{
        PORTD = 0X1;                 //清除顯示
        lcd_enable();
        PORTD = 0X38;                //8位2行5*7點(diǎn)陣
        lcd_enable();
        PORTD = 0X0e;                //顯示開,光標(biāo)開,閃爍
        lcd_enable();
        PORTD = 0X06;                //文字不動(dòng),光標(biāo)右移
        lcd_enable();
        PORTD = 0X80;                //公司web顯示地址
        lcd_enable();
}

/****************************************************************************
* 名    稱:write()
* 功    能:寫一個(gè)字節(jié)數(shù)據(jù)到LCD
* 入口參數(shù):char x 字符
* 出口參數(shù):
* 說(shuō)    明:
* 備    注:
****************************************************************************/
void write(char x)
{
        PORTD = x;                   //待顯示數(shù)據(jù)送PORTD口
        rs = 1;                      //該字節(jié)數(shù)據(jù)為數(shù)據(jù),而不是命令
        rw = 0;                      //此次操作為寫,而不是讀
        e = 0;                       //拉低使能信號(hào)
        delay();                            //保持使能信號(hào)為低一段時(shí)間
        e = 1;                       //拉高使能信號(hào),建立LCD操作所需要的上升沿
}

/****************************************************************************
* 名    稱:lcd_enable()
* 功    能:LCD顯示設(shè)置
* 入口參數(shù):
* 出口參數(shù):
* 說(shuō)    明:
* 備    注:
****************************************************************************/
void lcd_enable()
{
        rs = 0;                     //該字節(jié)數(shù)據(jù)為命令,而不是數(shù)據(jù)
        rw = 0;                     //此次操作為寫,而不是讀
        e = 0;                      //拉低使能信號(hào)
        delay();                          //保持使能信號(hào)為低一段時(shí)間
        e = 1;                      //拉高使能信號(hào),建立LCD操作所需要的上升沿
}

/****************************************************************************
* 名    稱:delay()
* 功    能:延時(shí)
* 入口參數(shù):
* 出口參數(shù):
* 說(shuō)    明:
* 備    注:
****************************************************************************/
void delay()
{
        int i;
        for (i = 0;i < 5000;i++);
}

/****************************************************************************
* 名    稱: writelcd()
* 功    能: 在LCD上顯示字符串
* 入口參數(shù):char *pt 字符串的首地址
* 出口參數(shù):
* 說(shuō)    明:
* 備    注:
****************************************************************************/
void writelcd(char *pt)
{
    while(*pt)
        write(*pt++);
}

關(guān)閉窗口

相關(guān)文章