对于51单片机,通过串口通信实现蜂鸣器鸣叫的程序

[code=csharp]

#include<reg52>

#define uchar unsigned char 

#define uint unsigned int

uchar num,flag,a,beep_num;

sbit beep=P2^3;

void main()

{

 TMOD=0x21; //定时器1工作在方式2(8位初值自动重装方式),定时器0工作在方式1

 TH1=0xfd;

 TL1=0xfd;

 TH0=(65536-50000)/256;

 TL0=(65536-50000)%6;

 TR1=1;

 SCON=0x50; //SM0=0,SM1=1,REN=1

 EA=1; 

 ES=1;

 ET0=1;

 while(1)

 {

  if(flag==1)

  { 

   ES=0;   

   flag=0;   

   TR0=1;

   ES=1; //因为从上位机发送一个数据,单片机接收到就会产生中断,进入中断后flag=1,

  } //如果不将大括号在这里结束,则蜂鸣器只会收到第一次发送的数据,只会有一种声音,

        //后面再从上位机发送任何数据都不起作用,只会按第一次接收到的数据来使蜂鸣器发声

  if(a=='1')

  {

   if(num==8)

            {

              num=0;

              beep=~beep;   

            }

  }  

  if(a=='2')

  {

   if(num==4)

            {

              num=0;

              beep=~beep;   

            } 

  }

  if(a=='3')

  {

   if(num==2)

            {

              num=0;

              beep=~beep;   

            }

  } 

  if(a=='4') 

  {

   TR0=0;

   beep=1;

  }     

 }

}

void ser() interrupt 4

{

 RI=0;

 a=SBUF;

 flag=1;  

}

void timer0() interrupt 1

{

 TH0=(65536-50000)/256;

 TL0=(65536-50000)%6;

 num++;

}

[/code]

  • 15
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值