新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于單片機的LCD1602控制總線程序

        基于單片機的LCD1602控制總線程序

        作者: 時間:2012-09-25 來源:網絡 收藏

        第一行顯示"Welcome";第二行顯示="Happy day";若要顯示其他字符,請直接往數組 LCMLineOne[16]和LCMLineTwo[16]填充相應的代碼。直接上圖,仿真圖如下:

        源程序如下,可以對比時序方式,理解總線的操作方法。

        #includereg51.h>
        //#includeabsaCC.h>
        #define uchar unsigned char
        #define uint unsigned int
        #define busy 0x80
        uchar xdata LCMWriteCOM _at_ 0x80ff; //寫指令寄存器
        uchar xdata LCMReadCOM _at_ 0xa0ff ; //讀指令寄存器
        uchar xdata LCMWritEDAta _at_ 0xc0ff ; //寫數據寄存器
        uchar xdata LCMReadData _at_ 0xe0ff ; //讀數據寄存器
        uchar data LCMLineOne[16]="Welcome"; //第一行顯示的數據
        uchar data LCMLineTwo[16]="Happy day"; //第二行顯示的數據

        void Delayms(uchar ms)
        {
        uchar i,j;
        for(i=0;ims;i++)
        for(j=0;j57;j++)
        ;
        }
        //寫指令寄存器
        void LCMWriteC(uchar COMData)
        { uchar LCMStatus;
        do
        {
        LCMStatus=(LCMReadCOMbusy);
        }
        while(LCMStatus!=0);
        LCMWriteCOM=COMData;
        }
        //讀指令寄存器
        uchar LCMReadC()
        {uchar LCMStatus;
        do
        {
        LCMStatus=(LCMReadCOMbusy);
        }
        while(LCMStatus!=0);
        LCMStatus=LCMReadCOM;
        return(LCMStatus);
        }
        //讀數據寄存器
        uchar LCMReadD(uchar addr)
        {uchar LCMStatus;
        do
        {
        LCMStatus=(LCMReadCOMbusy);
        }
        while(LCMStatus!=0);
        LCMWriteC(0x80+addr);
        LCMStatus=LCMReadData;
        return(LCMStatus);
        }
        //寫數據寄存器帶地址
        void LCMWriteDAdd(uchar addr,uchar LCMData)
        {uchar LCMStatus;
        do
        {
        LCMStatus=(LCMReadCOMbusy);
        }
        while(LCMStatus!=0);
        LCMWriteC(0x80+addr);
        LCMWriteData=LCMData;
        }

        //寫數據寄存器無地址
        void LCMWriteD(uchar LCMData)
        {uchar LCMStatus;
        do
        {
        LCMStatus=(LCMReadCOMbusy);
        }
        while(LCMStatus!=0);
        LCMWriteData=LCMData;
        }
        //初始化
        void LCMInit(void)
        { Delayms(15);
        LCMWriteCOM=0x38;
        Delayms(5);
        LCMWriteCOM=0x38;
        Delayms(5);
        LCMWriteCOM=0x38;
        Delayms(5);

        LCMWriteC(0x38);
        LCMWriteC(0x08);
        LCMWriteC(0x01);
        LCMWriteC(0x06);
        LCMWriteC(0x0c);
        }

        main()
        { uchar i;
        LCMInit();
        while(1)
        { LCMWriteC(0x80); //第一行開始地址
        for(i=0;i16;i++)
        LCMWriteD(LCMLineOne[i]);
        LCMWriteC(0x80+0x40); //第二行開始地址
        for(i=0;i16;i++)
        LCMWriteD(LCMLineTwo[i]);
        }
        }



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 凤山市| 隆尧县| 鲁山县| 金山区| 远安县| 兰溪市| 富阳市| 花莲市| 西昌市| 盘锦市| 凤山市| 广安市| 尚义县| 广汉市| 牙克石市| 吐鲁番市| 确山县| 河间市| 无为县| 施甸县| 乌鲁木齐县| 长汀县| 萨迦县| 临西县| 石狮市| 宾阳县| 彭阳县| 肃宁县| 大庆市| 缙云县| 扬州市| 九江市| 绩溪县| 梅河口市| 新巴尔虎右旗| 桦甸市| 武威市| 莱州市| 漾濞| 兴仁县| 泗阳县|