*描述:蜂鸣器上电只响一次 ,可以通过按键清除标志位,然后按一次响一次
#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 intuint16;//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关闭按键音
* 功能:模块化编程
* 作者:大核桃
*******************************************************************************/
void KeyBeepState(uint8 sta)
{
if(sta)
{
staBuzzer = 1;
}
else
{
staBuzzer = 0;
}
}