📄 51接收.c
字号:
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
code uchar display[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void led_display();
data uchar time[4]={0,0,0,0};
uint F_data;
sbit IRDA=P3^2;
uchar R_Byte;
unsigned char mode;
unsigned char DataTemp;
unsigned char DataCnt;
unsigned char EndFlag;
void StartRecive (void)
{
EX0=1;
IT0=1;
TMOD=0x01;
DataCnt = 0;
EndFlag = 0;
DataTemp = 0;
mode = 0;
}
main()
{
unsigned char temp1,temp2,count;
StartRecive();
EA=1;
//TH0=0x00;
//TL0=0x00;
DataTemp = 1;
while(1)
{
if(EndFlag == 1) {
temp1 = DataTemp&0x0f;
temp2 = DataTemp&0xf0;
temp2 >>= 4;
if(temp2 == temp1){
count = DataTemp&0x0f;
}
StartRecive();
}
time[0]=count/1000;
time[1]=count%1000/100;
time[2]=count%1000%100/10;
time[3]=count%1000%100%10;
led_display();
}
}
void extarn0(void)interrupt 0 using 1
{
uint Data,F_data;
TR0=1;
EX0=0;
while(!IRDA);
TR0=0;
Data=TH0;
F_data=(Data<<8)|TL0;
TH0=0;
TL0=0;
switch(mode) {
case 0: if((F_data>1700)&&(F_data<2300) ){
mode++;
}
EX0=1;
break;
case 1:
if((F_data>800)&&(F_data<1200) ){
DataTemp |= (0x01<<DataCnt);
}
if((F_data>300)&&(F_data<600) ){
DataTemp &= ~(0x01<<DataCnt);
}
DataCnt++;
EX0=1;
if(DataCnt == 8) {
EX0=0;
IE0 = 0;
EndFlag = 1;
}
break;
}
}
void delay(uchar j)
{ uchar i;
while(j--)
{
for(i=0;i<125;i++)
{;}
}
}
void led_display()
{
uchar i,j,k;
uchar *p,*q;
p=&time[0];
q=display;
k=0x20;
for(i=0;i<4;i++)
{
j=*(p+i);
P0=*(q+j);
P2=k;
k>>=1;
delay(1);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -