51_无源蜂鸣器

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
/**********************51单片机学习例程************************
*  平台:Keil U4 + STC89C52
*  名称:按键控制蜂鸣器,2KHz方波控制无源蜂鸣器
*  编写:Tony
*  日期:2022-2-6
*   QQ : 674749794
*  晶体:12MHZ
*    变更记录:无
******************************************************************/
#include<reg51.h>
#include<intrins.h>  
 
#define GPIO_LED P1
sbit K1=P3^1;
sbit BEEP=P3^0;
void Delay10ms(unsigned int c);   //延时10ms
void Timer0_Init();
/*******************************************************************************
* 函 数 名         : Timer0_Init
* 函数功能         : 定时器0初始化函数,250us中断一次
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/
void Timer0_Init()
{
 TMOD=0x02;  //定时器0,工作方式2
 TH0=0x06;
 TL0=0x06;
 ET0=1;      //开启定时器0中断
 EA=1;       //开启总中断
}
/*******************************************************************************
* 函 数 名         : main
* 函数功能         : 主函数
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/
void main(void)
{
    unsigned int i,j;
    K1=1;
    j=0x01; //1111_1110
    BEEP=1;
    Timer0_Init();
    while(1)
    {  
        GPIO_LED=j; 
        if(K1==0)       //检测按键K1是否按下
        {
            Delay10ms(1);   //消除抖动
            if(K1==0)
            {
                TR0=1;
                j=_cror_(j,1);
                Delay10ms(1);
                TR0=0;
                //BEEP=~BEEP;
                while((i<50)&&(K1==0))    //检测按键是否松开
                {
                    Delay10ms(1);
                    i++;
                }
                i=0;
            }
        }      
 
    }              
}
/*******************************************************************************
* 函 数 名         : Delay10ms
* 函数功能         : 延时函数,延时10ms
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/
void Delay10ms(unsigned int c)   //误差 0us
{
    unsigned char a,b;
    for(;c>0;c--)
        for(b=38;b>0;b--)
            for(a=130;a>0;a--);
}
void Tmer0() interrupt 1
{
  BEEP=~BEEP;
 
}

  

posted @   xiaoberber  阅读(62)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示