新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 時鐘及溫度用74hc164+74ls145數碼管顯示單片機程序

        時鐘及溫度用74hc164+74ls145數碼管顯示單片機程序

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



        }
        void keyshu()//設定鍵函數
        {

        bit b,d,e;
        b=MINUS;d=ADD;//變量B,D,E分別讀回P0。4~P0。6的狀態。分別為加一,減一,確認鍵
        e=ENTER;
        if(b==0)//減一按鍵按下
        {
        dateshu[seta]--;
        if(dateshu[seta]<0)dateshu[seta]=9;//減到零時自動循環回九
        b=MINUS;//再讀回鍵值,做松手查檢測
        while(b==0){b=MINUS;display(dateshu[0],dateshu[1],10,seta+1,dateshu[2],dateshu[3],dateshu[4],dateshu[5]);}//松手檢測

        }
        else if(d==0)//加一按鍵按下
        {
        dateshu[seta]++;
        if(dateshu[seta]>9)dateshu[seta]=0;//加到九時自動循環回零
        d=ADD;//做松手檢測
        while(d==0){d=ADD;display(dateshu[0],dateshu[1],10,seta+1,dateshu[2],dateshu[3],dateshu[4],dateshu[5]);}//松手檢測

        }
        else if(e==0)//確認鍵按下
        {
        seta++;
        e=ENTER;
        while(e==0){e=ENTER;display(dateshu[0],dateshu[1],10,seta+1,dateshu[2],dateshu[3],dateshu[4],dateshu[5]);}
        if(seta>5)//如果六位數值已設定完畢,測退出設定狀態
        {
        seta=0;sec=0;setflag=0;
        sec=dateshu[1]*10+dateshu[0];//分別將設定好的值,賦給時秒變量,設定生效
        min=dateshu[3]*10+dateshu[2];//分別將設定好的值,賦給分變量,設定生效
        hour=dateshu[5]*10+dateshu[4];//分別將設定好的值,賦給時變量,設定生效

        }
        }

        }
        void main()

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

        {
        init();//各外圍元件及CPU初始化
        delay10us(150);//進入大循環時的延時
        while(1)

        {

        key();//檢測功能鍵有無按下
        if(setflag==0)//如果設定功能未進入,則顯示實時時鐘
        {
        timer();//時間運算函數
        display(dateshu[0],dateshu[1],10,10,dateshu[2],dateshu[3],dateshu[4],dateshu[5]);//顯示實時時鐘
        }
        else//如果進入了功能設定函數
        {
        keyshu();//讀取鍵值
        display(dateshu[0],dateshu[1],10,seta+1,dateshu[2],dateshu[3],dateshu[4],dateshu[5]);//顯示實時設定
        }
        if((dateshu[0]==3)&&(dateshu[1]%2==0))//每隔十秒溫度讀取顯示一次
        {uchar i;//顯示延時用
        dqrsr();//初始化
        if(dqflag==1)//檢測存在脈沖
        {

        dqwrite(0xcc);//跳過ROM操作

        dqwrite(0x44);//開始溫度轉換
        while(!DS1820DQ);//延時等待溫度轉換完畢
        dqrsr();//初始化
        if(dqflag==1)
        {
        uchar temper;//溫度變量
        dqwrite(0xcc);//跳過ROM操作
        dqwrite(0xbe);//讀取數據指令

        temperl=dqread();//讀取低字節溫度值
        temperh=dqread();//讀取高字節溫度值
        temperl=temperl>>4;//移去低四位的溫度值
        temperh=temperh<<4;//移去讀回的符號號
        temper=temperl+temperh;//將處理后的高字節溫度和低字節溫度值相加
        for(i=250;i>0;i--)display(temper%10,temper/10,temper/100,10,10,10,10,10);//延時顯示實時溫度

        }
        }


        }
        }








        }
        void time0(void) interrupt 1
        {

        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;//定時器零重賦初值
        tim++;
        if(tim==20)
        {
        tim=0;//tim==20時,為50MS*20=1S
        sec++;
        }

        }





        上一頁 1 2 下一頁

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 康乐县| 龙川县| 资中县| 迁安市| 曲阜市| 扎鲁特旗| 安宁市| 马鞍山市| 合川市| 日喀则市| 大城县| 昭苏县| 光泽县| 莱阳市| 讷河市| 张家口市| 莎车县| 新营市| 彩票| 佛学| 武隆县| 松阳县| 历史| 古浪县| 双柏县| 兴宁市| 九台市| 双桥区| 司法| 横峰县| 台南市| 福建省| 广元市| 张家川| 万盛区| 岳池县| 班玛县| 泽普县| 高雄市| 城固县| 留坝县|