⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 time_r.c

📁 使用C51定时器控制排水阀自动排出炉中的凉水
💻 C
字号:
#include <at89x51.h>
#include <absacc.h>
#define uchar unsigned char
#define uint  unsigned int
#define DpAdd    XBYTE[0xc000]
#define DisOff   XBYTE[0x8000]
#define DisOff1   XBYTE[0xe000]
#define AdSel    XBYTE[0xa000]
#define Readlow  XBYTE[0xa001]
//uchar code num[18]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40,0x00};
uchar code num[18]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x98,0x88,0x83,0xc6,0xa9,0x83,0x8e,0xbf,0xff};
uchar display[10],ad[20],times,sec,min,hour,sel=0x01,sel1=0x20;
uint tims,lo;
/*
void ADpulse(void)
{
   asm  setb p1.1 
   asm  mov r3,#4
  asm {puls1:djnz r3,puls1
        clr p1.1
		mov r3,#4
  puls2:djnz r3,#puls2
		}
return
}	*/		
/*   		
void HexToBcd(uint value)
{ 
  display[0]=(uchar)(value/1000);
  display[1]=(uchar)((value-display[0]*1000)/100);
  display[2]=(uchar)((value-display[0]*1000-display[1]*100)/10);
  display[3]=(uchar)(value-display[0]*1000-display[1]*100-display[2]*10);
}
		
void EnableAD(void)
{
  AdSel=0x00;
}

void ADRead(void)
{
uchar high,low,Advalue,lock,temp,n;
uint sum,j;
high=AdSel;
low=Readlow;
low=low&0xf0;
low=low>>4;
temp=high&0x0f;
temp=temp<<4;
low=low|temp;
high=high>>4;
Advalue=high*256+low;
Advalue=(uint)(0.2442*Advalue);
Advalue=(uint)(0.753846*Advalue)-10;
if(Advalue<=0x00) Advalue=0x00;
ad[j]=Advalue;
j=j+1;
if(j==20) j=0;
for(n=0;n<20;n++) {sum=sum+ad[n];}
lock=sum/20;
HexToBcd(Advalue);
}
*/

void timer0(void) interrupt 1 using 1
{ 
TH0=-(1000/256);
TL0=-(1000%256);
DpAdd=0x00;
if(sel<0x80) {DisOff=sel;DisOff1=0x00;}
else  {DisOff=0x00;DisOff1=sel1;}
if(times==0) {DpAdd=num[display[0]];}
if(times==1) {DpAdd=num[display[1]];}
if(times==2) {DpAdd=num[display[2]];} 
if(times==3) {DpAdd=num[display[3]];}
if(times==4) {DpAdd=num[display[4]];}
if(times==5) {DpAdd=num[display[5]];}

if(times==6) {DpAdd=num[display[6]];}
if(times==7) {DpAdd=num[display[7]];}

if(times==8) {DpAdd=num[display[8]];times=0;}
if(sel<0x80) sel<<=1;
if(sel==0x80) {if(sel1==0x80) {sel=0x01;sel1=0x20;} else sel1<<=1;}

times++;
lo+=2;
if (tims!=500) tims++;else {tims=0;sec++;}
}

void main(void) 
{
TMOD=0x01;// T/C0工作在定时方式1
TH0=-(1000/256);  //预置定时初值2ms
TL0=-(1000/256);
EA=1;
ET0=1;
TR0=1;
hour=15;
min=50;
for(;;)
{

if (sec==60) {sec-=60;min++;}
if (min==60) {min-=60;hour++;}
if (hour==24) {hour=0;}
if(sec==25)  {hour=3;
      min=6;}
display[8]=sec/10;display[7]=sec%10;
display[4]=min/10;display[3]=min%10;
display[6]=hour/10;display[5]=hour%10;

if((P1_5==0)&&(P1_6==1))
  {
    if(lo<=1500)  P1_2=0; else {P1_2=1;if(lo>=16500) lo=0;}
    if(P1_4==0) P1_7=0;
  }
else
  {if(P1_6==0) P1_2=0;else P1_2=1;}
}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -