我在蜂鸣器两端接了二极管,二极管是按照程序闪的,蜂鸣器一直响,我往蜂鸣器里烧过开发板的程序,蜂鸣器没有问题。求大佬指点,下面是部分程序。
- #include<reg51.h>//51单片机头文件
- #define LCD1602_DATAPINS P0
- typedef unsigned char uchar;
- typedef unsigned int uint;
- sbit K1=P3^2;//比赛倒计时开始/暂停
- sbit K2=P3^3;//24s倒计时重新开始
- sbit K3=P1^3;//乙队+1按键
- sbit K4=P1^2;//乙队-1按键
- sbit K5=P1^1;//甲队+1按键
- sbit K6=P1^0;//甲队-1按键
- sbit K7=P1^4;//分+1按键
- sbit K8=P1^5;//秒+1按键
- sbit K9=P1^6;//分-1
- sbit K10=P1^7;//秒-1
- sbit beep=P2^0;//蜂鸣器接口
- sbit RS=P2^6;
- sbit RW=P2^5;//OO
- sbit E=P2^7;
- char miao,fen,num,time,aa;
- int m=0;
- uchar bb,cc,i;
- uchar code table1[]={"H.T 000:000 Y.T "};
- uchar code table2[]={"12:00 ------- 24"};
- //延时子函数
- void delay(uint z)
- {
- uint x;
- uchar y;
- for(x=z;x>0;x--)
- for(y=110;y>0;y--);
- }
- //LCD1602液晶初始化子函数
- void LCD1602_init()
- {
- uchar i;
- bb=0; //H.T分数初始化
- cc=0; //R.T分数初始化
- time=0;
- TMOD=0x10; //定时器1初始化
- TL1=0x00;
- TH1=0x4c;
- EA=1; //开总中断
- ET1=1; //开定时器1
- TR1=0; //定时器1不工作
- EX0=1; //开中断0
- EX1=1; //开中断1
- IT0=1; //中断0为边沿触发
- IT1=1; //中断1为边沿触发
- E=0;
- beep=0;
- miao=0;
- fen=12;
- aa=24;
- write_com(0x38); //LCD设置初始化
- write_com(0x0c);
- write_com(0x06);
- write_com(0x01);
- write_com(0x80); //LCD显示初始化
- for(i=0;i<16;i++)
- {
- write_date(table1[i]);
- }
- write_com(0x80+0x40);
- for(i=0;i<16;i++)
- {
- write_date(table2[i]);
- }
- }
- void counter_down()
- {
- uchar i;
- if(time>=20) //每1s倒计时做减一操作
- {
- miao--;
- aa--;
- write_com(0x80+0x4e); //24s倒计时显示
- write_date(0x30+aa/10);
- write_date(0x30+aa%10);
- write_com(0x80+0x4e);
- if(aa==0) //24s结束发出报警
- {TR1=~TR1;
- beep=1;
- delay(200);
- beep=0;
-
复制代码
|