void di() //蜂咛器叫程序 { beep=0;delay(100);beep=1;delay(100);} void main(){ uchar temp;P0=temp;temp=0xfe;temp=temp<<1;if(temp!=0xff){ di();delay(100);} if(temp==0xff){;} }
如果是普通的蜂鸣器的话,是没法通过频率来改变其音质音量的,是扬声器的话可以通过调整频率来改变其发生,下面是一个我做的例子,模拟电子琴,你试试。T0H EQU 30H T0L EQU 31H ORG 0000H LJMP MAIN ORG 000BH LJMP
LOOP:SETB P1.0;关闭蜂鸣器RR P0 JB p0.0,1clr p1.0;蜂鸣器输出1:LCALL DELAY AJMP LOOP DELAY:MOV R5,#15 D0: MOV R6,#255 D1: MOV R7,#255 D2: DJNZ R7,D2 DJNZ R6,D1 DJNZ R5,D0 RET END
蜂鸣器一直响很容易实现,无源蜂鸣器给电平就可以控制发声了,程序如下:FMQ EQU P3.2ORG 0000HLJMP MAINORG 0030HMAIN: MOV A,#0FEH CLR FMQLOOP: MOV P1,A RL A LCALL DELAY SJMP LOOPDELAY:
方法是:写一段100%准确的最简单的代码去检查硬件是否正确。如果是有源蜂鸣器的话,直接让IO拉高或拉低(具体看你的驱动电路)就可以让它响了。如果是无源的,那得输出一段波形才行。
P1 外接 LED,低电平发光。P3.7 外接 无源蜂鸣器。ORG 0 MOV A, #255 MOV R2, #9 LP: MOV P1, A CALL DIDI CLR C RLC A DJNZ R2, LP SJMP 0DIDI: D
求一个,流水灯与蜂鸣器结合的程序,流水灯流动的同时蜂鸣器滴滴的响。
sbit SPK=P1^0;sbit K1=P1^7;//发声函数,注意这里是用扬声器,不能用普通的蜂鸣器 void Alarm(uchar t){ uchari,j;for(i=0;i<200;i++){ SPK=~SPK;for(j=0;j
如果是蜂鸣器的话,那么加一个电平信号就可以发声了。\x0d\x0aFMQ EQU P1.0\x0d\x0aORG 0000H\x0d\x0aLJMP MAIN\x0d\x0aORG 0030H\x0d\x0aMAIN:\x0d\x0aCPL FMQ\x0d\x0aLCALL DELAY\x0d\x0
delay(1000);//控制音调频率 beep=~beep;/控制声音大小 delay(10);} }
0x20,0x26,\r0x40,0x20,0x20,0x2B,
单片机蜂鸣器发声代码
是强电的灯可以通过此处控制继电器的合、闭来控制灯的亮灭)。参考程序:if(key==0){delayms(10);if(key==10){while(key==0);//等待按键释放,IO口恢复高电平led=!led;//按键控制程序}}
在主函数中编写程序,实现LED点亮和灭的时间控制。可以使用if语句或while语句来判断时间是否达到要求,然后控制LED灯的点亮和灭。在main函数中添加延时函数,以实现上电后30秒后LED灯开始点亮的要求。下面是一个简单的示例程序
1、创建项目,如图所示。2、创建延迟函数。3、创建C语言主函数。设计unsigned char k=0;变量。4、添加循环效果。5、点亮灯,通过k++,改变效果。6、添加延迟效果,单片机就可以控制8个灯依次亮,全亮了,然后再依次灭。
就写代码给P1.0输出1就能亮起LED灯D1。sbit LED_D1= P1^0 ;LED_D1 =1;//=1亮灯 ,=0灭灯当也要看电路,完善的电路还会有驱动电路如三极管点了,也要看LED固定的那端是接地还是接VCC。最终无非就是通过单片
用单片机控制LED灯的亮灭,怎么写程序?
有源蜂鸣器与无源蜂鸣器区别?单片机是如何让无源蜂鸣器发声的?响度是幅值呀,相当于PWM波的电压。频率改变使单调改变。 如图:
如果是普通的蜂鸣器的话,是没法通过频率来改变其音质音量的,是扬声器的话可以通过调整频率来改变其发生,下面是一个我做的例子,模拟电子琴,你试试。 T0H EQU 30H T0L EQU 31H ORG 0000H LJMP MAIN ORG 000BH LJMP T0ISR ORG 0030H MAIN: MOV SP,#5FH MOV TMOD,#01H SETB ET0 SETB EA LOOP: MOV DPTR,#FREQ MOV A,P2 MOV R1,#0 //高位键未按下基址=0 ANL A,#03H JB ACC.0,LOOP01 MOV R1,#14 //中音键按下基址=14 SJMP LOOP0 LOOP01: JB ACC.1,LOOP0 MOV R1,#28 //高音键按下基址=28 LOOP0: JB P0.0,LOOP1 MOV A,R1 //“1”键按下 MOVC A,@A+DPTR MOV T0H,A INC DPTR MOV A,R1 MOVC A,@A+DPTR MOV T0L,A LJMP LOOP LOOP1: JB P0.1,LOOP2 MOV A,R1 //“2”键按下 ADD A,#2 MOVC A,@A+DPTR MOV T0H,A INC DPTR MOV A,R1 ADD A,#2 MOVC A,@A+DPTR MOV T0L,A LJMP LOOP LOOP2: JB P0.2,LOOP3 MOV A,R1 //“3”键按下 ADD A,#4 MOVC A,@A+DPTR MOV T0H,A INC DPTR MOV A,R1 ADD A,#4 MOVC A,@A+DPTR MOV T0L,A LJMP LOOP LOOP3: JB P0.3,LOOP4 MOV A,R1 //“4”键按下 ADD A,#6 MOVC A,@A+DPTR MOV T0H,A INC DPTR MOV A,R1 ADD A,#6 MOVC A,@A+DPTR MOV T0L,A LJMP LOOP LOOP4: JB P0.4,LOOP5 MOV A,R1 //“5”键按下 ADD A,#8 MOVC A,@A+DPTR MOV T0H,A INC DPTR MOV A,R1 ADD A,#8 MOVC A,@A+DPTR MOV T0L,A LJMP LOOP LOOP5: JB P0.5,LOOP6 MOV A,R1 //“6”键按下 ADD A,#10 MOVC A,@A+DPTR MOV T0H,A INC DPTR MOV A,R1 ADD A,#10 MOVC A,@A+DPTR MOV T0L,A LJMP LOOP LOOP6: JB P0.6,LOOP7 MOV A,R1 //“7”键按下 ADD A,#12 MOVC A,@A+DPTR MOV T0H,A INC DPTR MOV A,R1 ADD A,#12 MOVC A,@A+DPTR MOV T0L,A LJMP LOOP LOOP7: CLR TR0 LJMP LOOP ;----------------------------- T0ISR: CLR TR0 MOV TH0,T0H MOV TL0,T0L SETB TR0 CPL P3.0 RETI ;----------------------------- FREQ: DB 0F2H,03DH ;低音1 DB 0F3H,0BDH ;低音2 DB 0F5H,014H ;低音3 DB 0F5H,0B1H ;低音4 DB 0F6H,0D0H ;低音5 DB 0F7H,0D1H ;低音6 DB 0F8H,0B5H ;低音7 DB 0F9H,01EH ;中音1 DB 0F9H,0DEH ;中音2 DB 0FAH,08AH ;中音3 DB 0FAH,0D8H ;中音4 DB 0FBH,068H ;中音5 DB 0FBH,0E8H ;中音6 DB 0FCH,05AH ;中音7 DB 0FCH,08FH ;高音1 DB 0FCH,0EFH ;高音2 DB 0FDH,045H ;高音3 DB 0FDH,06CH ;高音4 DB 0FDH,0B4H ;高音5 DB 0FDH,0F4H ;高音6 DB 0FEH,029H ;高音7 ;----------------------------- END
就拿三个灯来说吧 #include"reg52.h" #include"intrins.h" sbit led1=P2^0; sbit led2=P2^1; sbit led3=P2^2;//led灯 sbit ring=P2^3;//蜂鸣器 void Delay1000ms() //@11.0592MHz { unsigned char i, j, k; _nop_(); _nop_(); i = 43; j = 6; k = 203; do { do { while (--k); } while (--j); } while (--i); } void main(){ led1=0;led2=0;led3=0;//初始化为零 //下面开始 goto B: A:while(1){;}//跑完一遍程序后执行死循环 B: led1=1;Delay1000ms();led1=0; led2=1;Delay1000ms();led2=0; led3=1;Delay1000ms();led3=0;//流水灯 ring=1;Delay1000ms();ring=0; ring=1;Delay1000ms();ring=0; ring=1;Delay1000ms();ring=0;//蜂鸣 goto A;//跳转到死循环执行 }