新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 單片機教程及學習之LCD1602顯示DS18B20溫度實驗

        單片機教程及學習之LCD1602顯示DS18B20溫度實驗

        作者: 時間:2016-11-27 來源:網絡 收藏
        #include

        #include
        typedefunsigned int uint;
        typedef unsigned charuchar;

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

        sbit LCD_RS=P2^0;
        sbit LCD_RW=P2^1;
        sbit LCD_EN=P2^2;
        sbit DQ=P3^4;
        uchar Temp_Value[]={0x00,0x00};
        uchar Temp=0;
        uchar Display_Digit[]={0,0,0,0};
        bit DS18B20_IS_OK=1;
        uchar code df_tab[]={0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9};//decimal fraction
        uchar code Display_LINE0[]={" Current Temp:"};
        uchar Display_LINE1[]={" Temp:"};


        void _delay_ms(unsigned int x)
        {
        unsigned char i;
        while(x--)
        {
        for(i=0;i<125;i++);
        }
        }

        void _delay_us(uint x)
        {
        while(--x);
        }

        bit LCD_Busy(void)//測忙
        {
        bit LCD_Status;//返回值變量
        LCD_RS=0;//讀取狀態
        LCD_RW=1;
        LCD_EN=1;
        _nop_();_nop_();_nop_();_nop_();
        LCD_Status=(bit)(P0&0x80);
        LCD_EN=0;
        return LCD_Status;
        }

        void LCD_Write_Command(uchar cmd)//寫指令
        {
        while(LCD_Busy());
        LCD_RS=0;//
        LCD_RW=0;
        LCD_EN=0;
        _nop_();_nop_();
        P0=cmd;
        _nop_();_nop_();_nop_();_nop_();
        LCD_EN=1;
        _nop_();_nop_();_nop_();_nop_();
        LCD_EN=0;

        }

        void LCD_Write_Data(uchar dat)//寫數據
        {
        while(LCD_Busy());//每次寫數據操作之前均需要檢測忙信號
        LCD_RS=1;
        LCD_RW=0;
        LCD_EN=0;
        P0=dat;
        _nop_();_nop_();_nop_();_nop_();
        LCD_EN=1;
        _nop_();_nop_();_nop_();_nop_();
        LCD_EN=0;

        }

        void Init_LCD(void)//液晶初始化
        {
        _delay_ms(15);//延時15MS
        LCD_Write_Command(0x38);
        _delay_ms(5);
        LCD_Write_Command(0x38);
        _delay_ms(5);
        LCD_Write_Command(0x38);//以后每次寫指令操作之前均需要檢測忙信號
        while(LCD_Busy());
        _delay_ms(5);
        LCD_Write_Command(0x01);//清屏
        while(LCD_Busy());
        _delay_ms(5);
        LCD_Write_Command(0x38);//設置16*2顯示,5*7點陣,8位數據接口
        _delay_ms(5);
        while(LCD_Busy());
        LCD_Write_Command(0x0c);//開顯示,不顯示光標
        _delay_ms(5);
        while(LCD_Busy());
        LCD_Write_Command(0x06);//當讀或寫一個字符后地址指針加一,且光標加一
        }

        void LCD_POS(uchar pos)//字符顯示位置
        {
        LCD_Write_Command(0x80|pos);
        }

        void Show_String(uchar *str)//顯示字符串
        {
        while(*str!=

        主站蜘蛛池模板: 河曲县| 泽州县| 通化市| 新密市| 卓资县| 冀州市| 新蔡县| 新源县| 社旗县| 清镇市| 临猗县| 邢台县| 东明县| 长葛市| 连平县| 桃园县| 漾濞| 留坝县| 东乡族自治县| 逊克县| 昌图县| 高要市| 濮阳县| 芮城县| 昌都县| 华坪县| 碌曲县| 临湘市| 阜宁县| 台江县| 景泰县| 盐边县| 资溪县| 佛坪县| 泰州市| 镇平县| 海南省| 维西| 舟山市| 宜都市| 江山市|