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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1734|回復(fù): 0
收起左側(cè)

(轉(zhuǎn)載)1602數(shù)據(jù)口正接反接任意頭文件

[復(fù)制鏈接]
ID:977804 發(fā)表于 2022-2-28 14:41 | 顯示全部樓層 |閱讀模式
通常情況下,1602的數(shù)據(jù)口都是低位接芯片的低位,但有時按正常走線方式,線路交叉,可以反接,用此代碼。
代碼源網(wǎng)絡(luò)地址:amobbs

//LCD1602功能函數(shù)
// 51 @ 12MHz
//elecfun @ 2010-11-6
//使用方法: 使用前調(diào)用Init_LCD1602()初始化,顯示方法LCD1602_DispString(0, 0, "This is a test.");

#ifndef _LCD1602_
#define _LCD1602_

//#define _PORT_REV_            //如果數(shù)據(jù)端口高低位交換,請去掉此注釋

#include <intrins.h>            //包含_nop_()指令

sbit LCD1602_RS = P2^4;                //控件引腳定義,移植請修改
sbit LCD1602_RW        = P2^3;
sbit LCD1602_E        = P2^2;

#define LCD_PORT                    P1        //輸出數(shù)據(jù)總線端口定義,移植請修改

#define LCD_COMMAND                        0       // Command
#define LCD_DATA                        1       // Data
#define LCD_CLEAR_SCREEN        0x01    // 清屏
#define LCD_HOMING                  0x02    // 光標(biāo)返回原點
#define LCD_SHOW                        0x04    //顯示開
#define LCD_HIDE                        0x00    //顯示關(guān)         
#define LCD_CURSOR                        0x02         //顯示光標(biāo)
#define LCD_NO_CURSOR                0x00    //無光標(biāo)                     
#define LCD_FLASH                        0x01    //光標(biāo)閃動
#define LCD_NO_FLASH                0x00    //光標(biāo)不閃動
#define LCD_AC_UP                        0x02
#define LCD_AC_DOWN                        0x00    // default
#define LCD_MOVE                        0x01    // 畫面可平移
#define LCD_NO_MOVE                        0x00    //default

/*********************************************************************************************
函數(shù)名:8位數(shù)據(jù)高低位交叉互換
調(diào)  用:uchar = DataReverse(uchar);
參  數(shù):輸入的端口(0000 0XXX 其中XXX是設(shè)置輸入端口號,可用十進(jìn)制0~7表示,0表示P1.0,7表示P1.7)
返回值:交換后的8位數(shù)據(jù)
結(jié)  果:交換數(shù)據(jù)高低位D7→D0,D6→D1.....,D0→D7,并返回交換后的結(jié)果
備  注:
/**********************************************************************************************/
unsigned char DataReverse(unsigned char datOld)
{
    unsigned char datNew=0,i;
    for (i=0; i<8; i++)
    {
        if (datOld & (1<<i))        //如果某位為1,則或上一個1
            datNew |= (0x80>>i);
    }
    return datNew;
}
/**********************************************************************************************/

/*********************************************************************************************
函數(shù)名:LCD1602等待函數(shù)
調(diào)  用:uchar = LCD_Wait();
參  數(shù):無
返回值:LCD1602數(shù)據(jù)總線的值
結(jié)  果:等待LCD1602內(nèi)部指令執(zhí)行完成
備  注:返回結(jié)果可不用
/**********************************************************************************************/
unsigned char LCD_Wait(void)
{
        LCD1602_RS = 0;
        LCD1602_RW = 1;        _nop_();
        LCD1602_E = 1;        _nop_();

#ifdef _PORT_REV_                       //如果數(shù)據(jù)線高低位交換,則需要處理數(shù)據(jù)
    while(DataReverse(LCD_PORT)&0x80);
    LCD1602_E = 0;
    return DataReverse(LCD_PORT);
#else                                   //正常情況下不需要交換
    while(LCD_PORT&0x80);
    LCD1602_E = 0;
    return LCD_PORT;
#endif
}
/**********************************************************************************************/

/*********************************************************************************************
函數(shù)名:LCD1602數(shù)據(jù)寫函數(shù)
調(diào)  用:LCD_Wait(bit, uchar);
參  數(shù):數(shù)據(jù)類型,數(shù)據(jù)值
返回值:無
結(jié)  果:將指定數(shù)據(jù)類型的數(shù)據(jù)寫入1602
備  注:數(shù)據(jù)類型:LCD_COMMAND(0)、LCD_DATA(1)
/**********************************************************************************************/
void LCD_Write(bit DataStyle, unsigned char DAT)
{
        LCD1602_E = 0;
        LCD1602_RS = DataStyle;
        LCD1602_RW = 0;                _nop_();

#ifdef _PORT_REV_
    LCD_PORT = DataReverse(DAT);
#else
    LCD_PORT = DAT;
#endif

    _nop_();
        LCD1602_E = 1;                _nop_();//注意順序
        LCD1602_E = 0;                _nop_();
        LCD_Wait();                        //等待1602內(nèi)部執(zhí)行完,Proteus仿真時請注釋此句
}
/**********************************************************************************************/

/*********************************************************************************************
函數(shù)名:LCD1602顯示設(shè)置函數(shù)
調(diào)  用:LCD_SetDisplay(uchar);
參  數(shù):顯示模式
返回值:無
結(jié)  果:正常設(shè)置1602顯示模式
備  注:內(nèi)部函數(shù),初始化時調(diào)用
/**********************************************************************************************/
void LCD_SetDisplay(unsigned char DisplayMode)
{
        LCD_Write(LCD_COMMAND, 0x08|DisplayMode);        
}
/**********************************************************************************************/

/*********************************************************************************************
函數(shù)名:LCD1602顯示設(shè)置函數(shù)
調(diào)  用:LCD_SetInput(uchar);
參  數(shù):顯示模式
返回值:無
結(jié)  果:正常設(shè)置1602顯示模式
備  注:內(nèi)部函數(shù),初始化時調(diào)用
/**********************************************************************************************/
void LCD_SetInput(unsigned char InputMode)
{
        LCD_Write(LCD_COMMAND, 0x04|InputMode);
}
/**********************************************************************************************/

/*********************************************************************************************
函數(shù)名:LCD1602初始化函數(shù)
調(diào)  用:Init_LCD1602();
參  數(shù):無
返回值:無
結(jié)  果:初始化1602函數(shù)
備  注:
/**********************************************************************************************/
void Init_LCD1602()
{
        LCD_Write(LCD_COMMAND, 0x38);               //8位數(shù)據(jù)端口,2行顯示,5*7點陣
        LCD_Write(LCD_COMMAND, 0x38);
    LCD_Write(LCD_COMMAND, 0x38);
        LCD_SetDisplay(LCD_SHOW | LCD_NO_CURSOR);   //開啟顯示, 無光標(biāo)
        LCD_Write(LCD_COMMAND, LCD_CLEAR_SCREEN);   //清屏
        LCD_SetInput(LCD_AC_UP | LCD_NO_MOVE);      //AC遞增, 畫面不動
}
/**********************************************************************************************/

/*********************************************************************************************
函數(shù)名:LCD1602數(shù)據(jù)寫函數(shù)
調(diào)  用:LCD1602_DispString(uchar, uchar, *uchar);
參  數(shù):x坐標(biāo),y坐標(biāo),字符串
返回值:無
結(jié)  果:在指定坐標(biāo)顯示字符串
備  注:x: 0~15; y:0、1
/**********************************************************************************************/
void LCD1602_DispString(unsigned char x, unsigned char y, unsigned char *s)
{
    if(y == 0)
        LCD_Write(LCD_COMMAND, 0x80|x);
    if(y == 1)
        LCD_Write(LCD_COMMAND, 0x80|(x-0x40));
    while(*s != '\0')
    {
        LCD_Write(LCD_DATA, *s);
        s++;
    }
}
/**********************************************************************************************/
#endif


評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美一区二区三区大片 | 国产高清一区二区三区 | 婷婷开心激情综合五月天 | 国产视频在线一区二区 | 国产精品爱久久久久久久 | 中文字幕不卡视频在线观看 | 美女黄频 | 国产视频久久久久 | 欧美一区二区三区在线看 | 伊人免费在线观看 | 色偷偷人人澡人人爽人人模 | 久久久蜜臀国产一区二区 | 日韩不卡三区 | 久国产视频 | 天天久久 | 日本a∨精品中文字幕在线 亚洲91视频 | 毛片一区二区三区 | 日韩中文字幕在线观看 | 久久三区 | 成人在线 | 亚洲精品免费在线观看 | 在线观看成年人视频 | 一区二区三区四区国产 | h视频网站在线观看 | 一区二区成人 | 国产精品成人免费 | 日本中文字幕一区 | 99国内精品久久久久久久 | 欧美日韩福利 | 成人精品国产一区二区4080 | www国产成人免费观看视频,深夜成人网 | 久久在线 | 男女性毛片 | 亚洲在线高清 | 91久久久久 | 欧美精品一区二区三区视频 | 农夫在线精品视频免费观看 | 一区二区三区四区在线视频 | 日韩免费视频一区二区 | 日韩av免费在线观看 | 久久久精品 |