久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2544|回復: 13
打印 上一主題 下一主題
收起左側

單片機程序怎么修改設置好對應時間,等待10s左右自動倒計時,不用按鍵觸發倒計時

[復制鏈接]
跳轉到指定樓層
樓主
ID:858009 發表于 2021-10-28 11:56 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  1. #include<reg51.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. uchar min,sec,count,sec1,sec2,min0,min1,min2,keystopc,temp;
  5. sbit keystop=P3^0;
  6. sbit keyh=P3^1;
  7. sbit keym=P3^2;
  8. sbit keys=P3^3;
  9. sbit lcden=P3^4;
  10. sbit lcdrw=P3^6;
  11. sbit lcdrs=P3^5;
  12. uchar code table[]={'0','1','2','3','4','5','6','7','8','9',':'};
  13. void init()                                                //定時器初始化
  14. {
  15.         count=0;
  16.         min=0;
  17.         sec=59;
  18.         TMOD=0x01;
  19.         TH0=(65536-50000)/256;
  20.         TL0=(65536-50000)%256;
  21.         TR0=0;
  22.         ET0=1;
  23.         EA=1;
  24. }
  25. void delay(uint z)                //延時程序
  26. {
  27.         uint x,y;
  28.         for(x=z;x>0;x--)
  29.          for(y=110;y>0;y--);
  30. }
  31. /**************************************************************
  32. ------LCD1602顯示函數------
  33. *************************************************************/
  34. void write_com(uchar com)
  35. {
  36.         lcdrs=0;
  37.         P0=com;
  38.         delay(5);
  39.         lcden=1;
  40.         delay(5);
  41.         lcden=0;
  42. }
  43. void write_data(uchar date)
  44. {
  45.         lcdrs=1;
  46.         P0=date;
  47.         delay(5);
  48.         lcden=1;
  49.         delay(5);
  50.         lcden=0;
  51. }
  52. void init_1602()                                //初始化1602
  53. {
  54.         lcden=0;
  55.         lcdrw=0;
  56.         write_com(0x38);
  57.         write_com(0x0c);
  58.         write_com(0x06);
  59.         write_com(0x01);
  60.         write_com(0x80);
  61. }
  62. void write_Char(unsigned char x,unsigned char y,unsigned char date)
  63. {
  64.          if (y == 0)
  65.          {
  66.                 write_com(0x80 + x);     
  67.          }
  68.         else
  69.          {
  70.                 write_com(0xC0 + x);     
  71.          }
  72.         write_data(date);  
  73. }
  74. void display(uchar min0,uchar min1,uchar min2,uchar sec1,uchar sec2)         //顯示程序
  75. {        
  76.         write_Char(3,0,table[min0]);
  77.         write_Char(4,0,table[min1]);
  78.         write_Char(5,0,table[min2]);
  79.         write_Char(6,0,table[0x0a]);
  80.         write_Char(7,0,table[sec1]);
  81.         write_Char(8,0,table[sec2]);
  82. }
  83. /************************************************************
  84. ------計時器/定時器0-----
  85. *************************************************************/
  86. void count0() interrupt 1
  87. {
  88.         TH0=(65536-50000)/256;
  89.         TL0=(65536-50000)%256;
  90.         count++;
  91.         if(count==20)
  92.                 {
  93.                         count=0;
  94.                         if(sec==0)
  95.                         {
  96.                                 if (min!=0)
  97.                                 {
  98.                                         sec=59;
  99.                                         min--;
  100.                                 }                                
  101.                         }
  102.                         else sec--;
  103.                 }
  104. }
  105. /************************************************************
  106. ------主函數------
  107. *************************************************************/
  108. void main()
  109. {
  110.         init();
  111.         init_1602();
  112.         while(1)
  113.         {               
  114.                 if(keystop==0)                             //檢測是否停止鍵按下
  115.                 {
  116.                         delay(10);
  117.                         if(keystop==0)
  118.                         {
  119.                                 if(keystopc!=1)   keystopc++;      //按停止鍵的次數        
  120.                                 else              keystopc=0;
  121.                                 while(keystop==0);                 //松手檢測
  122.                                 delay(5);
  123.                                 while(keystop==0);
  124.                         }
  125.                         switch(keystopc)
  126.                         {
  127.                                 case 1:TR0=0;break;                // 按鍵一次就停止計數
  128.                                 case 0:TR0=1;break;
  129.                                 default:break;
  130.                         }
  131.                 }
  132.                 if(keyh==0)                 //實現小時加一
  133.                 {
  134.                         delay(50);
  135.                         if(keyh==0)
  136.                         {        
  137.                                 if(min!=110)
  138.                                 {
  139.                                         min++;
  140.                                 }
  141.                         }
  142.                         while(!keym);                  //松手檢測
  143.                         delay(5);
  144.                         while(!keym);
  145.                 }
  146.                 if(keym==0)              //實現分鐘加一
  147.                 {
  148.                         delay(100);
  149.                         if(keym==0)
  150.                         {        
  151.                                 if(min!=0)
  152.                                 {
  153.                                         min--;
  154.                                 }
  155.                         }
  156.                         while(!keyh);                //松手檢測
  157.                         delay(5);
  158.                         while(!keyh);
  159.                 }
  160.                 min0=min/100;
  161.                 min1=min%100/10;
  162.                 min2=min%10;
  163.                 sec1=sec/10;
  164.                 sec2=sec%10;
  165.                display(min0,min1,min2,sec1,sec2);  //一直顯示時鐘               
  166.         }
  167. }

復制代碼
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:480510 發表于 2021-10-28 14:00 | 只看該作者
再用一個定時器來控制10秒
回復

使用道具 舉報

板凳
ID:624769 發表于 2021-10-28 14:25 | 只看該作者
bit  T_run;             <==== 增加全局變量

/************************************************************
------計時器/定時器0-----
*************************************************************/
void count0() interrupt 1
{
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        count++;
        if(T_run)               <==== 增加
        {
        if(count>=20)
                {
                        count=0;
                        if(sec==0)
                        {
                                if (min!=0)
                                {
                                        sec=59;
                                        min--;
                                }                                
                        }
                        else sec--;
                }
          }
          else                      <==== 增加
          {
                 if(count >= 200)           <==== 增加
                 {
                           T_run = 1;                  <==== 增加
                           count = 0;                 <==== 增加
                  }
          }
}
/************************************************************
------主函數------
*************************************************************/
void main()
{
        init();
        init_1602();
        TR0 = 1         <==== 增加
        while(1)
        {               
                if(keystop==0)                             //檢測是否停止鍵按下
                {
                        delay(10);
                        if(keystop==0)
                        {
                                if(keystopc!=1)   keystopc++;      //按停止鍵的次數        
                                else              keystopc=0;
                                while(keystop==0);                 //松手檢測
                                delay(5);
                                while(keystop==0);
                        }
                        switch(keystopc)
                        {
//                                case 1:TR0=0;break;                // 按鍵一次就停止計數
//                                case 0:TR0=1;break;
                                case 1:T_run=0;break;           <==== 修改
                                case 0:T_run=1;break;           <==== 修改
                               default:break;
                        }
                }
                if(keyh==0)                 //實現小時加一
                {
                        delay(50);
                        if(keyh==0)
                        {        
                                if(min!=110)
                                {
                                        min++;
                                }
                                count = 0;             <==== 增加
                        }
                        while(!keym);                  //松手檢測
                        delay(5);
                        while(!keym);
                }
                if(keym==0)              //實現分鐘加一
                {
                        delay(100);
                        if(keym==0)
                        {        
                                if(min!=0)
                                {
                                        min--;
                                }
                                count = 0;                  <==== 增加
                        }
                        while(!keyh);                //松手檢測
                        delay(5);
                        while(!keyh);
                }
                min0=min/100;
                min1=min%100/10;
                min2=min%10;
                sec1=sec/10;
                sec2=sec%10;
               display(min0,min1,min2,sec1,sec2);  //一直顯示時鐘               
        }
}


慘不忍睹,只能改成這樣了
回復

使用道具 舉報

地板
ID:123289 發表于 2021-10-28 14:33 | 只看該作者
既然是計時就一定有開始和結束。
結束:可以由計時器計時10s后觸發。
開始:誰觸發呢?不用按鍵觸發,也需要你設置一個觸發的方式呀。哪怕你決定打個噴嚏也行啊。
回復

使用道具 舉報

5#
ID:858009 發表于 2021-10-28 14:41 | 只看該作者
yzwzfyz 發表于 2021-10-28 14:33
既然是計時就一定有開始和結束。
結束:可以由計時器計時10s后觸發。
開始:誰觸發呢?不用按鍵觸發,也 ...

這個是做一個倒計時的,只有兩個按鍵,一個控制分鐘加,一個控制分鐘減
看能不能自動觸發開始倒計時,設置倒計的時間后等待十秒,按鍵加和按鍵減沒有被按下,測開始倒計時,啟動定時器1
回復

使用道具 舉報

6#
ID:311846 發表于 2021-10-28 15:10 | 只看該作者
qwettyuio 發表于 2021-10-28 14:41
這個是做一個倒計時的,只有兩個按鍵,一個控制分鐘加,一個控制分鐘減
看能不能自動觸發開始倒計時,設 ...

那你再定時10秒啊!
回復

使用道具 舉報

7#
ID:123289 發表于 2021-10-29 09:46 | 只看該作者
本帖最后由 yzwzfyz 于 2021-10-30 11:27 編輯

很簡單的事!抓住要點:如何起,如何停。再想想,不要想程序如何寫,想想邏輯上是否說得通。
回復

使用道具 舉報

8#
ID:858009 發表于 2021-11-10 14:53 | 只看該作者

我想把那個暫停/啟動按鍵去掉,例如設置10分鐘倒計時,設置結束后等待10s啟動倒計時
回復

使用道具 舉報

9#
ID:858009 發表于 2021-11-10 14:57 | 只看該作者
yzwzfyz 發表于 2021-10-29 09:46
很簡單的事!抓住要點:如何起,如何停。再想想,不要想程序如何寫,想想邏輯上是否說得通。

原本使用一個按鍵控制啟動和暫停
現在想使用設置好對應時間,等待10s左右,開啟定時器進入倒計時,倒計時結束后定時器停止,蜂鳴器響3s停3s循環
回復

使用道具 舉報

10#
ID:624769 發表于 2021-11-10 15:15 | 只看該作者
qwettyuio 發表于 2021-11-10 14:53
我想把那個暫停/啟動按鍵去掉,例如設置10分鐘倒計時,設置結束后等待10s啟動倒計時

不是幫你改好了么?

你不要那個暫停/啟動 直接刪掉不就行了? 你程序試過沒有? 是不是那個鍵按不按都沒所謂?是的話,直接刪了不就沒有了?
回復

使用道具 舉報

11#
ID:858009 發表于 2021-11-10 15:58 | 只看該作者
188610329 發表于 2021-11-10 15:15
不是幫你改好了么?

你不要那個暫停/啟動 直接刪掉不就行了? 你程序試過沒有? 是不是那個鍵按不按都 ...

這個不能等待按鍵設置對應時間后等待10s再啟動定時器進入倒計時,倒計時結束后,定時器一直在啟動,沒有中斷停止
回復

使用道具 舉報

12#
ID:858009 發表于 2021-11-10 16:00 | 只看該作者
188610329 發表于 2021-11-10 15:15
不是幫你改好了么?

你不要那個暫停/啟動 直接刪掉不就行了? 你程序試過沒有? 是不是那個鍵按不按都 ...

有兩個加減按鍵設置時間的,倒計時結束后有蜂鳴器提示的,既要啟動,也要停止
回復

使用道具 舉報

13#
ID:624769 發表于 2021-11-10 16:21 | 只看該作者
qwettyuio 發表于 2021-11-10 15:58
這個不能等待按鍵設置對應時間后等待10s再啟動定時器進入倒計時,倒計時結束后,定時器一直在啟動,沒有 ...

這么改就是設好時間后,等10秒啟動啊,你不是要等10秒啟動么? 定時器關了,怎么判斷10秒?

至于停止,你原來怎么停的?你原來停的地方, 只要T_run = 0, 就停了啊,我只看到你按鍵的地方,所以那里我幫你寫了 T_run = 0;
但是,其他地方,我沒看到,你有其他停的地方,你手動把 T_run = 0, 反正, TR0 是不能 =0 的 不然,沒辦法10秒自己啟動。
回復

使用道具 舉報

14#
ID:624769 發表于 2021-11-10 16:23 | 只看該作者
qwettyuio 發表于 2021-11-10 16:00
有兩個加減按鍵設置時間的,倒計時結束后有蜂鳴器提示的,既要啟動,也要停止

你原程序里哪里有到時間蜂鳴器響的判斷? 你原程序里沒有,我幫你憑空加出來?
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品1区 | 久久精品国产免费 | 精品视频一区二区 | 青青草在线视频免费观看 | 欧美一级片在线观看 | 亚洲日本成人 | 久久成人一区二区三区 | 九色网址 | 精品久久久久久亚洲精品 | 亚洲a在线观看 | 久久久精品一区 | 亚洲精品黄 | 日韩在线| 中文字幕一区二区三区在线观看 | 亚洲最大的成人网 | 特级毛片| 久久精品亚洲精品国产欧美 | 国产精品久久久久久久久久妞妞 | 国产精品一二区 | 国产一区二区三区四区hd | av免费成人 | 成人精品国产免费网站 | 孰女乱色一区二区三区 | 狠狠操狠狠干 | 中文字幕一区在线观看视频 | 亚洲视频在线免费观看 | 日本欧美在线 | 国精日本亚洲欧州国产中文久久 | 久久久久久亚洲 | 亚洲精品久久久久久久久久久久久 | 国产精品永久久久久久久www | 亚洲欧美一区二区三区情侣bbw | www.伊人.com | 欧美精品一二三 | 国产在线观看一区二区 | 国产一级淫片免费视频 | 精品久久久久久久久久久 | 最新国产精品 | 久产久精国产品 | 成人免费观看男女羞羞视频 | 精品在线视频播放 |