新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 12864液晶電子時鐘+溫度顯示

        12864液晶電子時鐘+溫度顯示

        作者: 時間:2012-08-06 來源:網絡 收藏

        18B20溫度傳感器控制函數:

        #includereg52.h>
        #includeintrins.h>
        #include "lcd.h"
        #define uchar unsigned char
        #define uint unsigned int
        uchar temp=80,temp_L,temp_H;
        sbit DQ=P2^3;

        void delay_us(uchar i) //延時函數,計算公式:延時時間T=5+2*i;
        {
        while(--i);
        }


        bit Reset_DS18B20(void) //DS18B20復位函數
        {
        bit DS18B20_exist;
        DQ=1;
        DQ=0;
        delay_us(250); //將DQ拉低480 ~ 960us,產生復位信號
        DQ=1; //將總線釋放,進入接收狀態
        delay_us(30); //等待15-60us,DS18b20發出存在信號,將總線拉低60-240us
        DS18B20_exist=DQ;
        delay_us(200); //存在信號持續60 ~ 240us
        if(DS18B20_exist)
        return 1; //返回1,DS18B20復位失敗,總線上無DS18B20
        else
        return 0; //返回0,DS18B20復位成功,總線上存在DS18b20
        }

        //寫數據--線低后高
        void write_DS18B20(unsigned char value)
        {
        unsigned char i;
        for(i=0;i8;i++)
        {
        DQ=1;
        DQ=0; //將總線拉低,數據送入總線
        _nop_();
        DQ=value0x01;
        delay_us(20); //DS18b20在之后的15-60us的時間對總線數據采樣
        DQ=1; //連續寫入將須將總線釋放至少1us
        value=value>>1;
        }
        }
        //讀數據--先低后高
        unsigned char Read_DS18B20(void)
        {
        unsigned char value,i;
        for(i=0;i8;i++)
        {
        DQ=1;
        DQ=0;
        delay_us(1); //主機將總線拉低7us,!!!!時間不能過長
        DQ=1; //之后釋放總線,告訴DS18B20“讀”數據
        _nop_();
        _nop_();
        value=value>>1;
        if(DQ)
        value|=0x80; //數據讀取
        delay_us(20);

        }
        return value;
        }
        void Read_temp()
        {
        Reset_DS18B20();
        write_DS18B20(0xCC);
        write_DS18B20(0x44);
        Reset_DS18B20();
        write_DS18B20(0xcc);
        write_DS18B20(0xBE);
        temp_L=Read_DS18B20();
        temp_H=Read_DS18B20();
        temp=(temp_H*256+temp_L)/16;

        }
        -------------------------------------

        #include "lcd.h"
        #include reg52.h>
        sbit RS=P2^5; //控制端口位定義
        sbit RW=P2^6;
        sbit EN=P2^7;
        void init_()
        {
        delay(40);
        write_com(0x30);//8位數據格式,基本指令顯示
        delay(10); //延時時間
        write_com(0x30);//8位數據格式,基本指令顯示
        delay(37);
        write_com(0x0C);//開顯示、關閉光標
        delay(10);
        write_com(0x01);//清屏指令
        delay(10); //延時
        write_com(0x06);//設置顯示點:指針自加1
        }
        void delay(uint t)
        {
        uint i,j;
        for(i=120;i>0;i--);
        for(j=t;j>0;j--);
        }
        /**********************************************************
        void delay_us(uchar t) //延時計算公式:5+2*t
        {
        while(--t);
        }
        ***********************************************************/
        void read_busy()
        {
        EN=0;
        RW=1;
        RS=0;
        EN=1;
        while(P00x80);
        EN=0;
        }
        void write_com(uchar com) //寫命令
        {
        read_busy();
        EN=1;
        RS=0;
        RW=0;
        P0=com;
        delay(1);
        EN=0;

        }
        void write_dat(uchar dat) //寫數據
        {
        read_busy();
        EN=1;
        RS=1;
        RW=0;
        P0=dat;
        delay(1);
        EN=0;
        }


        上一頁 1 2 3 4 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 德钦县| 广饶县| 兰坪| 安龙县| 汝南县| 贺州市| 云霄县| 林口县| 东丽区| 特克斯县| 白玉县| 监利县| 板桥市| 察隅县| 密山市| 绵竹市| 绥中县| 平武县| 巨鹿县| 长岛县| 东方市| 宕昌县| 西城区| 漯河市| 蒙自县| 蛟河市| 泰来县| 日照市| 新郑市| 镇平县| 漳平市| 颍上县| 乐清市| 辽宁省| 巢湖市| 南和县| 三亚市| 霍邱县| 华池县| 大埔县| 佳木斯市|