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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

15單片機定時開關程序

  [復制鏈接]
跳轉到指定樓層
樓主
以前發表過一個51單片機的,參考微波爐的方式,按一下加1分鐘,運行的時候可以隨時修改時間。現在把程序移植到15單片機上并優化。不再使用三極管擴流,用單片機推挽模式直接驅動,減少元件數量,能省就省。2,定時時間1-99分鐘,使用4位數碼管顯示倒計時時間,倒計時結束蜂鳴器響,繼電器斷開。

制作出來的實物圖如下:


電路原理圖如下:

代碼如下:
#include<STC15.h>
#define KeyPort P1

unsigned char KeyV,TempKeyV,num;

       ///////////////  定義數碼管 ////////////////                                                      

sbit DS1=P3^7;        //數碼管第1位
sbit DS2=P3^6;        //數碼管第2位
sbit DS3=P3^5;        //數碼管第3位
sbit DS4=P3^4;        //數碼管第4位
          //////////////////定義按鍵         /////////////////
sbit Key_UP=P1^0;     ///啟動
sbit Key_DOWN=P1^1;   ///停止
sbit PA=P1^2;         ///時間加
sbit PB=P1^3;         ///時間減
            //////////////////定義輸出         /////////////////
sbit JDQ=P1^5;        //繼電器
sbit FMQ=P1^6;        //蜂鳴器
sbit LED1=P1^4;       //LED啟動
sbit LED2=P1^7;       //LED停止
unsigned int js;
unsigned int ds=100,x,y;//倒計時初始時間,加時,減時  30分鐘
unsigned char jsflag;
static unsigned int i;
unsigned char code LEDDis[]={  
        0xBF,/*0*/
        0x86,/*1*/
        0xDB,/*2*/
        0xCF,/*3*/
        0xE6,/*4*/
        0xED,/*5*/
        0xFD,/*6*/
        0x87,/*7*/
        0xFF,/*8*/
        0xEF,/*9*/
};
  unsigned char KeyScan(void);//鍵盤掃描
  void tiaojie(void);
void Delay(unsigned int ii)        //1MS
{
unsigned int jj;
for(;ii>0;ii--)
for(jj=0;jj<125;jj++);
}
void main()
{
        EA = 1;             //允許CPU中斷
        ET0 = 1;            //定時器0中斷打開
        ET1=1;              //定時器1中斷打開
        TMOD = 0x11;        //設定時器0 1為模式1,16位模式
        TH0=0xB8;
        TL0=0x00;           //設定時值為(20ms)
        TH1=0xdc;           //設定時值為(10ms)
        TL1=0x00;
        TR0 = 1;
        TR1=1;

        KeyV = 0;
        TempKeyV = 0;
        jsflag=0;
while(1);
}

//定時器0中斷外理中鍵掃描和顯示
void Key_Time0(void) interrupt 1 using 2
{
  TH0=0xB8;
        TL0=0x00;          //設定時值為20000us(20ms)
  if (!Key_UP)
    KeyV = 1;
  if (!Key_DOWN)
    KeyV = 2;

          if(PA==0)
          {
           Delay(20);
           if(PA==0)
            ds=ds+100;    //定時加1分鐘
                while(!P12);
          }
          if(PB==0)
          {
           Delay(20);
           if(PB==0)
           ds=ds-100;     //定時減1分鐘
           while(!P13);
          }
   if (KeyV!= 0)         //有鍵按下
    {
      Delay(10);         //延時防抖  按下10ms再測
      if (!Key_UP)
        TempKeyV = 1;
      if (!Key_DOWN)
        TempKeyV = 2;
                 if (KeyV == TempKeyV)   //兩次值相等為確定接下了鍵
           {
                 if (KeyV == 1)
           {
                 jsflag=0;
                 if(ds==0)
           {     ds=100;
                      }
                 js=js+1;
            JDQ=0;   //繼電器吸合
                        FMQ=1;   //蜂鳴器不響
                        LED1=0;   //LED不亮
            LED2=1;   //LED亮                                   
                 if(js==50)
           {
                 js=0;
                 ds=ds-1;
                      }
   }

                 if(KeyV==2)
           {
                 jsflag=1;
        }
          }
            }

   if(jsflag==1)
   {
                JDQ=1; //繼電器斷開
                FMQ=0;   //蜂鳴器響
                LED1=1;   //LED亮
                                LED2=0;   //LED不亮

   }
   if(ds==0)
   {                        JDQ=1;    //繼電器斷開
                FMQ=0;   //蜂鳴器響
                LED1=1;   //LED亮
                                LED2=0;   //LED不亮

   jsflag=1;
   KeyV=0;
   }

}
//////////////顯示函數
void disp_Time1(void) interrupt 3 using 3
{            
                P2M1 = 0x00; P2M0 = 0xFF; //P0口強推挽模式

        TH1=0xdc;
        TL1=0x00;
        x=ds/10000;



        y=(ds%10000)/1000;     //分鐘十位
        P2=LEDDis[y];
        DS1=0;
        Delay(2);
        DS1=1;                                //消隱

        P2=LEDDis[((ds%10000)%1000)/100];//分鐘各位
        DS2=0;
        Delay(2);                                //消隱
        DS2=1;                              



        P2=LEDDis[(((ds%10000)%1000)%100)/10]; //秒十位
        if(((ds%1000)%100)/10>=6)              //滿60,百位減一
      {
        ds=ds-10;
        P2=LEDDis[6];
  }
        DS3=0;
        Delay(2);
        DS3=1;                                         //消隱

        P2=LEDDis[(((ds%10000)%1000)%100)%10]; //秒個位
        DS4=0;
        Delay(2);
        DS4=1;                                         //消隱
}

15F204共陰版本.rar

137.57 KB, 下載次數: 124, 下載積分: 黑幣 -5

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:474921 發表于 2020-11-5 06:50 | 只看該作者
謝謝分享,不過我覺著要是把按鍵改成編碼器EC11來設定就更好了。
回復

使用道具 舉報

板凳
ID:704585 發表于 2020-11-6 17:54 | 只看該作者
感謝樓主分享
回復

使用道具 舉報

地板
ID:897089 發表于 2021-3-27 22:03 | 只看該作者
感謝樓主分享正需要這個
回復

使用道具 舉報

5#
ID:492633 發表于 2023-1-20 18:12 | 只看該作者
changhai 發表于 2020-11-5 06:50
謝謝分享,不過我覺著要是把按鍵改成編碼器EC11來設定就更好了。

把按鍵程序換成ec111就行
回復

使用道具 舉報

6#
ID:200118 發表于 2023-8-31 12:15 | 只看該作者
做一個試試。。。
回復

使用道具 舉報

7#
ID:437129 發表于 2024-10-24 13:43 | 只看該作者
樓主辛苦,感謝分享!
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 黄色毛片网站在线观看 | 一级国产精品一级国产精品片 | 亚洲国产一区二区三区在线观看 | 二区成人 | 一区在线播放 | 欧美日韩电影一区二区 | 男女激情网 | 国产蜜臀97一区二区三区 | 久久精品综合 | 97精品超碰一区二区三区 | 啪啪免费 | 久久一区二区视频 | 看片wwwwwwwwwww | 四虎影 | av网站在线看 | 久久伊| 亚洲视频一区在线观看 | 狠狠亚洲 | 一区二区在线 | 91看片视频 | 在线视频一区二区三区 | 久久99精品久久久久久国产越南 | 国产人成在线观看 | 国产伦精品一区二区三区精品视频 | 中文字幕精品一区 | 国产在线不卡视频 | 精品欧美一区二区三区久久久小说 | 伊人焦久影院 | 久久99深爱久久99精品 | 91在线| 午夜视频免费在线观看 | 久久国内 | 色欧美综合 | 91网在线播放 | 99精品一级欧美片免费播放 | 精品久久久久久久人人人人传媒 | 岛国av免费在线观看 | 一区二区国产在线观看 | 中文字幕日韩在线 | 人人人人干 | 成人小视频在线观看 |