新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 51單片機ds18b20配合1602屏顯示溫度

        51單片機ds18b20配合1602屏顯示溫度

        作者: 時間:2016-12-01 來源:網絡 收藏

        void Delayus(unsigned char t) // us級別延時
        {
        while(--t);
        }
        void Delayms(unsigned char t)// ms級別延時
        {

        while(t--)
        {
        //大致延時1mS
        Delayus(245);
        Delayus(245);
        }
        }
        bit m_1602() //判斷1602是否忙
        {
        P0 = 0xFF; //準備讀取
        RS = 0;
        RW = 1;
        EN = 0;
        _nop_();
        EN = 1; //產生高電平
        return (bit)(P0 & 0x80);
        }
        void x_1602(bit i,unsigned char j) //參數一是寫(0、寫指令 1、寫數據),參數二是寫入的8位數據
        {
        while(m_1602())
        {
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        }
        RS = i;
        RW = 0;
        EN = 1;
        P0 = j;
        _nop_();
        EN = 0; //產生下降沿
        }
        void qp_1602() //清屏函數
        {
        x_1602(0,0x01); //第一個參數是:寫入的類型(0、寫指令 1、寫數據),第一個參數是:寫入的數據
        Delayms(5);
        }
        //顯示字符
        void zf_1602(unsigned char x,unsigned char y,unsigned dat) //參數一是顯示的列,參數二是顯示的行,參數三是顯示的數據
        {
        if(y==0)
        {
        x_1602(0,(0x80+x)); //第一行
        }
        else
        {
        x_1602(0,(0xc0+x)); //第二行
        }
        x_1602(1,dat); //寫入數據
        }
        void zfc_1602(unsigned char x,unsigned char y,unsigned char *dat)
        {
        if(y==0)
        {
        x_1602(0,(0x80+x)); //第一行
        }
        else
        {
        x_1602(0,(0xc0+x)); //第二行
        }
        while(*dat) //&:取地址 *:取值
        {
        x_1602(1,*dat);
        dat ++;
        }
        }

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

        void csh_1602() //初始化1602
        {
        x_1602(0,0x38); //顯示模式設置
        Delayms(5);
        x_1602(0,0x38);
        Delayms(5);
        x_1602(0,0x38);
        Delayms(5);
        x_1602(0,0x38);
        x_1602(0,0x08); //顯示關閉.
        x_1602(0,0x01); //顯示清屏
        x_1602(0,0x06); //顯示光標移動設置
        Delayms(5);
        x_1602(0,0x0c); //顯示開及光標設置
        }
        void Lcd_User_Chr(void) // 1602 自定義字符(攝氏度的小點) 自定義字符
        {
        x_1602(0,0x48); //"01 001 000" 第1行地址
        x_1602(1,0x03); //"XXX 00001" 第1行數據
        x_1602(0,0x49); //"01 001 001" 第2行地址
        x_1602(1,0x03); //"XXX 11011" 第2行數據
        x_1602(0,0x4a); //"01 001 010" 第3行地址
        x_1602(1,0x00); //"XXX 11101" 第3行數據
        x_1602(0,0x4b); //"01 001 011" 第4行地址
        x_1602(1,0x00); //"XXX 11001" 第4行數據
        x_1602(0,0x4c); //"01 001 100" 第5行地址
        x_1602(1,0x00); //"XXX 11101" 第5行數據
        x_1602(0,0x4d); //"01 001 101" 第6行地址
        x_1602(1,0x00); //"XXX 11011" 第6行數據
        x_1602(0,0x4e); //"01 001 110" 第7行地址
        x_1602(1,0x00); //"XXX 00001" 第7行數據
        x_1602(0,0x4f); //"01 001 111" 第8行地址
        x_1602(1,0x00); //"XXX 00000" 第8行數據
        }
        void main()
        {
        unsigned char i;
        csh_1602();
        qp_1602();
        Lcd_User_Chr();
        zf_1602(4,1,.);
        zf_1602(6,1,0x01); //攝氏度的點
        zf_1602(7,1,C); //大寫的C
        zfc_1602(1,0,"www.51hei.com");
        while(1)
        {
        zh(wd());
        for(i=0;i<10;i++)
        Delayms(200);
        }
        }

        小結重點
        1、1602的自定義字符
        2、1602的內部指令
        3、1602字符集=ascii


        上一頁 1 2 下一頁

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 延庆县| 临洮县| 新巴尔虎右旗| 武宁县| 勃利县| 边坝县| 牙克石市| 台山市| 历史| 新巴尔虎左旗| 仁寿县| 蒲江县| 江川县| 化州市| 永胜县| 龙州县| 宜都市| 敦化市| 梨树县| 柞水县| 北海市| 江都市| 卢龙县| 门源| 永德县| 河南省| 遵化市| 耿马| 黄冈市| 武川县| 黄陵县| 新乡县| 黔南| 鄂托克旗| 中山市| 宁明县| 昭觉县| 华阴市| 贡觉县| 南宫市| 内丘县|