中文  English 

联系我们

    当前位置:首页 > 技术资料

    电磁式蜂鸣器|压电式蜂鸣器的驱动程序如何编写?

    日期:2011-06-12 08:33:10来源:点击:476
    电磁式蜂鸣器|压电式蜂鸣器的驱动程序如何编写?

    举例说明
    #define beep_nor() —–
    #define beep_on() —–
    #define beep_off() —–
    typedef struct _BEEP
    {
    UINT8 MuteState; //静音状态 : 开、关
    UINT8 BeepState; //蜂鸣器状态: 开、关
    UINT8 BeepCount; //蜂鸣器响的次数
    UINT8 BeepOnTime; //蜂鸣器响的时间
    UINT8 BeepOffTime; //蜂鸣器不响的时间
    UINT8 BeepWaitTime; //蜂鸣器响和不响的定时时间
    UINT8 BeepRefresh; //是否需要刷新蜂鸣器显示图标
    }BEEP_STRUCT;
    //—————————–
    //n-响的次数,btime-响的时间,gtime-不响的时间
    //—————————–
    void beep(BEEP_STRUCT *beep, UINT8 n,UINT8 btime,UINT8 gtime)
    {
    if((beep->MuteState ==0)&&(n>0)) //非静音
    {
    beep->BeepState = 1; //响
    beep->BeepCount = n;
    beep->BeepOnTime = btime;
    beep->BeepOffTime = gtime;
    beep->BeepWaitTime = 3*beep->BeepOnTime;
    }
    }
    //—————————–
    //在100ms的定时器处理中调用
    //—————————–
    void beep_deal(BEEP_STRUCT *beep)
    {
    if(beep->BeepState != 0){ //响
    if(beep->BeepCount >0){
    if(beep->BeepWaitTime>0){
    beep->BeepWaitTime–;
    }
    else{
    beep->BeepWaitTime = 3*beep->BeepOffTime;
    beep->BeepState = 0; //不响
    beep->BeepCount–; //响的次数减1
    }
    }
    else{
    beep->BeepState = 0;
    }
    }
    else{
    if(beep->BeepCount>0){
    if(beep->BeepWaitTime>0){
    beep->BeepWaitTime–;
    }
    else{
    beep->BeepWaitTime = 3*beep->BeepOnTime;
    beep->BeepState = 1;
    }
    }
    }
    if(beep->BeepState !=0){
    beep_on();
    }
    else{
    beep_off();
    }
    }
    蜂鸣器程序举例二:
    #define uchar unsigned char
    #define uint unsigned int
    #define ulong unsigned long
    //#define delay
    //#difine beep
    #include
    //sbit P1_2;
    unsigned char count;
    void delay(unsigned int x)
    {
    unsigned int i,j;
    for(i=x;i>0;i–)
    {
    for(j=250;j>0;j–)
    P1_7=~P1_7;//喂狗
    }
    }
    void beep0(void)
    {
    P1_2 = 0;
    delay(100); //短鸣
    P1_2 = 1;
    delay(500); //停一会
    }
    void beep1(void)
    {
    P1_2 = 0;
    delay(100); //短鸣
    P1_2 = 1;
    delay(500); //停一会
    P1_2 = 0;
    delay(300); //长鸣
    P1_2 = 1;
    delay(500); //停一会
    }
    void main(void)
    {uint n,t,m;
    while(1)
    {
    P1_7=~P1_7;
    for(n=0;n<8;)
    { t=n%8;
    m=t%2;
    P1_2=!P1_2;
    if(m==1)
    { switch (m)
    {
    case 1:beep1();
    break;
    default:break;
    }
    }
    else
    switch(t)
    {case 0:beep0();
    break;
    case 2:beep0();
    break;
    case 4:beep1();
    break;
    case 6:beep0();
    break;
    default:break;
    }
    n++;
    }
    }
    }
    ------分隔线----------------------------
    我来说两句
    请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
    评价:
    表情:
    验证码:
    最新评论 进入详细评论页>>