原程序+仿真
51hei.png (7.44 KB, 下載次數(shù): 89)
下載附件
2020-12-3 22:28 上傳
單片機源程序如下:
- /********************************************************
- *實例名稱:電子門鈴
- *實例功能:當按下門鈴按鈕時,產(chǎn)生500hz和750hz的方波來驅(qū)動
- 喇叭,產(chǎn)生兩種不同頻率的交替來產(chǎn)生兩種聲音
- *作者:kxm
- ********************************************************/
- #include "doorBell.h"
- uchar t5hz; //500hz頻率計數(shù)
- uchar t7hz; //750hz頻率計數(shù)
- uint tcnt; //定時器0中斷計數(shù)
- bit flag; //500hz和750hz狀態(tài)標示
- void timer0_init(void)
- {
- TMOD=0x02; //定時器0工作在方式2,八位定時器自動載入
- TH0=0x06; //12MHZ晶振,中斷周期250*10^(-6)秒
- TL0=0x06;
- ET0=1; //定時器0中斷使能
- TR0=0; //定時器0默認狀態(tài)停止運行
- }
- void int0_init(void)
- {
- EX0 = 1; //外部中斷0使能
- IT0 = 1; //外部中斷0跳變中斷
- }
- void main()
- {
- timer0_init(); //定時器0初始化
- int0_init(); //外部中斷0初始化
- flag=0;
- t5hz=0x00;
- t7hz=0x00;
- tcnt=0x0000;
- sei(); //開總中斷
- while(1)
- {
- if(TR0==0)
- flag=0; //門鈴響過后轉(zhuǎn)換成500hz狀態(tài)
- }
- }
- void timer0_overflow(void) interrupt 1 //timer0溢出中斷入口
- {
- tcnt++;
- if(tcnt==2000) //500hz和750hz方波各維持0.5s
- {
- tcnt=0;
- if(flag==0)
- flag=~flag;
- else
- TR0=0;
- }
- if(flag==0) //輸出750hz方波
- {
- t7hz++;
- if(t7hz==3)
- {
- t7hz=0;
- BELL_OUT=~BELL_OUT; //喇叭信號端口取反
- }
- }
- else //輸出500hz方波
- {
- t5hz++;
- if(t5hz==4)
- {
- t5hz=0;
- BELL_OUT=~BELL_OUT;
- }
- }
- }
- void int0(void) interrupt 0 //外部中斷0中斷入口,按鍵觸發(fā)
- {
- TR0=1; //開啟定時器0,實現(xiàn)方波的輸出
- }
復制代碼
所有資料51hei提供下載:
電子門鈴.zip
(14.79 KB, 下載次數(shù): 34)
2020-12-3 20:48 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|