新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于1602液晶的溫度感應器

        基于1602液晶的溫度感應器

        作者: 時間:2016-11-25 來源:網絡 收藏
        1602液晶單片機初學者必學的資源,其操作簡單,可讀可寫,相比數碼管而言,其顯示更為簡單。這里就不再介紹1602的具體特點和功能,可以去百度一下,可以搜索到很多資料。下面是我結合天祥視頻寫的一個溫度感應器

        --------------------------------------------------------------------------------------------------

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

        #include
        #define uint unsigned int
        #define uchar unsigned char
        uchar code table[]="The Tem is C";// 初始化溫度
        uchar code table1[]="00:00:00"; //初始化時間
        uchar code table2[]="MON TUE WEN THU FRI SAT SUN";//周日表
        uchar code wendu[]="0123456789"; //溫度顯示表
        sbit lcdrs=P1^4; //讀取命令選擇
        sbit lcdrw=P1^5; //讀/寫數據選擇
        sbit lcden=P1^6; //使能信號

        uint num;
        uchar count,shi,fen,miao,xq,t,tt;
        void delay(uint z);


        void write_com(uchar com)
        {
        lcdrs=0;
        P2=com;
        delay(5);
        lcden=1;
        delay(5);
        lcden=0;
        }

        void write_date(uchar date)
        {
        lcdrs=1;
        P2=date;
        delay(5);
        lcden=1;
        delay(5);
        lcden=0;
        }

        void init()
        {
        lcden=0;
        lcdrw=0;
        write_com(0x38);
        write_com(0x0c);
        write_com(0x06);
        write_com(0x80);

        write_com(0x80+0x40);
        for(num=0;num<16;num++)
        write_date(table[num]);

        write_com(0x80+0x0c);
        for(num=0;num<3;num++)
        write_date(table2[num]);

        write_com(0x80+0x02);
        for(num=0;num<8;num++)
        write_date(table1[num]);
        TMOD=0x01;
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%6;
        EA=1;
        ET0=1;//開定時器0中斷
        TR0=1;//啟動定時器
        }

        void write_sfm(uchar add,uchar date) //第一個參數為地址,第二個參數為數據 修改時間
        {
        uchar shi,ge;
        shi=date/10;
        ge=date;
        write_com(0x80+0x02+add); //先確定地址
        write_date(0x30+shi); //數值分別送
        write_date(0x30+ge);
        }
        void write_xq(uchar xq)//參數代表位置
        {
        write_com(0x80+0x0c);
        for(num=xq;numwrite_date(table2[num]);
        }


        void showtime()
        {
        xq=0;

        if(count==20)
        {
        count=0;
        miao++;
        if(miao==60)
        {
        miao=0;
        fen++;
        if(fen==60)
        {
        fen=0;
        shi++;
        if(shi==24)
        {
        shi=0;
        xq+=4;
        if(xq==28)
        xq=0;
        write_xq(xq);
        }
        write_sfm(0,shi);
        }
        write_sfm(3,fen);
        }
        write_sfm(6,miao);
        }
        }

        void main()
        {
        init();
        showtime();
        while(1)
        {
        showtime();
        if(t==20)
        {
        t=0;
        tt++;
        if(tt==30)//30s采集一次溫度
        {
        tt=0;
        }
        }
        }

        }

        void timer0() interrupt 1
        {
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%6;
        count++;t++;
        }
        void delay(uint z)
        {
        uchar x,y;
        for(x=z;x>0;x--)
        for(y=110;y>0;y--);
        }



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 乌什县| 哈巴河县| 碌曲县| 崇明县| 巩义市| 泾源县| 焉耆| 潮州市| 昭苏县| 绍兴县| 德钦县| 洛川县| 嘉定区| 耿马| 手游| 基隆市| 涿州市| 高阳县| 河东区| 萨迦县| 雷山县| 三门县| 静安区| 额敏县| 防城港市| 大庆市| 宝鸡市| 高青县| 巴马| 上杭县| 玛多县| 克什克腾旗| 双江| 侯马市| 南昌市| 清流县| 枞阳县| 周口市| 惠安县| 靖安县| 石狮市|