找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 4731|回復(fù): 13
打印 上一主題 下一主題
收起左側(cè)

哪位大佬幫做一下倒計(jì)時(shí)器的程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
最近要求做一個(gè)51單片機(jī)的倒計(jì)時(shí)器程序,可是做了好久也做不出來(lái),看了很多都不太符合要求,就請(qǐng)大家?guī)蛡(gè)忙。
要求用C語(yǔ)言做。
倒計(jì)時(shí)計(jì)時(shí)器
1、LCD1602顯示倒計(jì)時(shí)時(shí)間
2、時(shí)間到蜂鳴提醒
3、獨(dú)立按鍵設(shè)定時(shí)長(zhǎng)(分鐘為單位)

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:202435 發(fā)表于 2017-5-19 10:45 | 只看該作者
像這個(gè)好像是數(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;//開(kāi)始、暫停按鍵
sbit Key_esc=P3^7;        //清除按鍵
sbit beep=P2^3;                //蜂鳴器
sbit wela=P2^7;                //位鎖存器
sbit dula=P2^6;                //段鎖存器

uint cnt,min,sec; //中斷計(jì)數(shù)、分、秒
bit flag;                //開(kāi)始位
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};//位編號(hào)

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

//鍵盤(pán)控制
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) //開(kāi)始位
        {
                delay(50);
                if(!Key_enter) flag=~flag;
                while(!Key_enter);
        }

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

}

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

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

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

        }
}

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

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

        TH1=0xf0; //定時(shí)器初始值
        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;
}
回復(fù)

使用道具 舉報(bào)

板凳
ID:202435 發(fā)表于 2017-5-19 13:54 | 只看該作者
有哪位會(huì)的大神幫忙嗎?
回復(fù)

使用道具 舉報(bào)

地板
ID:202435 發(fā)表于 2017-6-3 15:16 | 只看該作者
看起來(lái)沒(méi)人了
回復(fù)

使用道具 舉報(bào)

5#
ID:208017 發(fā)表于 2017-6-5 15:56 | 只看該作者
這些都是最基本的網(wǎng)上找找例程就好了
回復(fù)

使用道具 舉報(bào)

6#
ID:47286 發(fā)表于 2017-6-5 16:50 | 只看該作者
本帖最后由 dzbj 于 2017-6-5 20:42 編輯

你做個(gè)定時(shí)器 比如每1s產(chǎn)生一次中斷 然后用一個(gè)變量做計(jì)數(shù) 在沖斷外的程序里 用一個(gè)變量紀(jì)錄倒計(jì)時(shí)的最大數(shù) 不斷用倒計(jì)時(shí)最大數(shù)-變量就是剩余時(shí)間 就相當(dāng)于每s減一下
回復(fù)

使用道具 舉報(bào)

7#
ID:208172 發(fā)表于 2017-6-5 21:00 | 只看該作者
有沒(méi)有這個(gè)的仿真圖分享一下  剛好也是做這個(gè)
回復(fù)

使用道具 舉報(bào)

8#
ID:111634 發(fā)表于 2017-6-5 21:20 | 只看該作者
本帖最后由 zl2168 于 2017-6-5 21:21 編輯

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

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

使用道具 舉報(bào)

9#
ID:202435 發(fā)表于 2017-6-6 18:12 | 只看該作者
a11123 發(fā)表于 2017-6-5 21:00
有沒(méi)有這個(gè)的仿真圖分享一下  剛好也是做這個(gè)

你有這個(gè)的代碼嗎?可以分享一下嗎?
回復(fù)

使用道具 舉報(bào)

10#
ID:202435 發(fā)表于 2017-6-6 18:15 | 只看該作者
zl2168 發(fā)表于 2017-6-5 21:20
介紹你一個(gè)案例,顯示方式有些不同,供你參考。
實(shí)例96  能預(yù)置初值的倒計(jì)時(shí)秒表
先Proteus仿真一下,確 ...

謝謝了
回復(fù)

使用道具 舉報(bào)

11#
ID:105206 發(fā)表于 2017-6-7 20:23 | 只看該作者
我這里剛給別人做的,經(jīng)過(guò)了仿真,做了實(shí)物,F(xiàn)成的
回復(fù)

使用道具 舉報(bào)

12#
ID:105206 發(fā)表于 2017-6-7 20:24 | 只看該作者
加QQ:2279196123
回復(fù)

使用道具 舉報(bào)

13#
ID:151834 發(fā)表于 2017-6-8 20:14 | 只看該作者
采用了
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表