各位大仙,我用串口调试助手往单片机里发送数据,然后再数码管里显示,下面是我的程序,但不知哪错了,求指导啊!!
#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; }
}
欢迎光临 (http://www.51hei.com/bbs/) | Powered by Discuz! X3.1 |