标题:
电瓶车充电定时器
[打印本页]
作者:
daming
时间:
2014-12-29 20:48
标题:
电瓶车充电定时器
/////////////////////////////////////////
///作者:改变 //
///名称:电瓶车定时充电器,到时间断开 //
///日期:2010.11.26 //
/////////////////////////////////////////
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
unsigned char rem[6]={0,7,3,0,0,0};
unsigned code bcd[12]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0x7f};
uint m0,j;
bit DD_1,SMXS;
sbit DD=P0^7;
sbit DSKG=P3^1;
sbit SB1=P1^0; //分时切换键
sbit SB2=P1^1; //时减减
sbit SB3=P1^2; //分减减
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void yanshi()
{uint kk;
kk=100;
while(kk--);
}
////////////显示分秒
xianshim()
{unsigned char i;
for (i=2;i<6;i++)
{
P2=~(0x01<<(i-2));
P0=bcd[rem[i]];
if((i-2)==1)if(DD_1)DD=0;
yanshi();
P0=0xff;
}
}
/////////////////////////////////
////////////显示时分
xianshis()
{unsigned char i;
for (i=0;i<4;i++)
{
P2=~(0x01<<i);
P0=bcd[rem[i]];
if(i==1)if(DD_1)DD=0;
yanshi();
P0=0xff;
}
}
/////////////////////////////////
jishi() interrupt 1
{
TH0=(65536-46080)/256;
TL0=(65536-46080)%256;
m0++;
if(m0==9)DD_1=~DD_1;
if(m0==20)/////////////////20次一秒
{
DD_1=~DD_1;
m0=0;
if(rem[5]==0)
{
if(rem[4]==0)
{
if(rem[3]==0)
{
if(rem[2]==0)
{
if(rem[1]==0)
{
if(rem[0]==0)
{
DSKG=1;////////////全零零时断电
TR0=0;
rem[0]=rem[1]=rem[2]=rem[3]=rem[4]=rem[5]=0;
}
else
{
rem[0]--;
rem[1]=rem[3]=rem[5]=9;
rem[2]=rem[4]=5;
}
}
else
{
rem[1]--;
rem[2]=rem[4]=5;
rem[3]=rem[5]=9;
}
}
else
{
rem[2]--;
rem[4]=5;
rem[3]=rem[5]=9;
}
}
else
{
rem[3]--;
rem[4]=5;
rem[5]=9;
}
}
else
{
rem[4]--;
rem[5]=9;
}
}
else rem[5]--;
}
}
/////////////////////////////////
anjian()
{
P1=0xff;
if(SB1==0)
{
yanshi();
if(SB1==0)
{
while(SB1==0);
SMXS=~SMXS;
}
}
if(SB2==0)
{
yanshi();
if(SB2==0)
{
while(SB2==0);
if(rem[1]==0)
{
if(rem[0]==0)
{
rem[0]=rem[1]=1;
}
else
{
rem[0]--;
rem[1]=9;
}
}
else rem[1]--;
}
}
if(SB3==0)
{
yanshi();
if(SB3==0)
{
while(SB3==0);
if(rem[3]==0)
{
if(rem[2]==0)
{
rem[2]=5;
rem[3]=9;
}
else
{
rem[2]--;
rem[3]=9;
}
}
else rem[3]--;
}
}
}
//////////////////////////////////
void main(void)
{
m0=0;
TMOD=0x01;
TH0=(65536-45833)/256;
TL0=(65536-45833)%256;
EA=1;
ET0=1;
TR0=1;
DSKG=0;
j=0;
while(1)
{
if(SMXS)xianshis();//时显示
else xianshim();//秒显示
anjian();
j++;
if(j==5000)/////秒时标志定时切换
{
j=0;
SMXS=~SMXS;
}
}
}
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1