新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 單片機寫LCD1602液晶程序源碼

        單片機寫LCD1602液晶程序源碼

        作者: 時間:2016-12-02 來源:網絡 收藏
        本程序的pdf格式的原理圖下載:http://www.51hei.com/f/ks51.pdf


        /***********寫1602液晶**************/
        /**
        *功能:寫1602液晶
        *時間:二〇一四年三月十五日 08:59:26
        *作者:寒竹子
        **/

        本文引用地址:http://www.104case.com/article/201612/324596.htm

        #include
        #include

        typedef unsigned int uint;
        typedef unsigned char uchar;

        //LCD1602
        sbit LCD1602_RS = P1^0;
        sbit LCD1602_RW = P1^1;
        sbit LCD1602_EN = P1^5;

        void LCD1602_Wait();
        void writeCmd_LCD1602(uchar cmd);
        void writeData_LCD1602(uchar dat);
        void LCD1602_Init();
        void writeString_LCD1602(uchar * pstr);
        void LCD1602_ShowStr(uchar x, uchar y, uchar * pstr);

        void main()
        {
        LCD1602_Init();

        /*
        writeCmd_LCD1602(0x00 | 0x80);
        writeData_LCD1602(C);

        writeString_LCD1602("Hanzhuzi");
        */
        LCD1602_ShowStr(0, 0, "han zhu ying xue");
        LCD1602_ShowStr(0, 1, "QQ:1754410821");
        while (1);
        }

        //LCD1602判忙準備
        void LCD1602_Wait()
        {
        uchar sta = 0;//讀取液晶當前狀態
        P0 = 0xFF;//讀取狀態時必須把總線拉高才能正確的讀取其狀態!否則寫入有時不成功!!!
        LCD1602_RS = 0;
        LCD1602_RW = 1;

        do
        {
        LCD1602_EN = 1;
        sta = P0;//讀取狀態
        LCD1602_EN = 0;//避免液晶輸出數據影響到總線P0上的其他器件
        } while (sta & 0x80);//檢測第七位是否為1,若為1繼續等待直到0為止
        }

        //LCD1602寫命令
        void writeCmd_LCD1602(uchar cmd)
        {
        //在進行讀寫數據之前要進行液晶忙碌等待
        LCD1602_Wait();

        LCD1602_RS = 0;
        LCD1602_RW = 0;
        LCD1602_EN = 0;
        P0 = cmd;
        LCD1602_EN = 1;//高脈沖送入命令
        LCD1602_EN = 0;//避免液晶輸出數據影響其他的器件
        }

        //LCD1602寫數據
        void writeData_LCD1602(uchar dat)
        {
        LCD1602_Wait();

        LCD1602_RS = 1;
        LCD1602_RW = 0;
        LCD1602_EN = 0;
        P0 = dat;//送入數據
        LCD1602_EN = 1;//高脈沖
        LCD1602_EN = 0;//避免液晶輸出數據影響到其他器件
        }

        //LCD1602初始化
        void LCD1602_Init()
        {
        writeCmd_LCD1602(0x38);//5*7點陣,16*2顯示
        writeCmd_LCD1602(0x0C);//開顯示,不顯示光標
        writeCmd_LCD1602(0x06);//數據指針++,光標++
        writeCmd_LCD1602(0x01);//清屏
        }

        //LCD1602寫String
        void writeString_LCD1602(uchar * pstr)
        {
        while (*pstr)
        {
        writeData_LCD1602(*pstr++);
        }
        }

        //LCD1602按地址寫
        void LCD1602_ShowStr(uchar x, uchar y, uchar * pstr)
        {
        uchar addr = 0;
        //判斷RAM地址
        if (y == 0) //LCD1602的左上角地址是 (0, 0)
        {
        addr = (0x00 + x);//確定x坐標,x為偏移量
        }
        else
        {
        addr = (0x40 + x);//第二行
        }

        //寫入地址
        writeCmd_LCD1602(addr | 0x80);//地址是從0x80H開始的

        //寫入數據
        while (*pstr !=

        主站蜘蛛池模板: 神池县| 正定县| 贡山| 调兵山市| 锡林浩特市| 札达县| 漳州市| 六枝特区| 遵化市| 鄯善县| 固安县| 台前县| 桃源县| 贡觉县| 尼木县| 阳江市| 内黄县| 鄱阳县| 北宁市| 吐鲁番市| 深水埗区| 从江县| 漳浦县| 灵宝市| 买车| 景德镇市| 库车县| 许昌县| 青铜峡市| 四会市| 竹北市| 徐汇区| 祁阳县| 油尖旺区| 江都市| 福安市| 新密市| 老河口市| 玉树县| 阿合奇县| 西盟|