欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5115|回復: 8
收起左側

單片機30秒,300秒,600秒三檔倒計時,key1按鍵切換時間,key2鍵LED點亮,松手后啟動

  [復制鏈接]
ID:708110 發表于 2020-3-14 10:31 | 顯示全部樓層 |閱讀模式
/30秒,300秒,600秒三檔倒計時,key1按鍵切換時間,key2鍵LED點亮,松手后啟動倒計時,數碼管顯示數值每秒減1,
//倒計時結束,LED熄滅,數碼管顯示設定值;如果倒計時沒結束時,再按下key2鍵,倒計時時間置設定值重新計時
//仿真通過
#include <reg52.h>
#define uchar unsigned char
#define uint  unsigned int
sbit led = P1^7;
sbit key1 = P1^0; //時間切換鍵
sbit key2 = P1^1; //啟動按鍵
sbit we1 = P2^0;  //數碼管位端口
sbit we2 = P2^1;
sbit we3 = P2^2;
uchar knum;                  //key1按鍵按下次數計數變量
uchar cont;                  //中斷次數變量
uint cont1=30,cont2=300,cont3=600;        //定義時間變量并賦值30秒,300秒,600秒
uchar code LedTab[]=  //定義共陰極數碼管段碼
   {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};
void delay(uint z)
{
        uint x,y;
        for(x=z; x>0; x--)
                for(y=114; y>0; y--);
}
void display1(uint shu)
{
        we1 = 0;
        P0 = LedTab[shu/100];
        delay(5);
        we1 = 1;
        we2 = 0;
        P0 = LedTab[shu%100/10];
        delay(5);
        we2 = 1;
        we3 = 0;
        P0 = LedTab[shu%10];
        delay(5);
        we3 = 1;
}
void keyscan()
{
        if(key1==0)
        {
                delay(5);
                if(key1==0)
                {
                        while(!key1);
                        knum++;
                        if(knum==3)
                                knum=0;
                }
        }
        if(key2 == 0)
        {
                delay(5);
                if(key2 == 0)         //key2按下
                {
                        led = 0;         //點亮LED,松手后啟動倒計時
                        while(!key2)        //這句后面不加分號,下一句調用顯示函數,按鍵時數碼管才不會滅
                        {
//                                if(knum==0)
//                                display1(cont1);
//                                if(knum==1)
//                                display1(cont2);
//                                if(knum==2)
//                                display1(cont3);
                                switch(knum)
                                {
                                         case 0: display1(cont1);  break;
                                         case 1: display1(cont2);  break;
                                         case 2: display1(cont3);  break;
                                }
                                TR0 = 1;         //啟動定時器
        //                        led = 0;         //點亮LED
                                cont1=30;
                                cont2=300;
                                cont3=600;
                        }
                }
        }
}
void main()
{
        TMOD = 0X01;                          //T0定時器,模式1, 16位計數
        TH0 = (65536-46082)/256;  //50ms初值
        TL0 = (65536-46082)%256;
        EA = 1;                         //開總中斷
        ET0 = 1;                 //開定時器中斷
        while(1)
        {
                keyscan();
                switch(knum)
                {
                         case 0: display1(cont1); cont2=300; cont3=600; break;
                         case 1: display1(cont2); cont1=30; cont3=600; break;
                         case 2: display1(cont3); cont1=30; cont2=300; break;
                }
        }
}
void timer0() interrupt 1
{
        TH0 = (65536-46082)/256; //重裝初值
        TL0 = (65536-46082)%256;
        cont++;
        if(cont == 20)
        {
                cont = 0;
                switch(knum)
                {
                        case 0: cont1--;
                                        if(cont1==0)
                                        {
                                                cont1=30;  //倒計時時間到
                                                led=1;           //熄滅LED
                                                TR0=0;           //關閉定時器
                                        } break;
                        case 1: cont2--;
                                        if(cont2==0)
                                        {
                                                cont2=300;
                                                led=1;
                                                TR0=0;
                                        } break;
                        case 2: cont3--;
                                        if(cont3==0)
                                        {
                                                cont3=600;
                                                led=1;
                                                TR0=0;
                                        } break;
                }
        }
}
回復

使用道具 舉報

ID:1 發表于 2020-3-14 12:50 | 顯示全部樓層
本帖需要重新編輯補全電路原理圖,源碼,詳細說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
回復

使用道具 舉報

ID:478073 發表于 2020-3-14 13:18 | 顯示全部樓層
admin 發表于 2020-3-14 12:50
本帖需要重新編輯補全電路原理圖,源碼,詳細說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)

真不明白為什這么簡單的東東還要別人給電路,電路完全能從下面這些代碼中畫出來
sbit led = P1^7;
sbit key1 = P1^0; //時間切換鍵
sbit key2 = P1^1; //啟動按鍵
sbit we1 = P2^0;  //數碼管位端口
sbit we2 = P2^1;
sbit we3 = P2^2;
P0 = LedTab
回復

使用道具 舉報

ID:214276 發表于 2020-3-24 15:44 | 顯示全部樓層
這個程序和在開發板上調試了一下可行,想請教樓主一個問題,你這個程序就是按鍵按下去了松開才開始倒計時,按鍵不松手就不會開始,如何能實現只要即使不松手按下就開始計時
回復

使用道具 舉報

ID:1045601 發表于 2023-5-30 11:19 來自觸屏版 | 顯示全部樓層
Mian里case 0: display1(cont1); cont2=300; cont3=600; break
回復

使用道具 舉報

ID:1045601 發表于 2023-5-30 11:20 來自觸屏版 | 顯示全部樓層
Mian里case 0: display1(cont1); cont2=300; cont3=600; break為什么要cont2=300; cont3=600
回復

使用道具 舉報

ID:863362 發表于 2023-5-30 12:48 | 顯示全部樓層
拋磚引玉

仿真圖

仿真圖

按鍵倒計時秒表.zip

73.73 KB, 下載次數: 12, 下載積分: 黑幣 -5

仿真文件和源程序

回復

使用道具 舉報

ID:169549 發表于 2023-5-30 16:19 | 顯示全部樓層
春風十里吹死你 發表于 2020-3-14 13:18
真不明白為什這么簡單的東東還要別人給電路,電路完全能從下面這些代碼中畫出來
sbit led = P1^7;
sbit ...

哥們,樓主也是為著群里的剛入門的同學著想的。必竟對于高手來說,很簡單,但是對于入門的朋友可能有些難度了。
回復

使用道具 舉報

ID:140489 發表于 2023-5-31 08:09 | 顯示全部樓層
http://www.raoushi.com/bbs/dpj-105379-1.html大家看看,這是我多年前寫著玩的一個程序,被樓主復制過來了
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表