欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: 17液晶1602顯示 [打印本頁]

作者: zhukenan    時(shí)間: 2018-1-13 20:23
標(biāo)題: 17液晶1602顯示
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint  unsigned int

//這三個(gè)引腳參考資料
sbit E=P2^7;                //1602使能引腳
sbit RW=P2^6;                //1602讀寫引腳        
sbit RS=P2^5;                //1602數(shù)據(jù)/命令選擇引腳


/********************************************************************
* 名稱 : delay()
* 功能 : 延時(shí),延時(shí)時(shí)間大概為5US。
* 輸入 : 無
* 輸出 : 無
***********************************************************************/

void delay()
{
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
}
/********************************************************************
* 名稱 : bit Busy(void)
* 功能 : 這個(gè)是一個(gè)讀狀態(tài)函數(shù),讀出函數(shù)是否處在忙狀態(tài)
* 輸入 : 輸入的命令值
* 輸出 : 無
***********************************************************************/
bit Busy(void)
{
        bit busy_flag = 0;
        RS = 0;
        RW = 1;
        E = 1;
        delay();
        busy_flag = (bit)(P0 & 0x80);
        E = 0;
        return busy_flag;
}
/********************************************************************
* 名稱 : wcmd(uchar del)
* 功能 : 1602命令函數(shù)
* 輸入 : 輸入的命令值
* 輸出 : 無
***********************************************************************/
void wcmd(uchar del)
{
        while(Busy());
        RS = 0;
        RW = 0;
        E = 0;
        delay();
        P0 = del;
        delay();
        E = 1;
        delay();
        E = 0;
}

/********************************************************************
* 名稱 : wdata(uchar del)
* 功能 : 1602寫數(shù)據(jù)函數(shù)
* 輸入 : 需要寫入1602的數(shù)據(jù)
* 輸出 : 無
***********************************************************************/

void wdata(uchar del)
{
        while(Busy());
        RS = 1;
        RW = 0;
        E = 0;
        delay();
        P0 = del;
    delay();
        E = 1;
        delay();
        E = 0;
}

/********************************************************************
* 名稱 : L1602_init()
* 功能 : 1602初始化,請(qǐng)參考1602的資料
* 輸入 : 無
* 輸出 : 無
***********************************************************************/
void L1602_init(void)
{
        wcmd(0x38);
        wcmd(0x0c);
        wcmd(0x06);
        wcmd(0x01);
}

/********************************************************************
* 名稱 : L1602_char(uchar hang,uchar lie,char sign)
* 功能 : 改變液晶中某位的值,如果要讓第一行,第五個(gè)字符顯示"b" ,調(diào)用該函數(shù)如下
                 L1602_char(1,5,'b')
* 輸入 : 行,列,需要輸入1602的數(shù)據(jù)
* 輸出 : 無
***********************************************************************/
void L1602_char(uchar hang,uchar lie,char sign)
{
        uchar a;
        if(hang == 1) a = 0x80;
        if(hang == 2) a = 0xc0;
        a = a + lie - 1;
        wcmd(a);
        wdata(sign);
}

/********************************************************************
* 名稱 : L1602_string(uchar hang,uchar lie,uchar *p)
* 功能 : 改變液晶中某位的值,如果要讓第一行,第五個(gè)字符開始顯示"ab cd ef" ,調(diào)用該函數(shù)如下
                  L1602_string(1,5,"ab cd ef;")
* 輸入 : 行,列,需要輸入1602的數(shù)據(jù)
* 輸出 : 無
***********************************************************************/
void L1602_string(uchar hang,uchar lie,uchar *p)
{
        uchar a,b=0;
        if(hang == 1) a = 0x80;
        if(hang == 2) a = 0xc0;
        a = a + lie - 1;
        while(1)
        {
                wcmd(a++);
                b++;
                if((*p == '\0')||(b==16)) break;
                wdata(*p);
                p++;
        }
}

/********************************************************************
* 名稱 : Main()
* 功能 : 主函數(shù)
* 輸入 : 無
* 輸出 : 無
***********************************************************************/
void Main()
{
        L1602_init();
        L1602_string(1,1,"   0123456789   ");
        L1602_string(2,1,"   ABCDEDGHIJ   ");
        L1602_char(2,15,'O');
        L1602_char(2,16,'K');
        while(1);        
}






歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1