题目:单片机接收数据包内容用数码管分屏显示 出现的问题:数码管显示的数不是我想要的数,可以看出有叠加,但是不知如何修改,请求帮忙 #include<reg51.h> unsigned char buf; unsigned char num[6]={0xaa,0x00,0x00,0x00,0x00,0xbb}; unsigned char num_suc[6]; unsigned char rx_i=0; unsigned char tx_i=0; unsigned char re_succ_flag=0; unsigned char num_1[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; unsigned char a[4]; unsigned char times; sbit P2_4=P2^4; sbit P2_5=P2^5; sbit P2_6=P2^6; sbit P2_7=P2^7; void inter_serial() interrupt 4 { if(TI==1) { if(tx_i<6) {SBUF=num_suc[tx_i]; tx_i++; } else tx_i=0; TI=0; } if(RI==1) { buf=SBUF; if(buf==0xaa) rx_i=0; num[rx_i]=buf; rx_i++; if(rx_i==6&&buf==0xbb) { re_succ_flag=1; num_suc[0]=num[0]; num_suc[1]=num[1]; num_suc[2]=num[2]; num_suc[3]=num[3]; num_suc[4]=num[4]; num_suc[5]=num[5]; } RI=0; } } void delay() { unsigned char i; for(i=0;i<200;i++); } void delay1() { unsigned char i,j; for(i=0;i<200;i++) for(j=0;j<200;j++); } void display() { unsigned char i; a[0]=buf%10; a[1]=buf%100/10; a[2]=buf%1000/100; a[3]=times; for(i=0;i<4;i++) { if(i>=0&&i<3) { P0=num_1[a]; } else if(i==3) P0=num_1[times]; switch(i) { case 0: P2_4=0; case 1: P2_5=0; case 2: P2_6=0; case 3: P2_7=0; } delay(); P2|=0XF0; } } void main() { unsigned char i; TMOD=0X20; TH1=0XFD; TL1=0XFD; TR1=1; SCON=0X50; EA=1; ES=1; while(1) { if(re_succ_flag==1) { num_suc[0]=0xbb; num_suc[5]=0xaa; TI=1; re_succ_flag=0; if(i>0&&i<5) { buf=num_suc; times=i; }delay1(); } display(); } }
|