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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 27025|回復: 12
收起左側

想讓蜂鳴器只響5秒,怎樣改?

  [復制鏈接]
ID:113369 發表于 2016-6-3 17:25 | 顯示全部樓層 |閱讀模式

#include"reg52.h"
#define uint unsigned int
#define uchar unsigned char


sbit beep=P3^5;
bit flag;
uint x,y;

void init()                              //初始化,開定時器0
{
         TMOD=0x01;
         TCON=0x10;   
           TH0=(65536-x)/256;     
         TL0=(65536-y)%256;
         IE=0x82;
}

void main()
{
        init();
        while(1)
        {
                while(flag);
                flag=0;
                if(x<50000)
                {
                        y+=500;
                //        x+=50;
                }
                else x=y=100;
        }
}

void timer0() interrupt 1    //定時器中斷
{
        flag=0;
        beep=!beep;
        TH0=(65536-x)/256;
        TL0=(65536-y)%256;
}
回復

使用道具 舉報

ID:123289 發表于 2016-6-3 19:31 | 顯示全部樓層
本帖最后由 yzwzfyz 于 2016-6-3 19:33 編輯

1、做一個時間中斷并計時。
2、在時間中斷程序中做一個蜂鳴計時器K。
3、設置一個標記BEEL,當BEEL=1時就起動蜂鳴器,=0時就關閉蜂鳴器。
4、當BEEL=1時(由你在需要蜂鳴的時候置1),時間中斷程序進行一次K+1,并判斷K是否>=5秒。是:則關閉蜂鳴器,并清BELL=0,K=0。不是:則不處理,即保持現狀。
5、主程序MAIN中不需要做什么,只(由你在需要蜂鳴的時候置1)。
回復

使用道具 舉報

ID:123289 發表于 2016-6-3 19:33 | 顯示全部樓層
你的程序問題是:中斷程序中缺少一個計時器,對蜂鳴器進行計時。
回復

使用道具 舉報

ID:113369 發表于 2016-6-3 20:26 | 顯示全部樓層
yzwzfyz 發表于 2016-6-3 19:31
1、做一個時間中斷并計時。
2、在時間中斷程序中做一個蜂鳴計時器K。
3、設置一個標記BEEL,當BEEL=1時就 ...

可以幫忙修改一下嗎?
回復

使用道具 舉報

ID:123289 發表于 2016-6-3 21:09 | 顯示全部樓層
說到這個份上了,你應當自己做了。
回復

使用道具 舉報

ID:124970 發表于 2016-6-3 21:47 | 顯示全部樓層
最簡單的方法,寫個delay_ms的函數,放在while里,在增加個計數變量,計數5000次退出while,這樣比你直接在while計數,定時準確度要高一點,就行了!
回復

使用道具 舉報

ID:125016 發表于 2016-6-4 10:34 | 顯示全部樓層
做一個delay延遲函數
5秒就是5000ms
void delay(uint x)
{
    uint i,j;
    for(i=x;i>0;i--)
        for(j=110;j>0;--);
}
定義蜂鳴器為fmq=
void fmq0()
{
    fmq=0;
    delay(5000);
    fmq=1;
}
回復

使用道具 舉報

ID:125038 發表于 2016-6-4 11:04 | 顯示全部樓層
本帖最后由 TIMEKILLER 于 2016-6-4 11:20 編輯

因為定時器0的定時時間是不斷變化的,所以就簡單考慮,你需要再用一個定時器1,來對定時器0的中斷開關進行控制。為了增強實時性,可以不用定時器1中斷,在定時器0中斷里對定時器1的TH1/TL1寄存器當前值進行判斷。int i ;
if(((TH1<<8+TL1)>=50000)&&i<10)
{
    i++;
    TH1=0;
    TL=0;
}
else
{  
    ET0=0;/*時間到,關掉定時器0中斷,蜂鳴器停止*/
    i=0;
    TH1=0;
    TL1=0;
}
回復

使用道具 舉報

ID:125115 發表于 2016-6-4 19:03 | 顯示全部樓層
延時5s
回復

使用道具 舉報

ID:125128 發表于 2016-6-4 20:34 | 顯示全部樓層
用計時器計數時間5s后條件循環停止
回復

使用道具 舉報

ID:125162 發表于 2016-6-5 00:21 | 顯示全部樓層
需要計時器
回復

使用道具 舉報

ID:125168 發表于 2016-6-5 02:33 | 顯示全部樓層
停timer0
回復

使用道具 舉報

ID:110895 發表于 2016-6-5 10:20 | 顯示全部樓層
做個定時5S的定時器,啟動定時器時,讓蜂鳴器響,定時到時讓蜂鳴器停,同時停定時器。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 男人天堂久久 | 日韩尤物视频 | 91精品久久久久久久 | 久久国产精品一区二区三区 | 欧美一区二区三区在线看 | 亚洲精品一区在线观看 | 久久国产精品精品国产色婷婷 | 久久久久亚洲 | 亚洲综合激情 | 中文字幕在线观 | 99成人| 在线观看国产 | 日韩视频一区二区 | 国产精品特级毛片一区二区三区 | 亚洲美女在线视频 | 在线免费观看a级片 | 久久久精品一区二区三区 | 视频一区二区中文字幕 | 丝袜美腿一区 | 亚洲一区二区电影在线观看 | 久久在看 | 97热在线 | 一区二区三区四区在线 | 亚洲午夜网 | 日韩波多野结衣 | 高清欧美性猛交 | 中文字幕精品视频 | 久久99久久99久久 | 亚洲视频在线看 | 中国一级特黄真人毛片 | 久久久久久久久毛片 | 日韩成人在线免费观看 | 免费久久视频 | 粉嫩一区二区三区四区公司1 | 伊人久久在线 | 97精品国产| 国产四区 | 91久久综合亚洲鲁鲁五月天 | 91久久综合亚洲鲁鲁五月天 | 91久久| 激情五月婷婷丁香 |