📄 dzled19.c
字号:
#include<reg51.h>
#include<absacc.h>
//#include<intrins.h>
#include<dzbuff1.h>
/* 8052 Extensions */
sfr T2CON = 0xC8;
sfr RCAP2L = 0xCA;
sfr RCAP2H = 0xCB;
sfr TL2 = 0xCC;
sfr TH2 = 0xCD;
/* 8052 Extensions */
/* IE */
sbit ET2 = 0xAD;
/* IP */
sbit PT2 = 0xBD;
/* P1 */
sbit T2EX = 0x91;
sbit T2 = 0x90;
/* T2CON */
sbit TF2 = 0xCF;
sbit T2IP = 0xCE;
sbit T2IE = 0xCD;
sbit T2RSE = 0xCC;
sbit BGEN = 0xCB;
sbit TR2 = 0xCA;
sbit C_T2 = 0xC9;
sbit CP_RL2= 0xC8;
//
#define FOSC 24 //11.0592 MHz
#define BAUD_RATE 9.6 //kpbs
//
sbit da1=P1^0;
sbit srclk=P1^1;
sbit rclk=P1^2;
sbit da2=P1^3;
/*sbit da2=P1^1;
sbit srclk=P1^2;
sbit rclk=P1^3; */
sbit pause=P1^7;
sbit P17=P1^6;
sbit DE=P3^2;
/*sbit P20=P2^0;
sbit P21=P2^1;
sbit P22=P2^2;
sbit P23=P2^3;
sbit P24=P2^4;
sbit P25=P2^5;
sbit P26=P2^6;
sbit P27=P2^7; */
//
bit init_pos;
bit yes_no;
bit EvRcv;
bit init_move;
bit need_data_dis;
bit pause_save;
bit pause_flag;
bit rcv_flag;
bit P17_save;
//
unsigned char data deng_t1;
unsigned char data deng_t2;
unsigned char data deng_t3;
//unsigned char deng_t4;
unsigned char data row_count;
unsigned char data zu_temp1;
unsigned char data count_byte;
unsigned char data move_num;
unsigned char data move_count;
//
unsigned char data benji_address;
unsigned char data rcvcount;
unsigned char idata datacomm1[2]={0,0};
unsigned char idata datacomm2[4]={0,0,0,0};
unsigned char idata rcvdata[13]={0,0,0,0,0,0,0,0,0,0,0,0,0};
//unsigned char rcvdata[13]={0,0,0,0,0,0,0,0,0,0,0,0,0};
void initial(void);
intial_io();
void dis_led(
unsigned char *p_temp0,
unsigned char *p_temp1,
unsigned char *p_temp2,
unsigned char *p_temp3,
unsigned char *p_temp4,
unsigned char *p_temp5,
unsigned char *p_temp6,
unsigned char *p_temp7,
unsigned char *p_temp8,
unsigned char *p_temp9,
unsigned char *p_temp10,
unsigned char *p_temp11);
void data_pro(unsigned char temp1,unsigned char temp2);
ansi1();
ansi11();
//
// unsigned char HexToDec(unsigned char tt);
void out_disp(unsigned char led);
unsigned char m_out_dis( //显示一行的8位字节代码
unsigned char num_byte,
unsigned char *p_led0,
unsigned char *p_led1,
unsigned char *p_led2,
unsigned char *p_led3,
unsigned char *p_led4,
unsigned char *p_led5,
unsigned char *p_led6,
unsigned char *p_led7,
unsigned char *p_led8,
unsigned char *p_led9,
unsigned char *p_led10,
unsigned char *p_led11);
//
void t_tx(unsigned char send_temp);
/************************************************************* */
void rcv_INT(void)interrupt 4
{
unsigned char temp,i;
if(RI)
{
temp=SBUF;
RI=0;
if (rcvcount==0)
{
if(temp==0x66)
{
rcvdata[0]=temp;
rcvcount++;
}
else rcvcount=0;
}
else if(rcvcount==1)
{
if(temp==0xbb)
{
rcvdata[1]=temp;
rcvcount++;
}
else rcvcount=0;
}
else if(rcvcount==2)
{
if(temp==benji_address)
{
rcvdata[2]=temp;
rcvcount++;
}
else rcvcount=0;
}
/* else if(rcvcount==3)
{
if(temp==0x7f)
{
rcvdata[3]=temp;
rcvcount++;
}
else rcvcount=0;
} */
else if(rcvcount>2&&rcvcount<13)
{
rcvdata[rcvcount]=temp;
rcvcount++;
if(rcvcount>12)
{
rcv_flag=1;
rcvcount=0;
temp=0;
datacomm1[0]=rcvdata[5];
datacomm1[1]=rcvdata[6];
data_pro(datacomm1[0],datacomm1[1]);
EvRcv=1;
// init_move=1;
} // if(rcvcount>12)
} // else if(rcvcount>3&&rcvcount<13)
}
}
/************************************************************* */
main()
{
unsigned char datacomm1[2];
unsigned char m;
intial_io();
ansi1();
initial();
ansi1();
benji_address=P2;
benji_address=0x0f&benji_address;
while (1)
{
move_num=8;
if(move_num>=28)
{
move_num=0;
deng_t2++;
// for (m=0;m<13;m++) t_tx(rcvdata[m]);
if (deng_t2>3)
{
deng_t2=0;
EvRcv=0;
need_data_dis=0;
}
}
// if (datacomm1[0]>0&&datacomm1[1]>0) need_data_dis=1;
if (init_pos)
{
move_num=8;
init_pos=0;
}
if (rcv_flag)
{
rcv_flag=0;
if (rcvdata[5]==0xff&&rcvdata[6]==0xff)
{
pause_flag=1;
// datacomm1[0]=0xff;
// datacomm1[1]=0xff;
}
else
{
need_data_dis=1;
yes_no=1;
pause_flag=0;
/* if (init_move&&yes_no)
{
init_move=0;
yes_no=0; */
init_pos=1;
//}
} // else
} // (rcvdata[0]==0x55&&rcvdata[1]==0xaa
if (!pause_save||pause_flag)
{
need_data_dis=0;
deng_t2=0;
dis_led(zan1_data,
ting1_data,ting2_data,
fu1_data,fu2_data,
wu1_data,kong1_data,kong3_data,
zan1_data,ting1_data,fu1_data,wu1_data);
}
if (need_data_dis) //正常服务
{
if (EvRcv) //有数据传来
dis_led(qing1_data,
first_num_data+(unsigned int)datacomm2[0]*16,
first_num_data+(unsigned int)datacomm2[1]*16,
first_num_data+(unsigned int)datacomm2[2]*16,
first_num_data+(unsigned int)datacomm2[3]*16,
hao1_data,gu1_data,ke1_data,
ban1_data,li1_data,ye1_data,wu1_data);
} //if (EvRcv&&need_data_dis)
else
if(!EvRcv||(!need_data_dis&&!pause_flag))
{
need_data_dis=0;
/* dis_led(gu1_data,
ke1_data,ke2_data,
nin1_data,nin2_data,
hhao1_data,kong1_data,kong3_data,
huan1_data,ying1_data,guang1_data,lin1_data); */
dis_led(huan1_data,
ying1_data,ying2_data,
guang1_data,guang2_data,
lin1_data,kong1_data,kong3_data,
huan1_data,ying1_data,guang1_data,lin1_data);
}
} //while
} //main
/************************************************************* */
ansi()
{
unsigned char yan1;
for(yan1=0;yan1<10;yan1++);
}
ansi1()
{
unsigned char yan1;
for(yan1=0;yan1<200;yan1++);
}
/************************************************************* */
void t() interrupt 1 //1MS中断
{
/* TL0=0X17;
TH0=0Xfc; //1ms */
TH0=-30000/256;
TL0=-30000%256;
deng_t1++;
pause_save=pause;
if(deng_t1>50)
{
deng_t1=0;
rcvcount=0;
deng_t3++;
//if (deng_t3>2)
{
// deng_t3=0;
P17_save = ~P17_save;
P17 = P17_save;
}
}
}
/************************************************************* */
intial_io()
{
// unsigned char k;
P0=0X00;
P1=0X00;
P2=0X00;
DE=0;
rcvcount=0;
deng_t1=0;
deng_t2=0;
row_count=0;
//
need_data_dis=0;
init_move=0;
EvRcv=0;
yes_no=0;
// da1=0;
da2=0;
srclk=0;
rclk=0;
//data_save=0;
//srclk_save=0;
// rclk_save=1;
P17_save=0;
zu_temp1=0;
count_byte=0;
pause_save=1;
pause_flag=0;
pause=1;
move_num=0;
move_count=0;
init_pos=0;
rcv_flag=0;
P2=0xff;
}
/************************************************************* */
void initial(void)
{
IE=0X82; //允许T0中断
//TMOD &= 0XF0; // clear Timer 0
TMOD = 0X21; //T1 is 方式2 ,T0工作于方式1
PCON=0;
SCON=0X50; //串口工作方式1,固定波特率
// TCON=0X02;
TL0 = 0X0; // value set by user
TH0 = 0X0; // value set by user
TR0 = 1;
//TL1=0xfd;
//TL1=0x100-(unsigned long)(FOSC*1000/(12*32*BAUD_RATE));
//TL1=256-(unsigned long)(FOSC*1000/(12*32*BAUD_RATE/2));
// TH1=TL1;
// TR1= 1;
RCAP2L=0xd9;
RCAP2H=0xff;
/*RCAP2L=(0x10000-(unsigned long)(FOSC*1000/(32*BAUD_RATE)))%0x100;
RCAP2H=(0x10000-(unsigned long)(FOSC*1000/(32*BAUD_RATE)))/0x100; */
T2CON=0X34;
/*TL1=0xFd;
TH1=0xFd; //Band = 9.6k */
//PCON=0x80;
TR2= 1;
IP=0X10; //串口中断为高优先级
//TR1= 1;
ES=1; //允许串口中断
EA=1;
}
void dis_led(
unsigned char *p_temp0,
unsigned char *p_temp1,
unsigned char *p_temp2,
unsigned char *p_temp3,
unsigned char *p_temp4,
unsigned char *p_temp5,
unsigned char *p_temp6,
unsigned char *p_temp7,
unsigned char *p_temp8,
unsigned char *p_temp9,
unsigned char *p_temp10,
unsigned char *p_temp11)
{
unsigned char j,temp=0;
for( j=0;j<16;j++)
{
switch(row_count)
{
case 0:
{
zu_temp1=row_count;
count_byte=0;
P0=zu_temp1-1;
temp=m_out_dis(count_byte,p_temp0,p_temp1,p_temp2,p_temp3,p_temp4,
p_temp5,p_temp6,p_temp7,p_temp8,p_temp9,p_temp10,p_temp11);
count_byte=temp;
P0=zu_temp1;
break;
}
case 1:
{
zu_temp1=row_count;
P0=zu_temp1-1;
temp=m_out_dis(count_byte,p_temp0,p_temp1,p_temp2,p_temp3,p_temp4,
p_temp5,p_temp6,p_temp7,p_temp8,p_temp9,p_temp10,p_temp11);
count_byte=temp;
P0=zu_temp1;
break;
}
case 2:
{
zu_temp1=row_count;
P0=zu_temp1-1;
temp=m_out_dis(count_byte,p_temp0,p_temp1,p_temp2,p_temp3,p_temp4,
p_temp5,p_temp6,p_temp7,p_temp8,p_temp9,p_temp10,p_temp11);
count_byte=temp;
P0=zu_temp1;
break;
}
case 3:
{
zu_temp1=row_count;
P0=zu_temp1-1;
temp=m_out_dis(count_byte,p_temp0,p_temp1,p_temp2,p_temp3,p_temp4,
p_temp5,p_temp6,p_temp7,p_temp8,p_temp9,p_temp10,p_temp11);
count_byte=temp;
P0=zu_temp1;
break;
}
case 4:
{
zu_temp1=row_count;
P0=zu_temp1-1;
temp=m_out_dis(count_byte,p_temp0,p_temp1,p_temp2,p_temp3,p_temp4,
p_temp5,p_temp6,p_temp7,p_temp8,p_temp9,p_temp10,p_temp11);
count_byte=temp;
P0=zu_temp1;
break;
}
case 5:
{
zu_temp1=row_count;
P0=zu_temp1-1;
temp=m_out_dis(count_byte,p_temp0,p_temp1,p_temp2,p_temp3,p_temp4,
p_temp5,p_temp6,p_temp7,p_temp8,p_temp9,p_temp10,p_temp11);
count_byte=temp;
P0=zu_temp1;
break;
}
case 6:
{
zu_temp1=row_count;
P0=zu_temp1-1;
temp=m_out_dis(count_byte,p_temp0,p_temp1,p_temp2,p_temp3,p_temp4,
p_temp5,p_temp6,p_temp7,p_temp8,p_temp9,p_temp10,p_temp11);
count_byte=temp;
P0=zu_temp1;
break;
}
case 7:
{
zu_temp1=row_count;
P0=zu_temp1-1;
temp=m_out_dis(count_byte,p_temp0,p_temp1,p_temp2,p_temp3,p_temp4,
p_temp5,p_temp6,p_temp7,p_temp8,p_temp9,p_temp10,p_temp11);
count_byte=temp;
P0=zu_temp1;
break;
}
case 8:
{
zu_temp1=row_count;
P0=zu_temp1-1;
temp=m_out_dis(count_byte,p_temp0,p_temp1,p_temp2,p_temp3,p_temp4,
p_temp5,p_temp6,p_temp7,p_temp8,p_temp9,p_temp10,p_temp11);
count_byte=temp;
P0=zu_temp1;
break;
}
case 9:
{
zu_temp1=row_count;
P0=zu_temp1-1;
temp=m_out_dis(count_byte,p_temp0,p_temp1,p_temp2,p_temp3,p_temp4,
p_temp5,p_temp6,p_temp7,p_temp8,p_temp9,p_temp10,p_temp11);
count_byte=temp;
P0=zu_temp1;
break;
}
case 10:
{
zu_temp1=row_count;
P0=zu_temp1-1;
temp=m_out_dis(count_byte,p_temp0,p_temp1,p_temp2,p_temp3,p_temp4,
p_temp5,p_temp6,p_temp7,p_temp8,p_temp9,p_temp10,p_temp11);
count_byte=temp;
P0=zu_temp1;
break;
}
case 11:
{
zu_temp1=row_count;
P0=zu_temp1-1;
temp=m_out_dis(count_byte,p_temp0,p_temp1,p_temp2,p_temp3,p_temp4,
p_temp5,p_temp6,p_temp7,p_temp8,p_temp9,p_temp10,p_temp11);
count_byte=temp;
P0=zu_temp1;
break;
}
case 12:
{
zu_temp1=row_count;
P0=zu_temp1-1;
temp=m_out_dis(count_byte,p_temp0,p_temp1,p_temp2,p_temp3,p_temp4,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -