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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機計時器程序中如何添加蜂鳴器功能?

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:1000224 發(fā)表于 2022-1-6 11:19 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
就是一個計時器,總共100分鐘倒計時,開始時蜂鳴器響一下,然后倒計時到10分鐘,5分鐘,1分鐘各響一下

倒計時我已完成,現(xiàn)在這個蜂鳴器提示不知道怎樣添加,求指導(dǎo)

單片機源程序如下:
#include<reg51.h>
#define KeyPort P1
sbit Key_UP=P1^4;         //啟動
sbit Key_DOWN=P1^5;         //暫停
unsigned char KeyV,TempKeyV,num;                                                            
sbit P25=P2^5;//數(shù)碼管第1位
sbit P26=P2^4;//數(shù)碼管第2位
sbit P29=P2^3; //數(shù)碼管第3位
sbit gang=P2^0;          ///分隔符
sbit P27=P2^1;//數(shù)碼管第5位
sbit P28=P2^2;// 數(shù)碼管第6位
sbit P12=P1^6;//時間加
sbit P13=P1^7; //時間減
sbit fmq=P1^3;
sbit JDQ=P3^4;//繼電器

unsigned int js;
unsigned int ds=1000,x,y;//倒計時初始時間,加時,減時  30分鐘
unsigned char jsflag;
static unsigned int i;
unsigned char code LEDDis[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xFF,0xBF};
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;                        //設(shè)定時器0 1為模式1,16位模式
        TH0=0xB8;
        TL0=0x00;                                //設(shè)定時值為(20ms)
        TH1=0xdc;                                        //設(shè)定時值為(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;                                //設(shè)定時值為20000us(20ms)
  if (!Key_UP)
    KeyV = 1;
  if (!Key_DOWN)
    KeyV = 2;

          if(P12==0)
          {
                   Delay(20);
                   if(P12==0)
                   ds=ds+100;//定時加1分鐘         (調(diào)節(jié)精度)
                   while(!P12);
          }

          if(P13==0)
          {
                   Delay(20);
                   if(P13==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=1;   //繼電器吸合

                       if(js==50)
                       {
                         js=0;
                         ds=ds-1;

                       }
                                   }

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

   if(jsflag==1)
   {
                   JDQ=0;
   }

   if(ds==0)
   {
           JDQ=0;
           jsflag=1;
           KeyV=0;
   }

}

void disp_Time1(void) interrupt 3 using 3
{
        TH1=0xdc;
        TL1=0x00;
        x=ds/10000;
        
        P0=LEDDis[x]; //分鐘百位
        P25=0;
        Delay(2);
        P25=1;
        
        y=(ds%10000)/1000;//分鐘十位
        P0=LEDDis[y];
        P26=0;
        Delay(2);
        P26=1;
        
        P0=LEDDis[((ds%10000)%1000)/100];//分鐘各位
        P29=0;
        Delay(2);
        P29=1;                                
        
        P0=0xbf; //分鐘與秒的間隔符
        gang=0;
        Delay(2);
        gang=1;

        P0=LEDDis[(((ds%10000)%1000)%100)/10]; //秒十位
        if(((ds%1000)%100)/10>=6)          //滿60,百位減一
        {
                ds=ds-10;
                P0=LEDDis[6];
        }
        P27=0;
        Delay(2);
        P27=1;
        
        P0=LEDDis[(((ds%10000)%1000)%100)%10]; //秒個位
        P28=0;
        Delay(2);
        P28=1;
}
if(P25=1 P26=P29=0;)

else
{
fmq=1;
}


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

使用道具 舉報

沙發(fā)
ID:161164 發(fā)表于 2022-1-6 15:43 | 只看該作者
你的仿真都把蜂鳴器和繼電器的控制腳接在一起
還有必要改嗎?

另外,不要在中斷里用while()和delay
回復(fù)

使用道具 舉報

板凳
ID:1000224 發(fā)表于 2022-1-6 16:57 | 只看該作者
lkc8210 發(fā)表于 2022-1-6 15:43
你的仿真都把蜂鳴器和繼電器的控制腳接在一起
還有必要改嗎?

這個該如何改,苦惱
回復(fù)

使用道具 舉報

地板
ID:57657 發(fā)表于 2022-1-6 17:45 | 只看該作者

你這程序框架有嚴重問題,定時器中斷里還用了這么多delay函數(shù)?
無法修改,只能從頭寫。
回復(fù)

使用道具 舉報

5#
ID:213173 發(fā)表于 2022-1-6 20:27 | 只看該作者
樓主確定這個程序能通過編譯?基本作廢,重新寫吧。參考回帖http://www.zg4o1577.cn/bbs/forum.p ... 6409&highlight=
回復(fù)

使用道具 舉報

6#
ID:841538 發(fā)表于 2022-1-7 10:08 | 只看該作者
很多地方語法有問題,這些代碼無法運行,用proteus不能仿真。
回復(fù)

使用道具 舉報

7#
ID:57657 發(fā)表于 2022-1-7 11:59 | 只看該作者
你可以照著這個程序框架修改
http://www.zg4o1577.cn/bbs/dpj-214058-1.html
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 一级高清| 中文在线一区 | 亚洲精品乱码8久久久久久日本 | 国产综合在线视频 | 欧美在线不卡 | 毛片网站免费观看 | 色综合久久久久 | 欧美淫 | 久久久久亚洲精品 | 亚洲男人的天堂网站 | 日韩电影一区二区三区 | 暴草美女 | 日韩在线国产 | 2020亚洲天堂 | 国产精品福利在线 | 欧美一区二区三区四区视频 | 蜜臀久久99精品久久久久野外 | 激情三区 | 九九精品视频在线 | 黄网免费看 | 欧美一区不卡 | 韩国理论电影在线 | 欧美日韩亚洲视频 | 亚洲精品一区二区三区在线 | 中文天堂在线一区 | 久久不卡视频 | 国产 日韩 欧美 制服 另类 | 国产精品久久久久久久久久免费看 | 国产亚洲精品久久yy50 | www.av在线 | www.夜夜骑.com| 成人国产精品入口免费视频 | 午夜精品久久久久久久久久久久久 | 精品国产一区二区三区av片 | 99精品视频在线观看免费播放 | 亚洲国产一区二区三区在线观看 | 国产精品久久久久久福利一牛影视 | 亚洲一区二区三区视频在线 | 麻豆精品国产91久久久久久 | www.黄色片视频 | 亚洲成人精品国产 |