欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
讓蜂鳴器只響一次的單片機程序寫法
[打印本頁]
作者:
dabing89
時間:
2018-10-13 15:55
標題:
讓蜂鳴器只響一次的單片機程序寫法
在實際的開發中,往往會用到按鍵,客戶要求按下按鍵的時候,最好有蜂鳴器提示一下,但是也就是提示一下,就不要再響了,還有些客戶,系統運行結束后,要求長響3秒或者5秒作為報警,然后也停止運行,這個程序就是這個作用,我們開發板上用的是無源的蜂鳴器,我們這個程序沒有加按鍵,如果加按鍵的話,只要在按下按鍵的時候,清零flag_beep這個變量就好了,程序就會起到按下一次按鍵響一次的效果。
/********************************************************
*描述:蜂鳴器上電只響一次 ,可以通過按鍵清除標志位,然后按一次響一次
********************************************************/
#include "stc15w.h"
#include "intrins.h" //包含左移和右移指令
#include "string.h" //字符串
#include "stdio.h" //標準輸入輸出
/*******************************************************************************
* 文件名:位定義
* 描 述:
* 功 能:
* 作 者:大核桃
* 版本號:1.0.1(2017.05.23)
*******************************************************************************/
bit flag500ms = 0;//500ms翻轉一次
bit staBuzzer = 0;
bit flag200ms = 0;
sbit LED0 = P1^0;//
sbit BEEP = P3^5;//
sbit DATA0 = P2^0;//
sbit DATA1 = P2^1;//
sbit DATA2 = P2^2;//
sbit DATA3 = P2^3;//
sbit DATA4 = P2^4;//
sbit DATA5 = P2^5;//
sbit DATA6 = P2^6;//
sbit DATA7 = P2^7;//
typedef unsigned char uint8;//0-255
typedef unsigned int uint16;//0-65535
typedef unsigned long uint32;//0-65535*65535
/*******************************************************************************
* 文件名:函數前置聲明
* 描 述:
* 功 能:
* 作 者:大核桃
* 版本號:1.0.1(2017.05.23)
*******************************************************************************/
void Bsp_Power_Init(void);
void Delay500ms(); //@11.0592MHz
void Timer0Init(void); //1毫秒@11.0592MHz
void KeyBeepState(uint8 sta);
void Beep(void);
/*******************************************************************************
* 文件名:主循環入口
* 描 述:
* 功 能:
* 作 者:大核桃
* 版本號:1.0.1(2017.05.23)
*******************************************************************************/
void main(void)
{
uint8 i = 0;
Bsp_Power_Init();//LED端口初始化
Timer0Init(); //定時器0初始化函數
LED0 = 1;
while(1);
}
/*******************************************************************************
* 文件名:void Bsp_Power_Init()
* 描 述: 數碼管上電顯示
* 功 能:編程模塊化
* 作 者:大核桃
* 版本號:1.0.1(2017.05.23)
*******************************************************************************/
void Bsp_Power_Init(void)
{
P0M1 = 0xFC;
P0M0 = 0X03;
P0 = 0X00;
P1M1 = 0xE0;
P1M0 = 0X1F;
P1 = 0X00;
//P2口開漏輸出
P2M1 = 0XFF;
P2M0 = 0XFF;
P2 = 0Xff;
// //P54,P55口為推挽輸出
P5M1 = 0X00;
P5M0 = 0X00;
P5 = 0xFF;
//P37,P36,3.2,P3.3 P3.4口為推挽輸出
P3M1 = 0X00;
P3M0 = 0XFC;
P3 = 0X23;
}
/*******************************************************************************
* 文件名:void Delay500ms() //@11.0592MHz
* 描 述: 普通延時函數
* 功 能:編程模塊化
* 作 者:大核桃
* 版本號:1.0.1(2017.05.23)
*******************************************************************************/
//void Delay500ms() //@11.0592MHz
//{
// unsigned char i, j, k;
//
// _nop_();
// _nop_();
// i = 22;
// j = 3;
// k = 227;
// do
// {
// do
// {
// while (--k);
// } while (--j);
// } while (--i);
//}
/*******************************************************************************
* 文件名:void Timer0Init(void)
* 描 述: 定時器0配置
* 功 能:編程模塊化
* 作 者:大核桃
* 版本號:1.0.1(2017.05.23)
*******************************************************************************/
void Timer0Init(void) //1毫秒@11.0592MHz
{
AUXR &= 0x7F; //定時器時鐘12T模式
TMOD &= 0xf0; //設置定時器模式
TMOD |= 0x01; //設置定時器模式
TL0 = (65535 - 1000) % 256;//設置定時初值
TH0 = (65535 - 1000) / 256;//設置定時初值
ET0 = 1; //打開定時器0中斷使能
TR0 = 1; //定時器0開始計時
EA = 1; //打開總中斷使能
}
void Timer0_inter(void) interrupt 1
{
static uint16 tmr1s = 0;
static bit flag_beep = 0;
//自動重載,初值可以不需要寫
TL0 = (65535 - 1000) % 256; //設置定時初值
TH0 = (65535 - 1000) / 256; //設置定時初值
tmr1s++;
if(tmr1s >= 1000)
{
tmr1s = 0;
if(flag_beep == 0)
{
KeyBeepState(1);
}
flag_beep = 1;
}
Beep();
}
void Beep(void)
{
static uint8 tmr1ms = 0;
static uint16 tmr1s = 0;
if(staBuzzer)
{
tmr1ms++;
if(tmr1ms >= 1)
{
tmr1ms = 0;
BEEP = ~BEEP;
tmr1s++;
}
if(tmr1s >= 200)//延時時間長短
{
tmr1s = 0;
staBuzzer = 0;
}
}
else
{
BEEP = 1;
}
}
/*******************************************************************************
* 文件名: void KeyBeepState(bit sta)
* 描 述: //1開按鍵音 0關閉按鍵音
* 功 能:模塊化編程
* 作 者:大核桃
* 版本號:1.0.1(2015.03.03)
*******************************************************************************/
void KeyBeepState(uint8 sta)
{
if(sta)
{
staBuzzer = 1;
}
else
{
staBuzzer = 0;
}
}
復制代碼
代碼下載
013 蜂鳴器的使用.rar
(34.96 KB, 下載次數: 60)
2018-10-13 15:54 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
alex-yang
時間:
2019-2-15 17:07
大神你這個程序長按會有長鳴,不想要長鳴要怎么解決?求解
作者:
找人PK
時間:
2019-3-10 09:24
很好的作品,收下了!謝謝分享!
作者:
Joker-company
時間:
2021-4-16 23:27
好資料,51黑有你更精彩!!!
作者:
wyl138
時間:
2022-10-31 19:57
我對樓主的無私奉獻精神感動了,謝謝!謝謝
作者:
cb474265474265
時間:
2022-11-3 05:17
好資料,51黑有你更精彩!
作者:
18680365301
時間:
2023-4-4 16:38
//功能:
//調用方式:10毫秒調用一次
void Beep_Control(void)
{
if(Beep_Run_Time == 0)
{
if(Beep)
{
//IO設置為強推輸出
if(Beep & 0x01)
{
Beep_Out_En = 1;
}
else
{
Beep_Out_En = 0;
}
Beep >>= 1;
Beep_Run_Time = BEEP_ON_TIME;
}
else
{
//IO設置為模擬輸入
Beep_Out_En = 0;
//BEEP_IO = BEEP_OFF; //防止蜂鳴器長時間導通
}
}
else
{
Beep_Run_Time--;
}
}
// //功能:蜂鳴器硬件驅動
// //調用方式:125us中斷內調
void Beep_Drive(void)
{
if(Beep_Out_En)
{
BEEP_IO = !BEEP_IO ;
}
}
if(Key_Down & KEY1)
{
Key_Down &= ~KEY1;
Beep = 0x0001;//蜂鳴器響100ms
}
if(Key_Down & KEY2)
{
Key_Down &= ~KEY2;
Beep = 0x0005;//蜂鳴器響100ms 停100ms 響100ms
}
if(Key_Down & KEY3)
{
Key_Down &= ~ KEY3;
Beep = 0x001f;//蜂鳴器響500ms
}
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1