標(biāo)題: 哪位大佬幫做一下倒計時器的程序 [打印本頁]

作者: 長河流月    時間: 2017-5-19 10:16
標(biāo)題: 哪位大佬幫做一下倒計時器的程序
最近要求做一個51單片機(jī)的倒計時器程序,可是做了好久也做不出來,看了很多都不太符合要求,就請大家?guī)蛡忙。
要求用C語言做。
倒計時計時器
1、LCD1602顯示倒計時時間
2、時間到蜂鳴提醒
3、獨(dú)立按鍵設(shè)定時長(分鐘為單位)


作者: 長河流月    時間: 2017-5-19 10:45
像這個好像是數(shù)碼管顯示的,怎么改成LCD1602顯示啊,有人幫改一下代碼嗎?
#include"reg52.h"
#define uchar unsigned char
#define uint unsigned int

sbit Key_up=P3^4;        //分鐘調(diào)節(jié)按鍵+
sbit Key_down=P3^5;        //分鐘調(diào)節(jié)按鍵-
sbit Key_enter=P3^6;//開始、暫停按鍵
sbit Key_esc=P3^7;        //清除按鍵
sbit beep=P2^3;                //蜂鳴器
sbit wela=P2^7;                //位鎖存器
sbit dula=P2^6;                //段鎖存器

uint cnt,min,sec; //中斷計數(shù)、分、秒
bit flag;                //開始位
uchar dsp[6];  //數(shù)碼管內(nèi)容
uchar dsp_du[17]={0x3f , 0x06 , 0x5b , 0x4f , 0x66 , 0x6d ,
                                  0x7d , 0x07 , 0x7f , 0x6f , 0x77 , 0x7c ,
                                  0x39 , 0x5e , 0x79 , 0x71 , 0x00};//段編碼
uchar dsp_we[6]={0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf};//位編號

//延時
void delay(uint z)
{
        uint t1,y;
        for(t1=z;t1>0;t1--)
                for(y=110;y>0;y--);
}

//鍵盤控制
void key()
{
        if(!Key_up) //向上
        {
                delay(200);
                if(!Key_up)        min++;
                min=min%100;
        }

        if(!Key_down) //向下
        {
                delay(200);
                if(!Key_down) min--;
                min=min%100;
        }

        if(!Key_enter) //開始位
        {
                delay(50);
                if(!Key_enter) flag=~flag;
                while(!Key_enter);
        }

        if(!Key_esc) //停止位
        {
                flag=0;
                min=0;
                sec=0;
        }

}

void run()
{
        if(cnt>199)        //秒計數(shù)
        {
                cnt=0;
                if(sec==0)  //分鐘計數(shù)
                {
                        sec=60;
                        if(min==0)        //分鐘復(fù)位
                        {
                                min=100;
                                flag=0; //停止運(yùn)行
                                beep=0;//響聲提示
                                delay(2000);
                                beep=1;
                        }
                        min--;
                 }
                sec--;
        }
}

//定時器初始化
void init()
{
        TMOD=0x11;
        TR0=1;        //啟動定時器0
        ET0=1;        //打開定時器0中斷
        TR1=1;        //啟動定時器1
        ET1=1;        //打開定時器1中斷
        TH1=0xfd; //寫入定時器1初始值
        TL1=0x77;                 
        TH0=0xee;
        TL0=0;                 
        EA=1;        //打開總中斷
        min=20;  //預(yù)置時間
}

//主函數(shù)
void main()
{
        init();
        while(1)
        {
                if(flag)
                        {run();}
                key();
                //數(shù)字拆分成個位和十位
                dsp[0]=min/10;
                dsp[1]=min%10;
                dsp[2]=sec/10;
                dsp[3]=sec%10;

        }
}

//定時器0,用于計時
timer0() interrupt 1  // 定時器0中斷是1號
{
        TH0=0xee;        //5ms
        TL0=0;
        cnt++;                 
}

//定時器1,用于LED動態(tài)掃描
timer1() interrupt 3  // 定時器1中斷是3號
{
        uchar wei; //數(shù)碼管顯示位計數(shù)

        TH1=0xf0; //定時器初始值
        TL1=0x00;
        wela=1;
        P0=dsp_we[wei];
        wela=0;

        dula=1;
        P0=dsp_du[dsp[wei]];
        if(wei==1) P0=P0|0x80;        //第二位加點(diǎn)
        dula=0;

        wei++;
        wei=wei%4;
}

作者: 長河流月    時間: 2017-5-19 13:54
有哪位會的大神幫忙嗎?
作者: 長河流月    時間: 2017-6-3 15:16
看起來沒人了
作者: 不熬夜    時間: 2017-6-5 15:56
這些都是最基本的網(wǎng)上找找例程就好了
作者: dzbj    時間: 2017-6-5 16:50
本帖最后由 dzbj 于 2017-6-5 20:42 編輯

你做個定時器 比如每1s產(chǎn)生一次中斷 然后用一個變量做計數(shù) 在沖斷外的程序里 用一個變量紀(jì)錄倒計時的最大數(shù) 不斷用倒計時最大數(shù)-變量就是剩余時間 就相當(dāng)于每s減一下
作者: a11123    時間: 2017-6-5 21:00
有沒有這個的仿真圖分享一下  剛好也是做這個
作者: zl2168    時間: 2017-6-5 21:20
本帖最后由 zl2168 于 2017-6-5 21:21 編輯

介紹你一個案例,顯示方式有些不同,供你參考。
實(shí)例96  能預(yù)置初值的倒計時秒表
Proteus仿真一下,確認(rèn)有效。
實(shí)例96 能設(shè)置初值的倒計時秒表.rar (40 KB, 下載次數(shù): 12)

以上摘自張志良編著《80C51單片機(jī)仿真設(shè)計實(shí)例教程——基于Keil CProteus》清華大學(xué)出版社ISBN 978-7-302-41682-1內(nèi)有常用的單片機(jī)應(yīng)用100案例,用于仿真實(shí)驗操作,書中電路和程序設(shè)計有詳細(xì)說明,電路與程序真實(shí)可靠可信可行,程序語句條條有注解。若需99.99秒,硬件電路增加一位595。軟件程序增加0.01s10ms)計數(shù)器,并修改相應(yīng)計數(shù)顯示程序。仿真電路和Hex文件能在清華出版社網(wǎng)站免費(fèi)下載,程序源代碼只能到書上看了。到圖書館借,或到新華書店翻閱,或到網(wǎng)上書店打折購買。

作者: 長河流月    時間: 2017-6-6 18:12
a11123 發(fā)表于 2017-6-5 21:00
有沒有這個的仿真圖分享一下  剛好也是做這個

你有這個的代碼嗎?可以分享一下嗎?
作者: 長河流月    時間: 2017-6-6 18:15
zl2168 發(fā)表于 2017-6-5 21:20
介紹你一個案例,顯示方式有些不同,供你參考。
實(shí)例96  能預(yù)置初值的倒計時秒表
先Proteus仿真一下,確 ...

謝謝了
作者: jubaolun    時間: 2017-6-7 20:23
我這里剛給別人做的,經(jīng)過了仿真,做了實(shí)物。現(xiàn)成的
作者: jubaolun    時間: 2017-6-7 20:24
加QQ:2279196123
作者: 文龍    時間: 2017-6-8 20:14
采用了




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1