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

📄 my couse.c

📁 keilc51写的
💻 C
字号:
/* 串行通信/红外线解码显示程序
   广东工业大学自动化学院04级自动化3班   吴子洲
   版权所有,如要转载,请注明出处     */

#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit k1=P2^4;		
sbit k2=P2^5;
sbit k3=P2^6;
sbit k4=P2^7;		//switching port
sbit sk=P3^7;		//speaker port

uchar tb0[]={		//led bit table /*0,1,2,3,4,5,6,7,8,9,A,b,C,d,E,F,*/
0xA0,0xBE,0x64,0x2C,0x3A,0x29,0x21,0xBC,0x20,0x28,0x30,0x23,0xE1,0x26,0x61,0x71,
};

unsigned char code music[]={0x31,0x41,0x5d,0x30,0x20,0x1d,0x30,0x40,0x59,0x81,0x51,0x30,0x4e,
0x30,0x40,0x58,0x11,0x82,0x70,0x6d,0x30,0x40,0x59,0x41,0x31,0x20,0x1e,0x30,0x40,0x51,0x00,0x51,
0x50,0x00,0x50,0x60,0x50,0x41,0x01,0x30,0x40,0x51,0x00,0x51,0x30,0x20,0x01,0x30,0x20,0x10,0x10,
0x10,0x80,0x83,0x70,0x80,0x70,0x50,0x03,0x60,0x50,0x40,0x44,0x50,0x60,0x57,0x81,0x83,0x60,0x30,
0x50,0x60,0x55,0x61,0x61,0x50,0x11,0x20,0x35,0x21,0x12,0x10,0x10,0x21,0x30,0x31,0x23,0x21,0x91,
0x91,0x71,0x63,0x55,0x03,0x01,0x30,0x40,0x51,0x51,0x50,0x51,0x50,0x60,0x51,0x41,0x01,0x30,0x40,
0x51,0x51,0x30,0x20,0x11,0x23,0x01,0x30,0x20,0x10,0x11,0x10,0x10,0x81,0x81,0x70,0x71,0x80,0x71,
0x51,0x60,0x50,0x40,0x42,0x50,0x60,0x57,0x81,0x83,0x60,0x30,50,0x60,0x55,0x61,0x61,0x50,0x11,
0x20,0x35,0x21,0x12,0x10,0x10,0x21,0x30,0x31,0x23,0x61,0x52,0x30,0x20,0x0c0,0x30,0x20,0x17,0x80,
0x50,0x60,0x80,0x70,0x80,0x50,0x70,0x60,0x60,0x60,0x70,0x81,0x61,0x70,0x70,0x80,0x70,0x60,0x51,
0x50,0x10,0x20,0x33,0x31,0x70,0x70,0x70,0x31,0x30,0x91,0x91,0x81,0x73,0x6d,0x60,0x60,0x60,0x60,
0x71,0x61,0x70,0x71,0x80,0x91,0x70,0x70,0x0a5,0x91,0x85,0x71,0x61,0x61,0x60,0x62,0x51,0x51,0x20,
0x32,0x01b,0x01,0x30,0x40,0x51,0x51,0x50,0x51,0x50,0x60,0x50,0x41,0x01,0x30,0x40,0x51,0x51,0x30,
0x20,0x11,0x23,0x01,0x30,0x20,0x11,0x11,0x81,0x81,0x70,0x71,0x70,0x80,0x71,0x51,0x51,0x51,0x50,
0x51,0x50,0x60,0x50,0x60,0x51,0x41,0x01,0x30,0x40,0x51,0x51,0x30,0x20,0x11,0x23,0x01,0x30,0x20,
0x11,0x11,0x81,0x81,0x70,0x71,0x80,0x71,0x51,0x60,0x50,0x40,0x42,0x50,0x60,0x55,0x80,0x81,0x60,
0x30,0x50,0x60,0x55,0x61,0x61,0x50,0x11,0x20,0x35,0x21,0x12,0x10,0x10,0x21,0x30,0x31,0x23,0x61,
0x52,0x30,0x20,0x0c0,0x30,0x20,0x17,0x80,0x50,0x60,0x80,0x70,0x80,0x50,0x70,0x60,0x60,0x60,0x70,
0x81,0x61,0x70,0x70,0x70,0x80,0x91,0x71,0x80,0x70,0x60,0x51,0x10,0x20,0x37,0x31,0x70,0x72,0x31,
0x30,0x91,0x91,0x81,0x73,0x6c,0x60,0x60,0x60,0x70,0x81,0x61,0x70,0x71,0x80,0x91,0x70,0x70,0x0a5,
0x91,0x85,0x81,0x81,0x81,0x80,0x82,0x91,0x92,0x91,0x0a0,0x91,0x81,0x8b,0x85,0x70,0x60,0x73,0x51,
0x30,0x40,0x51,0x51,0x50,0x51,0x50,0x60,0x51,0x41,0x01,0x30,0x40,0x51,0x51,0x30,0x20,0x11,0x23,
0x01,0x30,0x20,0x10,0x11,0x10,0x10,0x81,0x81,0x70,0x71,0x80,0x71,0x51,0x60,0x50,0x40,0x42,0x50,
0x60,0x57,0x81,0x83,0x60,0x30,50,0x60,0x55,0x61,0x61,0x50,0x11,0x20,0x35,0x21,0x12,0x10,0x10,
0x21,0x30,0x31,0x23,0x61,0x52,0x30,0x20,0x0c0,0x30,0x20,0x17,0x80,0x50,0x60,0x80,0x70,0x80,0x50,
0x70,0x60,0x60,0x60,0x70,0x81,0x61,0x70,0x70,0x80,0x70,0x60,0x51,0x50,0x10,0x20,0x33,0x31,0x70,
0x70,0x70,0x31,0x30,0x91,0x91,0x81,0x73,0x6d,0x60,0x60,0x60,0x60,0x71,0x61,0x70,0x71,0x80,0x91,
0x70,0x70,0x0a5,0x91,0x85,0x71,0x61,0x61,0x60,0x62,0x51,0x51,0x20,0x32,0x1f,0x60,0x60,0x60,0x70,
0x81,0x61,0x70,0x70,0x70,0x80,0x91,0x71,0x80,0x70,0x60,0x51,0x50,0x10,0x20,0x37,0x31,0x70,0x71,
0x31,0x30,0x91,0x91,0x81,0x73,0x6d,0x60,0x60,0x60,0x70,81,0x61,0x70,0x71,0x70,0x91,0x70,0x70,
0x0a5,0x91,0x85,0x71,0x61,0x61,0x60,0x62,0x51,0x51,0x20,0x32,0x1f,0x00f,0x00f,0x00f,0xff};

unsigned int code f[]={0000,64580,64684,64777,64820,64898,64968,65030,65058,65110,65157,65178,
64260,64400,64524};

uchar tb1[]={		//led line table
0xfe,0xfd,0xfb,0xf7};

uchar bc;	//dis couter
uchar buf[4]; //display buffer
uchar ds[2];	//display buffer 2
uchar pds;		//display counter
bit ppd;		//display next frame

uchar ms;		//10ms counter
uchar hs;		//200ms counter
uchar sec;		//1S counter
bit   minb;		//1 min signed
uchar min;
uchar hou;		//hour coner
uchar day;		//day
uchar dat;		//dat
uchar mon;
uchar year;
	
uchar pr;		//music timer regiter
uchar pt;		//music timer couter
uint mc;		//music table couter;
bit mk;			//music switching,when mk=1:play music, and mk=0:stop;

bit kp;			//some key is press
uchar kc;		//receive a effective key velue from remote key*/

void s_ini(void)
{bc=0;
 ms=0;
 hs=20;
 sec=0;
 minb=0;
 hou=0;
 dat=0;
 day=0;
 mon=1;
 year=6;
 pr=0;
 pt=0;
 mc=0;
 mk=1;		//enable play music
 kc=0xff;
 ppd=0;
 pds=0xfe;
 kp=0;
 P0=0xff;
 P1=0xff;
 P2=0xff;
 P3=0xff;
 IP=0x20;		//timer 2 interrup as priority
 IE=0xb2;		//enabled interrup of timer0,time2 &serial port
 SCON=0x50;
 TMOD=0x21;
 TH0=0xF7;		//timer 2.5MS
 TH1=0xFD;		//baund rate =9600bps
 TL1=0xFD;
 TR1=1;
 TR0=1;
}

void dis(void)	//displqy funtion
{uchar i,j;
 if(ppd==1)
   {ppd=0;
    pds*=2;
    pds+=1;
	if(pds==0xff)
	  pds=0xfe;
	P1=pds;
	}
 for(i=0;i<2;i++)
  {j=ds[i]%10;
   buf[2*i]=tb0[j];
   j=ds[i]/10;
   buf[2*i+1]=tb0[j];
     }
   
 }
   
 
void time(void)
{if(minb==1)
 {minb=0;
  min++;
  if(min==60)
    {min=0;
	 hou++;
	 if(hou==24)
	   {hou=0;
	    dat++;
		day++;
		}
	}
  }
}

void sound(void)		//sound fution
{uchar tt;
 uchar t1,t2;
 if(mk==1)			//play music
  {if(pt>=pr)		//play next tempi
   { tt=music[mc];	//fetch the music 
     mc++;
    if(tt==0xff)		// the end of music
	   { mc=0;
	     sk=1;
		 TR2=0;
		}
	else 
	 {t1=tt/16;
	  t2=tt%16;			//separate the frequence& tempi
	  if(t1==0)			//silence tempi
  	    sk=1,TR2=0;
	  else 
	   {TH2=RCAP2H=f[t1]/256;
		TL2=RCAP2L=f[t1]%256;
		TR2=1;
	   }
	  pr=t2+1;
	  pt=0;
	 }
  }
 }
 else		//stop play music
  { TR2=0;
    mc=0;
    sk=1;
   }
}

void delay(uint t)		//delay t ms
{uchar a;
 while(t--)
   {for(a=0;a<150;a++)
    ;
  }
}

uchar key(void)
{uchar kv;
 kv=0xff;
 if(kp==1)		//some key is press
  {if(k1==1&&k2==1&&k3==1&&k4==1)
     {delay(10);
	  if(k1==1&&k2==1&&k3==1&&k4==1)
	  kp=0;
	  }
	}
 else if(kp==0)
   {if(k1==0)
     {delay(10);
	  if(k1==0)
	    kv=1,kp=1;
	  }
	 if(k2==0)
	  {delay(10);
	    if(k2==0)
		  kv=2,kp=1;
	   }
	if(k3==0)
	  {delay(10);
	    if(k3==0)
		  kv=3,kp=1;
	  }
   if(k4==0)
     {delay(10);
	  if(k4==0)
	    kv=4,kp=1;
   }
  }
  if(kc!=0xff)
    {kv=kc;
	 kc=0xff;
	}
  return(kv);
}



  

main()
{ uchar p;
  s_ini();
  while(1)
   {time();
    ds[0]=sec;
	ds[1]=min;
	dis();
	sound();
	p=key();
	if(p==1)
	  mk=~mk;
	else if(p==2)
	  {sec++;
	   if(sec>=60)
	     sec=0;
	   }
	else if(p==3)
	  {min++;
	   if(min>=60)
	     min=0;
	   }
	else if(p==4)
	  {sec=0;
	   min=0;
	  }
   }
  
}

void timer0(void) interrupt 1		//time0 over interrupt service
{TH0=0xf7;	//reloard 
 P0=0xff;
 P2|=0x0f;
 P2&=tb1[bc];
 buf[2]&=~0x20;
 P0=buf[bc];
 bc++;
 if(bc>3)			//10ms
   {bc=0;
    ms++;
    if(ms==100)
	  {ms=0;
	   sec++;
	   if(sec==60)
	     {sec=0;
		  minb=1;
		 }
	   }
	hs--;
	 if(hs==0)		//200ms jis up
	    hs=20,
		ppd=1,
	    pt++;
  }
}

void timer2(void) interrupt 5			//timer 2 over interrupt serive fution
{TF2=0;
 sk=~sk;
}

/*主从机通信协议
  E1:按下开关1
  E2:按下开关2
  E3:按下开关3
  E4:按下开关4
  收到E1,E2,E3,E4分别回复E1,E2,E3,E4
  */


void com(void) interrupt 4				//serial port intterrup
{uchar tm,t1,t2;
 if(RI==1)		//receive 
  {RI=0;
   tm=SBUF;
   if(tm==0xAA)
     SBUF=0xBB;
   else if(tm==0xE1)
     kc=1,SBUF=0xE1;
   else if(tm==0xE2)
     kc=2,SBUF=0xE2;
   else if(tm==0xE3)
     kc=3,SBUF=0xE3;
   else if(tm==0xE4)
     kc=4,SBUF=0xE4;
   else	 
     {t1=tm%16;
	  t2=tm/16;
	  SBUF=t1*16+t2;
	 }
  }
 if(TI==1)
   TI=0;
}


⌨️ 快捷键说明

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