可調延時關斷時間
單片機源程序如下:
- /*****************************************************************************************************************************
- 1.開機,外接觸摸開關K1為高電平,定時器正常倒計時,繼電器吸合接通LED點亮,如中途無操作,定時40分鐘后斷開繼電器, LED熄滅。
- 2.如果開機正常倒計時過程中,用戶不需要LED點亮,則按下觸摸開關K1,K1為低電平,定時器停止工作并恢復初始定時狀態,繼電器斷開
- 等待下次K1出現高電平時,再正常倒計時工作。
- *******************************************************************************************************************************/
- #include<reg52.h>
- unsigned int time; //中斷次數變量
- unsigned char second10, second1,minute10,minute1; //定義十分、個分、十秒、個秒
- unsigned char min=40,sec=59; //設置倒計時時間
- sbit jdq=P1^4; //繼電器為P1.4口
- sbit fmq=P1^3; //蜂鳴器為P1.3口
- sbit K0=P3^2; //定義外中斷INT0為P3.2口
- sbit min10=P1^0;
- sbit min1=P1^1;
-
- unsigned char code duanma[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //數碼管0至9段碼
- //unsigned char code wiema[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //8位共陽數碼管 0x7f為最右側的數碼管
- /********************************************
- 延時子程序0.25MS
- ******************************************/
- void delay(unsigned int i)
- {
- unsigned char j;
- while(i--)
- {
- for(j=25;j>0;j--);
- }
- }
- /***********************************************
- 數碼管顯示子程序
- **********************************************/
- void display(minute10,minute1,second10, second1)
- {
- min10=1;
- min1=1;
- P0=duanma[minute10];
- min10=0;
- delay(6);
- min10=1;
- min1=1;
- P0=duanma[minute1];
- min1=0;
- delay(6);
- }
- /****************************************************
- 蜂鳴器發聲函數,每1次大約響1秒
- ****************************************************/
- void beep(unsigned char a) //
- {
- unsigned int b;
- while(a--)
- {
- for(b=0;b<1000;b++)
- {
- fmq=0;
- delay(1);
- fmq=1;
- delay(1);
- }
- }
- }
- /**********************************************/
- main()
- {
- TMOD=0x01; //T0工作模式是方式1
- TH0=0x49; //定義初始值為50ms 此初值用11.0592MHZ晶振,實測40分鐘誤差3秒
- TL0=0x44;
- EA=1; //開總中斷
- ET0=1; //允許定時器T0中斷
- TR0=1; //開啟T0計時
- EX0=1;
- IT0=1;
- delay(800);
- while(1)
- {
- if(K0==1)
- {
- TR0=1;
- jdq=0;
- if(K0==1&&min==0)
- {TR0=0;min=0;sec=0;jdq=1;
- }
- }
- display(min/10,min%10,sec/10,sec%10);
- }
- }
- /****************************************************/
- void int0() interrupt 0 //外中斷0
- {
- if(K0==0)
- {
- delay(500);
- if(K0==0)
- {
- TR0=0;
- jdq=1;
- beep(1);
- min=40;sec=59;
- }
- }
- }
- /*********************************************/
- void timer0() interrupt 1 //T0中斷
- {
-
- TH0=0x49;
- TL0=0x44;
- time++;
- if(time==20) //50ms*20=1秒
- {
- time=0;
- sec--;
- if(sec==0)
- {
- sec=59;
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
yskz.rar
(1.36 KB, 下載次數: 18)
2018-1-27 11:05 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|