上电就开始计时,继电器吸合,LED每秒闪一次,8小时后继电器断开,LED熄灭
单片机源程序如下:
- #include<reg52.h>
- #define uint unsigned int
- #define uchar unsigned char
- sbit led = P3^4;
- sbit out =P3^5;
- uchar aa,num,time,time1;
- void delay(uint z)
- {
- uint x,y;
- for(x=z;x>0;x--)
- for(y=110;y>0;y--);
- }
- void init()
- {
- TMOD=0x01;
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- EA=1;
- ET0=1;
- TR0=1;
- aa=0;
- num=0;
- time=0;
- time1=0;
- out=0;
- }
- void main()
- {
- init();
- while(1)
- {
- if(aa==20) //如果到了1S
- {
- aa=0; //清零aa
- num++; //秒数累加
- led=~led; //闪灯
- }
- if(num==60) //如果到了1min
- {
- num=0; //清零秒数
- time++; //累加分钟
- }
- if(time==60) //如果到了60min(1h)
- {
- time=0; //清零分钟
- time1++;//累加小时
- }
- if(time1==8) //如果到了8h
- {
- time1=0; //小时清零
- out=1; //关输出
- TR0=0; //关掉定时器
- while(1); //停在这里死循环,其实可以把单片机挂到掉电模式,如果喜欢自己写吧
- }
- }
- }
- void timer0() interrupt 1
- {
- TH0=(65536-50000)/256; //每50MS产生一次中断,给寄存器装初值并累加aa
- TL0=(65536-50000)%256;
- aa++;
- }
复制代码
|