|
可調(diào)延時(shí)關(guān)斷時(shí)間
單片機(jī)源程序如下:
- /*****************************************************************************************************************************
- 1.開(kāi)機(jī),外接觸摸開(kāi)關(guān)K1為高電平,定時(shí)器正常倒計(jì)時(shí),繼電器吸合接通LED點(diǎn)亮,如中途無(wú)操作,定時(shí)40分鐘后斷開(kāi)繼電器, LED熄滅。
- 2.如果開(kāi)機(jī)正常倒計(jì)時(shí)過(guò)程中,用戶不需要LED點(diǎn)亮,則按下觸摸開(kāi)關(guān)K1,K1為低電平,定時(shí)器停止工作并恢復(fù)初始定時(shí)狀態(tài),繼電器斷開(kāi)
- 等待下次K1出現(xiàn)高電平時(shí),再正常倒計(jì)時(shí)工作。
- *******************************************************************************************************************************/
- #include<reg52.h>
- unsigned int time; //中斷次數(shù)變量
- unsigned char second10, second1,minute10,minute1; //定義十分、個(gè)分、十秒、個(gè)秒
- unsigned char min=40,sec=59; //設(shè)置倒計(jì)時(shí)時(shí)間
- 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}; //數(shù)碼管0至9段碼
- //unsigned char code wiema[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //8位共陽(yáng)數(shù)碼管 0x7f為最右側(cè)的數(shù)碼管
- /********************************************
- 延時(shí)子程序0.25MS
- ******************************************/
- void delay(unsigned int i)
- {
- unsigned char j;
- while(i--)
- {
- for(j=25;j>0;j--);
- }
- }
- /***********************************************
- 數(shù)碼管顯示子程序
- **********************************************/
- 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);
- }
- /****************************************************
- 蜂鳴器發(fā)聲函數(shù),每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晶振,實(shí)測(cè)40分鐘誤差3秒
- TL0=0x44;
- EA=1; //開(kāi)總中斷
- ET0=1; //允許定時(shí)器T0中斷
- TR0=1; //開(kāi)啟T0計(jì)時(shí)
- 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;
- ……………………
- …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
yskz.rar
(1.36 KB, 下載次數(shù): 18)
2018-1-27 11:05 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
|