📄 my couse.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 + -