各位大仙,我用串口调试助手往单片机里发送数据,然后再数码管里显示,下面是我的程序,但不知哪错了,求指导啊!! #include <reg52.h> #include <intrins.h> unsigned char code non_dot[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; //数字不带小数点 unsigned char code dot[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10}; //数字带小数点 int i=0; unsigned char data Temp[10]; unsigned char data dis_digit; unsigned char data first; int k=1,m=1,flag=0; //定义全局变量 void ser_uart(void); //函数声明 void timer0(); //定时器的初始化,定时器1,模式2,波特率:9600,用于串行口。定时器0,模式1,用于数码管的动态扫描 void init() { TMOD=0X21; //初始化定时器0和1. TH1=0Xfd; TL1=0Xfd; TH0=0XFE; TL0=0X17; TR1=1; //TR0=1; SCON=0X50; PCON=0X00; //波特率没有倍增 EA=1; ES=1; ET0=1; dis_digit=0xfe; } //主函数 void main() { init(); while (1); } //串口中断程序 void ser_uart(void) interrupt 4 //串行中断服务程序 { if(RI) //判断是接收中断产生 { RI=0; if(SBUF==‘%’) { flag=1; while(flag==1) { Temp=SBUF; if(Temp!='#') { i++; break; } else { TR0=1; break;} } } /* else display(Temp); */ /* } if(TI) TI=0; } */ //判定有无小数点及显示整数程序 /*void judge(unsigned char *data) { int j=0; for(j=0;j<=i;j++) { if{*(data+j)!='.'} ; else display(Temp); } } */ //定时器0中断程序,负责数码管的动态扫描 /*void timer0() interrupt 1 { TH0=0XFE; TL0=0X17; P2=0XFF; //先关闭所有数码管 if(k<i) { P0=non_dot[(Temp[k])-0x30]; k++; } else k=1; P2=dis_digit; if(m<i-1) { m++; dis_digit=_crol_(dis_digit,1); //位选通值左移,下次中断时选通下一位数码管 } else { m=1; dis_digit=0xfe; } } |