程序比較簡(jiǎn)單,就是用一個(gè)300W集中電源帶6個(gè)100W水泵,水泵是按順序依次啟動(dòng)的,寫(xiě)進(jìn)單片機(jī)就程序運(yùn)行一會(huì)就是一直P(pán)16口為低電平?jīng)]變過(guò),單片機(jī)為STC15L204EA,程序清單如下:
/*
水泵定時(shí)系統(tǒng)
*/
#include "15f204ea.h"
#include "intrins.h"
#define uchar unsigned char
#define uint unsigned int
uchar miao=0;fen=23;mode=1;tmp=0; //定義全局變量用于miao,fen,shi用于存儲(chǔ)過(guò)程時(shí)間
uchar _20ms;//定義全局變量_20ms用于計(jì)數(shù)中斷個(gè)數(shù),50個(gè)為1秒
sbit set1=P5^4;//水位報(bào)警
//-----------------------------------------------
#define FOSC 12000000L
/*------------------------------------------------
外部中斷0
------------------------------------------------*/
void exint0() interrupt 0 //水位報(bào)警
{
if(set1==0)
{
set1=1;
}
else
{
set1=0;
}
}
/*------------------------------------------------
外部中斷1
------------------------------------------------*/
void exint1() interrupt 2 //INT1中斷入口
{
if(mode==1)
{
mode=24;
}
else
{
mode=1;
}
}
// 定時(shí)器中斷
void tm0_isr() interrupt 1 using 1
{
TL0 = 0xE0; //設(shè)置定時(shí)初值
TH0 = 0xB1; //設(shè)置定時(shí)初
_20ms++;
if(50==_20ms) //判斷是否到了一秒
{
miao++; //到了一秒,秒++
_20ms=0;
if(miao==60) //六十秒到了嗎
{
fen++; //到了分++
miao=0;
if(mode==1)
{
fen--;
if(P55==0)
{
P55=1;
P16=0;
}
else if(P16==0)
{
P16=1;
P17=0;
}
else if(P17==0)
{
P17=1;
P34=0;
}
else if(P34==0)
{
P34=1;
P35=0;
}
else if(P35==0)
{
P35=1;
P36=0;
}
else if(P36==0)
{
P36=1;
P37=0;
}
else if(P37==0)
{
P37=1;
P16=0;
}
}
if(mode==fen)
{
fen--;
tmp++;
if(P55==0)
{
P55=1;
P16=0;
}
else if(P16==0)
{
P16=1;
P17=0;
}
else if(P17==0)
{
P17=1;
P34=0;
}
else if(P34==0)
{
P34=1;
P35=0;
}
else if(P35==0)
{
P35=1;
P36=0;
}
else if(P36==0)
{
P36=1;
P37=0;
}
else if(P37==0)
{
P37=1;
P55=0;
}
if(tmp==7)
{
fen=0;
tmp=0;
}
}
}
}
}
/* main program */
void main()
{
P55=0;
EA = 1;
//INT0 = 1;
IT0 = 0; //設(shè)置INT0的中斷類(lèi)型 (1:僅下降沿 0:上升沿和下降沿)
EX0 = 1;
//INT1 = 1;
IT1 = 0; //設(shè)置INT1的中斷類(lèi)型 (1:僅下降沿 0:上升沿和下降沿)
EX1 = 1;
ET0 = 1; //使能定時(shí)器0中斷
AUXR &= 0x7F; //定時(shí)器時(shí)鐘12T模式
TMOD &= 0xF0; //設(shè)置定時(shí)器模式
TL0 = 0xE0; //設(shè)置定時(shí)初值
TH0 = 0xB1; //設(shè)置定時(shí)初
TF0 = 0; //清除TF0標(biāo)志
TR0 = 1; //定時(shí)器0開(kāi)始計(jì)時(shí)
while (1);
}
|