警燈警笛設計:通過獨立按鍵啟動警燈警笛,控制報警燈旋轉(旋轉燈用8個LED燈實現如下圖所示,旋轉時低3位亮,然后每次左移一位形成旋轉顯示),并讓蜂鳴器發出警報聲(即通過定時產生兩種不同頻率的輸入脈沖給蜂鳴器)
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
shiyan02.png (175.71 KB, 下載次數: 87)
下載附件
2020-12-18 00:14 上傳
單片機源程序如下:
- #include <reg51.h>
- #define u16 unsigned int
- #define u8 unsigned char
- sbit beep=P2^3; //beep引腳
- sbit p=P2^4;
- u8 fre,a;
- void delay(u16 k);
- void System_nuit()
- {
- TMOD=0x01;//使用T0定時器
- TH0=0xfe;
- TL0=0x00;
- EA=1; //總開關打開中斷控制
- IT0 = 1; //下降沿有效
- EX0 = 1; //允許外部中斷1中斷
- ET0=1; //定時器允許中斷
- TR0=0; // 關定時器
- }
- void main()
- {
- u16 i;
- u8 data1[16]=
- {0x1f,0xff,0x8f,0xff,
- 0xc7,0xff,0xe3,0xff,
- 0xf1,0xff,0xf8,0xff,
- 0x7c,0xff,0x3e,0xff
- };
- P0=0x00;
- p=0;
- System_nuit();
-
- while(1)
- {
- if(p==1)
- {
- for(i=0;i<16;i++)
- {
- P0=~data1[i];
- delay(10);
-
- }if(a%2==0)
- {
- fre=600;
- }
- else
- {
- fre=1000;
- }
- }
- }
- }
- void timer0() interrupt 1 //定時器中段
- {
- TH0=0xfe;
- TL0=fre;
- a++;
- beep=~beep;
-
- if(a==20)
- {
- a=0;
- }
- }
-
- void int0() interrupt 0 //外部中斷
- {
- p=~p;
- TR0=~TR0; //定時器
- }
- void delay(u16 k) //延時函數
- { u16 a,b;
- for(a=0;a<k;a++)
- for(b=0;b<114;b++);
- }
復制代碼
51hei.png (7.98 KB, 下載次數: 81)
下載附件
2020-12-19 03:32 上傳
全部資料51hei下載地址:
shiyan03.zip
(679.95 KB, 下載次數: 29)
2020-12-18 00:15 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|