久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

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

常用液晶屏LCD1602的使用

作者:佚名   來源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時間:2011年11月12日   【字體:
  /***** 把自己的一些經(jīng)驗(yàn)分享給大家 *****/
 

     LCD_1602,   學(xué)過單片機(jī)的朋友們都知道它了吧,可以說是用的最廣,最簡單,也是學(xué)液晶入門級別的一塊液晶了。LCD1602顧名思義就是兩行顯示的液晶,每行最多顯示16個字符(里面總共有160個字符),其中包括阿拉伯?dāng)?shù)字、英文字母的大小寫,常用符號,及日文的假名!每個字符對應(yīng)一個ASCII碼,我們通過向液晶送相應(yīng)符號的ASCII碼來顯示這個字符。

    總的來說這個用起來很簡單的,到網(wǎng)上下載1602的數(shù)據(jù)手冊,自己寫寫程序估計(jì)也就差不多了,我在這里主要是說說自己的對一些常見問題的經(jīng)驗(yàn),和LCD1602自定義字符的顯示方法。
 
    要顯示我們自定義的字符,就要用到LCD中的CGRAM存儲器(character generate RAM),而我們之前用的顯示自帶的字符用到的是DDRAM,兩個是不同的。看液晶手冊我們知道,CGRAM的容量是64個字節(jié),而一個字符是8個字節(jié),所以一共能顯示8個自定義的字符。內(nèi)部常用字符的顯示是從0x20開始的,0x00 ~ 0x0F是專門留給自定義字符顯示用的,0x00~0x07和0x80~0x0F顯示的內(nèi)容是一樣的,也就是說0x00=0x08,0x01=0x09,以此類推。CGRAM共128個位,地址是0x40~0x7F,128/8=16正好對應(yīng)的是0x00~0x0F共16個。
 
    下面說說如何顯示自定義字符吧。
 
    首先我們要清楚LCD1602顯示字符的點(diǎn)陣大小,眼力好的可以看出來,LCD1602一個顯示字符的位置是5*8的點(diǎn)陣,也就是說它所能顯示的點(diǎn)陣圖形的大小是5*8的!要顯示一個自定義的字符,首先我們要知道所顯示自定義字符的點(diǎn)陣數(shù)據(jù),也就是在一個5*8的點(diǎn)陣上那個點(diǎn)是黑的(將該點(diǎn)點(diǎn)黑,就是高電平 ----1),哪個點(diǎn)是白的(該點(diǎn)不顯示,為低電平----0),但是我們送入到LCD中的是ASCII碼,它是8位的數(shù)據(jù),而一個顯示字符的點(diǎn)陣大小只是5*8的,顯然不夠,顯示的辦法是8*8點(diǎn)陣的前三列不用,也就是不顯示,我們只用后面的5列來顯示。看過數(shù)據(jù)手冊我們知道,第一行第一個位置的地址是 0x80,第二行一個位置的地址是0xC0。最后就是要顯示我們定義的第幾個字符其對應(yīng)CGRAM地址的關(guān)系式是:
 
0x00:第一個(0x40)                       0x01:第二個(0x48)   
 

0x02:第三個(0x50)                       0x03:第四個(0x58)

0x04:第五個(0x60)                       0x05:第六個(0x68)    

0x06:第七個(0x70)                       0x07:第八個(0x78)

    具體的流程是這樣的:“顯示字符的數(shù)組數(shù)據(jù)”--->"定義第幾個自定義字符"--->“像地址中發(fā)送數(shù)組數(shù)據(jù)”--->“規(guī)定顯示位置”--->“顯示第幾個自定義字符”--->OK!
 

    自己想顯示什么字符或圖像可以自己計(jì)算一下對應(yīng)的數(shù)組數(shù)據(jù),最好自己弄一個取模軟件比較好,我一開始都是自己算的,感覺好麻煩。
 

/***** 下面我寫一個用51驅(qū)動LCD1602的程序 *****/

   接口方面根據(jù)自己的實(shí)際電路決定。程序的完整版本下載: http://www.zg4o1577.cn/f/1602cc.rar

/* 這里是我自己的經(jīng)驗(yàn):在數(shù)據(jù)手冊中說下降沿寫入命令,但是我用上升沿寫入也是好使的,這里我還是用下降沿吧;下面這條是重點(diǎn),自習(xí)看下你板子上的晶振大小,最好是在下程序的時候看下具體大小事多少,如果你的晶振>11.5M的話最好在下面我標(biāo)注的地方加延時,不然很可能什么都不顯示,而且找不到錯誤。 */

#include<reg52.h>

sbit RS=P2^0;
sbit RW=P2^1;
sbit EN=P2^2;//LCD的三個控制端
unsigned char table[]={0x15,0x0A,0x15,0x0A,0x15,0x0A,0x15,0x0A};

void delay(unsigned int i)
{
    while(--i);
}
void Read_busy()    //忙檢測,DB7為1則busy,不能進(jìn)行讀寫操作 ;每次讀寫前應(yīng)"讀忙"檢測
{
    P0=0x00;
    RS=0;
    RW=1;
    EN=1;
    while(P0 & 0x80);
    EN=0;
}

void write_LCD_command(unsigned char value)//寫命令函數(shù)
{
    Read_busy();
    RS=0;
    RW=0; 

    EN=1;
    P0=value;
    delay(100);
    EN=0;
}

void write_LCD_data(unsigned char value)//寫命令函數(shù)
{
    Read_busy();
    RS=1;
    RW=0; 
    EN=1;
    P0=value;
    delay(100);
    EN=0;
}

void init_LCD()
{
    write_LCD_command(0x38);

//在這里加延時

    delay(5);

    write_LCD_command(0x0c);//開顯示,不顯示光標(biāo),且不閃爍

//在這里加延時

    delay(5); 
    write_LCD_command(0x06);//每次寫入數(shù)據(jù)后地址指針加1 

//在這里加延時

    delay(5);
    write_LCD_command(0x01);//清屏

}
void main()
{
    unsigned char num;
    init_LCD();
    write_LCD_command(0x40);    //對CGRAM第一個自定義字符操作,若是第二個則為0x48,其次類推(上面有對頂?shù)年P(guān)系)
    for(num=0;num<8;num++)
    {
        write_LCD_data(table[num]);
    }
    write_LCD_command(0x80);    //規(guī)定顯示在第一行第一個位置
    write_LCD_data(0x00);         //顯示第一個自定義字符 (0x40對應(yīng)第一個:0x00)
    while(1);
}


/*到這里程序結(jié)束了,第一次寫可能說的不夠清晰,有不懂的可以留言給我^_^*/
關(guān)閉窗口

相關(guān)文章

主站蜘蛛池模板: 91精品国产91久久久久久 | 天天综合网天天综合 | 日韩在线一区二区三区 | 国产精品视频二区三区 | 久久成人一区 | 国产精品日韩欧美一区二区三区 | 国产精品自拍视频网站 | 日韩中文字幕在线不卡 | 一区二区电影网 | 欧洲在线视频 | 日韩av电影院 | 国产欧美日韩综合精品一区二区 | 日韩精品视频在线观看一区二区三区 | 日韩精品一区二区三区视频播放 | 久久国产精品一区二区三区 | 久久国产精品免费一区二区三区 | 99精品久久久国产一区二区三 | 欧美日韩综合一区 | 成人在线小视频 | 性色综合| 精品国产乱码久久久久久丨区2区 | av在线一区二区三区 | 久久69精品久久久久久国产越南 | 亚洲欧洲精品在线 | 国产98色在线 | 日韩 | 精品一区二区三区不卡 | 亚洲免费久久久 | 激情一区 | 天堂久 | 欧美专区日韩专区 | 91精品国产色综合久久不卡蜜臀 | 午夜免费福利电影 | 欧美视频 亚洲视频 | 日韩久久精品 | 亚洲精品久久久一区二区三区 | 欧美亚洲一区二区三区 | 午夜av成人| 国产精品亚洲精品 | 日本久久一区 | 日韩欧美在线一区 | 天天色天天射天天干 |