![]() |
發布時間: 2020-8-21 19:14
正文摘要:想自己制作 求指導 :8個發光管由。上至下間隔1s流動,其中每個管亮500ms,滅500ms,亮時蜂鳴器響,滅時關閉蜂鳴器,一直重復下去。 求教各位大佬: 我只能做到間隔一秒流動。但是亮500ms,滅500ms這個操作 ... |
寫個延時函數,再調用 |
干嘛搞個蜂鳴器的代碼,不是LED燈嗎? |
#include<reg52.h> typedef unsigned int uint;//無符號整型 void Delay500ms(); //@11.0592MHz void main(void) { while(1) { uint a; for(a = 0; a < 8;a++) { P1 = ~(0X01 << a); //這一行加上蜂鳴器開啟 Delay500ms();//500ms延時 11.0592MHZ } for(a = 0; a < 6;a++) { P1 = ~(0X40 >> a); //這一行加上蜂鳴器關閉 Delay500ms();//500ms延時 11.0592MHZ } } } void Delay500ms() //@11.0592MHz { unsigned char i, j, k; _nop_(); i = 5; j = 5; k = 150; do { do { while (--k); } while (--j); } while (--i); } //這個延時時間500毫秒多,具體使用自己微調吧 |
#include "reg52.h" #include "intrins.h" sbit BEEP = P2^3; sbit Led0 = P1^0; //著實費引腳 (8個數碼管共陰) sbit Led1 = P1^1; sbit Led2 = P1^2; sbit Led3 = P1^3; sbit Led4 = P1^4; sbit Led5 = P1^5; sbit Led6 = P1^6; sbit Led7 = P1^7; unsigned char n; //嚴格意義上盡量別用延時 void Delay100ms() //@11.0592MHz 100毫秒延時 { unsigned char i, j; i = 180; j = 73; do { while (--j); } while (--i); } void delay_ms(unsigned char n) //延時是100ms的整數倍 { while(n>=0) { Delay100ms(); n--; } } void Beep() //蜂鳴器響函數, { unsigned int i,j; for(i=0;i<700;i++) { BEEP = ~BEEP; for(j=0;j<300;j++); BEEP = ~BEEP; for(j=0;j<10;j++); } } void main() { unsigned int i; /* 第一種效果 while(1) { Led0 = Led2 = Led4 = Led6 = 1;//燈亮 0,2,4,6燈亮 Led1 = Led3 = Led5 = Led7 = 0;//燈滅 Beep(); delay_ms(5);//500ms Led0 = Led2 = Led4 = Led6 = 0;// 燈滅 Led1 = Led3 = Led5 = Led7 = 1;//燈亮 delay_ms(5);//500ms } */ while(1) { for(i=0;i<7;i++) { P1 = _crol_(P1,1); //右移 Beep(); delay_ms(5); } for(i=0;i<7;i++) { P1 = _cror_(P1,1); Beep(); delay_ms(5); } } } |
延時程序設計為500ms, temp=_crol_(temp,1) P1=temp; //亮 beep=0; //響 delay(); //延時 P1=0xff; //滅 beep=1; //不響 delay(); //延時 |