1024手机基地看电影,午夜福利视频导航,国产精品福利在线一区,亚洲欧美日韩另类成人,在线观看午夜日本理论片,成年超爽免费网站,国产精品成人免费,精品动作一级毛片,成人免费观看网站,97精品伊人久久大香蕉
標題:
想實現單片機長按開、關機時蜂鳴器響一聲
[打印本頁]
作者:
匯源科技
時間:
2020-3-31 23:17
標題:
想實現單片機長按開、關機時蜂鳴器響一聲
下面的程序,短按轉換燈的工作模式同時響一聲蜂鳴器是實現了,但想實現長按開和關的時候也響一聲。是不是我放的位置的不對還是怎的,還是長按時按鍵有抖動,引起不正常?
單片機源程序如下:
#include "stc15w.h"
#include <intrins.H>
#define uint unsigned int
#define uchar unsigned char
#define MAIN_Fosc 11059200L
#define key_S 80 //短按(約20ms)
#define key_L key_S*100 //長按(約2s)
/*pin_mode*/
sbit key = P2^4; //按鍵
sbit led = P5^5; //指示燈 0亮
sbit buzzer=P1^0; //無源蜂鳴器
uint Cnt250us=0;Cnt1s;
bit ON=0;//開關機
bit keyn=0; //蜂鳴器 1時響
uchar n=0; //燈模式
uint tt=0; //響計時
uint t=0;
/*pin_mode*/
void port_mode()
{
P2M0 = 0x00;
P2M1 = 0x00;
P5M0 = 0x00;
P5M1 = 0x00;
led=1;//燈不亮
}
void readkey(void)
{
static uint count=0;
if(!key)
{
count++;
if(count==key_L) //長按開機,ON=1
ON=~ON;
//keyn=1;//沒加這個可以實現短按蜂鳴器響一聲,但想實現長按開、機也響一聲。
if(count>key_L)
count=key_L+1;
}
else
{
if(count>key_S && count<key_L) //短按切換燈模式
{
if(ON==1)
n++;
n%=3;
keyn=1; //短按置1蜂鳴器響
}
count=0;
}
}
void Timer0Init() //250微秒@11.0592MHz
{
AUXR |= 0x80;
TMOD &= 0xF0;
TL0 = 0x33;
TH0 = 0xF5;
TF0 = 0;
TR0 = 1;
}
void LED_M50() //燈模式三
{
if(TF0==0)
t++;
{
if(t>=500)
{
led=~led;
t=0;
}
}
}
void LED_M75() //燈模式二
{
if(TF0==0)
t++;
{
if(t<=2000)
{
led=1;
}
if(t>2000)
{
led=0;
if(t>=8000)
{
t=0;
}
}
}
}
/*
P1.1輸出PWM驅動無源蜂鳴器
*/
void initPWM1()//響一聲
{
if(keyn==1)
{
tt++;
PCA_PWM1 = 0x00; //開PWM
CMOD=0x80;
CCAPM1=0x42; // 設置PCA模塊為PWM輸出方式。PCA0
CR=1;
CCAP1H=0x80;
if(tt>=200)
{
PCA_PWM1 = 0x03; //關PWM
CR=0;
tt=0;
keyn=0;
}
}
}
void main()
{
port_mode();
Timer0Init();
while(1)
{
if(TF0==1)
{
TF0=0;
readkey();
initPWM1();//蜂鳴器
if(ON==1)
{
Cnt250us++;
if(Cnt250us>=4000)
{
Cnt250us=0;
Cnt1s++;
if(Cnt1s>=1200) //定時功能
{
Cnt1s =0;
ON=0;
led=1;
}
}
switch(n)
{
case 0 :led=0;break; //燈常亮
case 1 :LED_M75();break;//燈模式二
case 2 :LED_M50();break;//燈模式三
}
}
else //關機
{
Cnt250us=0;
Cnt1s= 0;
led=1;
ON=0;
}
}
}
}
作者:
還有誰?
時間:
2020-4-1 07:03
按鍵要放到定時中斷里面去做,你想,你細想
作者:
我還是你大爺
時間:
2020-4-1 13:06
不管長按,還是短按,按鍵都有抖動的,你的ON值不會是保持為1的,還有不要把按鍵寫在while(1)里,寫在定時中斷里,并且按鍵讀取的程序需要加消抖的算法。這種算法網上能找到。
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1