電子開發(fā)網(wǎng)

電子開發(fā)網(wǎng)電子設(shè)計(jì) | 電子開發(fā)網(wǎng)Rss 2.0 會(huì)員中心 會(huì)員注冊(cè)
搜索: 您現(xiàn)在的位置: 電子開發(fā)網(wǎng) >> 電子開發(fā) >> 單片機(jī) >> 正文

單片機(jī)c51驅(qū)動(dòng)1602A液晶屏的驅(qū)動(dòng)實(shí)驗(yàn)

作者:佚名    文章來源:本站原創(chuàng)    點(diǎn)擊數(shù):    更新時(shí)間:2011/5/14
所需硬件:   1.單片機(jī)實(shí)驗(yàn)開發(fā)板A
            2.杜邦頭插線
            3.16x2液晶顯示字符模塊
            4.STC89C51RC單片機(jī)
所需軟件:   1. Keil C51 V8.08或Keil_uv3 綠色版本
            2.STC單片機(jī)ISP下載編程軟件


        1602A液晶屏連接圖
C語言源程序
/******************************************************************
** 1602A液晶屏驅(qū)動(dòng)程序
** 晶 振  頻 率:11.0592M
** 線路->單片機(jī)實(shí)驗(yàn)開發(fā)板A
******************************************************************/
    #include  
    #define uchar unsigned char
    #define uint unsigned int

    sbit LCM_E=P3^5;  //定義接口
    sbit LCM_RW=P3^6;
    sbit LCM_RS=P3^7;

    #define LCM_Data P1//數(shù)據(jù)接口

    void LCM_WriteData(uchar WDLCM);
    void LCM_WriteCommand(uchar WCLCM,BuysC);
    uchar LCM_ReadData(void);
    uchar LCM_ReadStatus(void);
    void LCM_Init(void);
    void DisplayOneChar(uchar X, uchar Y, uchar DData);
    void DisplayListChar(uchar X, uchar Y, uchar code *DData);
    void Delay5Ms(void);
    void Delay400Ms(void);

    uchar code uctech[] = {"1602A"};
    uchar code net[] = {"www.52c51.com"};

    void main(void)
    {
        Delay400Ms(); //啟動(dòng)等待,等LCM講入工作狀態(tài)
        LCM_Init(); //LCM初始化
        Delay5Ms(); //延時(shí)片刻(可不要)

        DisplayListChar(6, 1, uctech);   
        DisplayListChar(0, 0, net);
        LCM_ReadData();//測(cè)試用句無意義
        LCM_Data=255;
        while(1);
    }

/****************************1602A寫數(shù)據(jù)函數(shù)**************************/
/*函數(shù)原型:void LCM_WriteData(uchar WDLCM)
/*函數(shù)功能:1602A寫數(shù)據(jù)
/*輸入?yún)?shù):要寫入的數(shù)據(jù)
/*輸出參數(shù):無
/*調(diào)用模塊:
/*建立時(shí)間:2005/11/14
/*作者:站長(zhǎng)
/**********************************************************************/
    void LCM_WriteData(uchar WDLCM)
    {
        LCM_ReadStatus(); //檢測(cè)忙
        LCM_Data = WDLCM;
        LCM_RS = 1;
        LCM_RW = 0;
        LCM_E = 0; //若晶振速度太高可以在這后加小的延時(shí)
        LCM_E = 0; //延時(shí)
        LCM_E = 1;
    }

/****************************1602A寫指令函數(shù)**************************/
/*函數(shù)原型:void LCM_WriteCommand(uchar WCLCM,BuysC)
/*函數(shù)功能:1602A寫指令
/*輸入?yún)?shù):要寫入的指令
/*輸出參數(shù):無
/*調(diào)用模塊:
/*建立時(shí)間:2005/11/14
/*作者:站長(zhǎng)
/**********************************************************************/
    void LCM_WriteCommand(uchar WCLCM,BuysC) //BuysC為0時(shí)忽略忙檢測(cè)
    {
        if (BuysC) LCM_ReadStatus(); //根據(jù)需要檢測(cè)忙
        LCM_Data = WCLCM;
        LCM_RS = 0;
        LCM_RW = 0;
        LCM_E = 0;
        LCM_E = 0;
        LCM_E = 1;
    }

/****************************1602A讀數(shù)據(jù)函數(shù)**************************/
/*函數(shù)原型:uchar LCM_ReadData(void)
/*函數(shù)功能:1602A讀數(shù)據(jù)
/*輸入?yún)?shù):無
/*輸出參數(shù):1602A返回的數(shù)據(jù)
/*調(diào)用模塊:
/*建立時(shí)間:2005/11/14
/*作者:站長(zhǎng)
/**********************************************************************/
    uchar LCM_ReadData(void)
    {
        LCM_RS = 1;
        LCM_RW = 1;
        LCM_E = 0;
        LCM_E = 0;
        LCM_E = 1;
        return(LCM_Data);
    }

/****************************1602A讀狀態(tài)函數(shù)**************************/
/*函數(shù)原型:uchar LCM_ReadData(void)
/*函數(shù)功能:1602A讀狀態(tài)
/*輸入?yún)?shù):無
/*輸出參數(shù):1602A返回的狀態(tài)
/*調(diào)用模塊:
/*建立時(shí)間:2005/11/14
/*作者:站長(zhǎng)
/**********************************************************************/
    uchar LCM_ReadStatus(void)
    {
        LCM_Data = 0xFF;
        LCM_RS = 0;
        LCM_RW = 1;
        LCM_E = 0;
        LCM_E = 0;
        LCM_E = 1;
        while (LCM_Data & 0x80); //檢測(cè)忙信號(hào)
        return(LCM_Data);
    }

/****************************1602A初始化函數(shù)**************************/
/*函數(shù)原型:void LCM_Init(void)
/*函數(shù)功能:1602A初始化
/*輸入?yún)?shù):無
/*輸出參數(shù):無
/*調(diào)用模塊:
/*建立時(shí)間:2005/11/14
/*作者:站長(zhǎng)
/**********************************************************************/
    void LCM_Init(void)
    {
        LCM_Data = 0;
        LCM_WriteCommand(0x38,0); //三次顯示模式設(shè)置,不檢測(cè)忙信號(hào)
        Delay5Ms();
        LCM_WriteCommand(0x38,0);
        Delay5Ms();
        LCM_WriteCommand(0x38,0);
        Delay5Ms();

        LCM_WriteCommand(0x38,1); //顯示模式設(shè)置,開始要求每次檢測(cè)忙信號(hào)
        LCM_WriteCommand(0x08,1); //關(guān)閉顯示
        LCM_WriteCommand(0x01,1); //顯示清屏
        LCM_WriteCommand(0x06,1); // 顯示光標(biāo)移動(dòng)設(shè)置
        LCM_WriteCommand(0x0C,1); // 顯示開及光標(biāo)設(shè)置
    }

/******************1602A按指定位置顯示一個(gè)字符函數(shù)**********************/
/*函數(shù)原型:void DisplayOneChar(uchar X, uchar Y, uchar DData)
/*函數(shù)功能:1602A按指定位置顯示一個(gè)字符
/*輸入?yún)?shù):X坐標(biāo) Y坐標(biāo) 要顯示的字符
/*輸出參數(shù):無
/*調(diào)用模塊:
/*建立時(shí)間:2005/11/14
/*作者:站長(zhǎng)
/**********************************************************************/
    void DisplayOneChar(uchar X, uchar Y, uchar DData)
    {
        Y &= 0x1;
        X &= 0xF; //限制X不能大于15,Y不能大于1
        if (Y) X |= 0x40; //當(dāng)要顯示第二行時(shí)地址碼+0x40;
        X |= 0x80; // 算出指令碼
        LCM_WriteCommand(X, 0); //這里不檢測(cè)忙信號(hào),發(fā)送地址碼
        LCM_WriteData(DData);
    }

/*******************1602A按指定位置顯示一串字符函數(shù)*********************/
/*函數(shù)原型:void DisplayListChar(uchar X, uchar Y, uchar code *DData)
/*函數(shù)功能:1602A按指定位置顯示一個(gè)字符
/*輸入?yún)?shù):X坐標(biāo) Y坐標(biāo) 要顯示字符串的首地址
/*輸出參數(shù):無
/*調(diào)用模塊:
/*建立時(shí)間:2005/11/14
/*作者:站長(zhǎng)
/**********************************************************************/
    void DisplayListChar(uchar X, uchar Y, uchar code *DData)
    {
        uchar ListLength;
        ListLength = 0;
        Y &= 0x1;
        X &= 0xF; //限制X不能大于15,Y不能大于1
        while (DData[ListLength]>0x20) //若到達(dá)字串尾則退出
        {
            if (X <= 0xF) //X坐標(biāo)應(yīng)小于0xF
            {
                DisplayOneChar(X, Y, DData[ListLength]); //顯示單個(gè)字符
                ListLength++;
                X++;
            }
        }
    }

/********************5ms延時(shí)函數(shù)************************/
/*函數(shù)原型:void Delay5Ms(void)
/*函數(shù)功能:5ms延時(shí)
/*輸入?yún)?shù):無
/*輸出參數(shù):無
/*調(diào)用模塊:
/*建立時(shí)間:2005/11/14
/*作者:站長(zhǎng)
/**********************************************************************/
    void Delay5Ms(void)
    {
        unsigned int TempCyc = 5552;
        while(TempCyc--);
    }

/********************400ms延時(shí)延時(shí)函數(shù)************************/
/*函數(shù)原型:void Delay400Ms(void)
/*函數(shù)功能:400ms延時(shí)延時(shí)
/*輸入?yún)?shù):無
/*輸出參數(shù):無
/*調(diào)用模塊:
/*建立時(shí)間:2005/11/14
/*作者:站長(zhǎng)
/**********************************************************************/
void Delay400Ms(void)
{
uchar TempCycA = 5;
unsigned int TempCycB;
while(TempCycA--)
{
   TempCycB=7269;
   while(TempCycB--);
};
}
keil工程文件打包下載yejing_c.rar

匯編語言源程序
/******************************************************************
** 1602A液晶屏驅(qū)動(dòng)程序
** 晶 振  頻 率:11.0592M
** 線路->單片機(jī)實(shí)驗(yàn)開發(fā)板A
******************************************************************/

            LCM_RS EQU P3.7  ;//定義接口
            LCM_RW EQU P3.6
            LCM_E EQU P3.5

            LCM_Data EQU P1  ;數(shù)據(jù)接口

            ORG 0000H   ;從0000H處開始
            SJMP MAIN   ;跳轉(zhuǎn)到MAIN處

            ORG 0030H   ;主程序從0030H處開始
MAIN:       MOV SP,#70H   ;堆棧指針指向70H
            LCALL INITIAL   ;調(diào)用啟動(dòng)LCM子程序進(jìn)行初始化
            LCALL CLS   ;調(diào)用清除LCM子程序
            MOV A,#80H   ;向A送立即數(shù)80H設(shè)定顯示地址為第一行第一列
            LCALL WRITE_COM  ;調(diào)用寫指令到LCM子程序
            MOV DPTR,#LINE1  ;將第一行字符串的啟始地址送如DPTR中
            LCALL DISP   ;調(diào)用顯示字符串到LCM子程序
            MOV A,#0C0H   ;向A送立即數(shù)0C0H設(shè)定顯示地址為第二行第一列
            LCALL WRITE_COM  ;調(diào)用寫指令到LCM子程序
            MOV DPTR,#LINE2  ;將第二行字符串的啟始地址送如DPTR中
            LCALL DISP   ;調(diào)用顯示字符串到LCM子程序
            SJMP $   ;程序動(dòng)態(tài)停機(jī)

LINE1:      DB " www.52c51.com ",00H ;第一行字符串
LINE2:      DB "   1602A   ",00H ;第二行字符串

INITIAL:    MOV A,#38H   ;啟動(dòng)LCM子程序
            LCALL WRITE_COM
            MOV A,#0EH
            LCALL WRITE_COM
            MOV A,#06H
            LCALL WRITE_COM
            RET

CHECK_BUSY: PUSH ACC   ;查詢忙碌信號(hào)子程序
BUSY_LOOP:  CLR LCM_E
            SETB LCM_RW
            CLR LCM_RS
            SETB LCM_E
            MOV A,LCM_Data
            CLR LCM_E
            JB ACC.7,BUSY_LOOP
            POP ACC
            LCALL DEL
            RET

WRITE_COM:  LCALL CHECK_BUSY;寫指令到LCM子程序
            CLR LCM_E
            CLR LCM_RS
            CLR LCM_RW
            SETB LCM_E
            MOV LCM_Data,A
            CLR LCM_E
            RET

WRITE_DATA: LCALL CHECK_BUSY ;寫數(shù)據(jù)到LCM子程序
            CLR LCM_E
            SETB LCM_RS
            CLR LCM_RW
            SETB LCM_E
            MOV LCM_Data,A
            CLR LCM_E
            RET

CLS:        MOV A,#01H  ;清除LCM子程序
            LCALL WRITE_COM
            RET

DEL:        MOV R6,#5   ;2.7ms延時(shí)子程序
D1:         MOV R7,#248
            DJNZ R7,$
            DJNZ R6,D1
            RET

DISP:       PUSH ACC   ;將A的內(nèi)容壓棧
DISP_LOOP:  CLR A   ;A清零
            MOVC A,@A+DPTR  ;查表將字符串內(nèi)容送入A
            JZ END_DISP  ;若查到的內(nèi)容為0則終止查表
            LCALL WRITE_DATA  ;調(diào)用寫數(shù)據(jù)到LCM子程序
            INC DPTR   ;DPTR加1指向下一個(gè)對(duì)象
            SJMP DISP_LOOP  ;跳轉(zhuǎn)到DISP_LOOP循環(huán)執(zhí)行
END_DISP:   POP ACC   ;彈出壓棧內(nèi)容至A
            RET

            END    ;程序結(jié)束
keil工程文件打包下載 yejing_asm.rar
Tags:單片機(jī)驅(qū)動(dòng),1602液晶屏  
責(zé)任編輯:admin
請(qǐng)文明參與討論,禁止漫罵攻擊,不要惡意評(píng)論、違禁詞語。 昵稱:
1分 2分 3分 4分 5分

還可以輸入 200 個(gè)字
[ 查看全部 ] 網(wǎng)友評(píng)論
最新推薦
關(guān)于我們 - 聯(lián)系我們 - 廣告服務(wù) - 友情鏈接 - 網(wǎng)站地圖 - 版權(quán)聲明 - 在線幫助 - 文章列表
返回頂部
刷新頁面
下到頁底
晶體管查詢
免费a级毛片在线观看| 久久综合国产乱子伦精品免费| 欧美交换配乱吟粗大| 亚洲精品无码av人在线观看| 欧美日韩高清性色生活片| 亚洲欧美精品伊人久久| 欧美人xxxx| 亚洲一区在线免费观看| 日韩制服丝袜在线观看| 乱人伦xxxx国语对白| 日产亚洲一区二区三区| 久久久久免费精品国产| 性中国自由xxxxx孕妇| 中文在线观看www| 天天影视综合网色综合国产| lover视频无删减免费观看| 国产香蕉免费精品视频| 97人伦影院a级毛片| 国产男女视频在线观看| 西西人体大胆免费视频| 国产亚洲av手机在线观看| 精品国产一区二区三区久久| 再深点灬舒服灬太大了网站| 波多野结衣免费一区视频| 亚洲爆乳精品无码一区二区| 校花哭着扒开屁股浣肠于柔| 久久综合香蕉国产蜜臀av| 成年人的免费视频| 一本到在线观看视频| 国产麻豆视频免费观看| 黑人巨大精品欧美一区二区免费| 国产又猛又黄又爽| 精品久久久久香蕉网| 人妻有码中文字幕| 欧美aaaaaa级午夜福利视频| 久久青青草原亚洲av无码麻豆| 成人综合国产乱在线| 一二三四在线播放免费视频中国| 国产精品美女一级在线观看| 香港三级欧美国产精品| 国产a级小龙女乱理片|