基于串口助手的单片机时钟程序问题

2019-07-15 23:47发布

下面是程序的代码,时钟能够正常在数码管上显示出来,但是有其他数码管也会有走的迹象,不过比较暗,仔细看才能看出来,第二个问题是写好的用串口助手发送没有返回,就是没接收,我不知道是程序那里出了问题,有没有高手帮忙看看,谢谢 在线急等。
#include<reg52.h>
#include<absacc.h>
#include<source.h>
uint buf1[6]={0};
uchar uart[9]="000000000";
uint uart_deal[8]={0};
uint t=0;
uint num=0,i=0,temp1,temp2,flag;
uchar tab[]="11111";
uchar code dispcode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf};
uchar miao=0;
uchar fen=0;
uchar shi=12;
uchar mstcnt=0;
sbit P1_0=P1^0;
sbit P1_1=P1^1;
sbit P1_2=P1^2;
sbit P1_5=P1^5;
void delay(uint k);
void time_pro();
void display();
void timer0_init();
void get_uart_deal();
void display()
{
  P2=0xfe;
  P0=dispcode[miao%10];
  delay(1);
  P2=0xfd;
  P0=dispcode[miao/10];
  delay(1);
  P2=0xfb;
  P0=dispcode[10];
  delay(1);
  P2=0xf7;
  P0=dispcode[fen%10];
  delay(1);
  P2=0xef;
  P0=dispcode[fen/10];
  delay(1);
  P2=0xdf;
  P0=dispcode[10];
  delay(1);
  P2=0xbf;
  P0=dispcode[shi%10];
  delay(1);
  P2=0x7f;
  P0=dispcode[shi/10];
  delay(1);
}
void delay(uint k)
{
uchar j;
while((k--)!=0)
{
  for(j=0;j<125;j++);
}
}
void time_pro(void)
{
if(miao==60)
{
  miao=0;
  fen++;
  if(fen==60)
  {
   fen=0;
   shi++;
   if(shi==24)
   {
    shi=0;
   }
  }
}
}
void zhengdian(void)
{
if((miao==0)&(fen==0))
{
  P1_5=0;
  delay(1000);
  P1_5=1;
}
}
void main(void)
{
P1=0xff;
TMOD=0x11;
TH0=0x3c;
TL0=0xb0;
EA=1;
ET0=1;
TR0=1;
timer0_init();
while(1)
{
  zhengdian();
  display();
}
}
void timer0(void) interrupt 1
{
TH0=0x3c;
TL0=0xb0;
TMOD=0x11;
mstcnt++;
if(mstcnt==20)
{
  miao++;
  time_pro();
  mstcnt=0;
}
}
void timer0_init()
{  
  display();   //ÏÔʾº¯Êý³õʼ»¯
  PCON |= 0x80;     //SMOD=1£¬²¨ÌØÂʼӱ¶
  TMOD=0x21;      //ÉèÖö¨Ê±Æ÷0¹¤×÷·½Ê½Îª1£¨0000 0001£©;´®¿Ú¹¤×÷:¶¨Ê±Æ÷1¹¤×÷·½Ê½2£¨0010 0000£©  
  TH0=(65535-50000)/256; //×°¶¨Ê±Æ÷³õÖµ,¶¨Ê±50msºó·¢ÉúÖжÏ
  TL0=(65535-50000)%256;
  TH1=0xe8;    //¶¨Ê±Ê±¼ä243¦Ìs
  TL1=0xe8;    //²¨ÌØÂÊ2400
  TR0=1;       //Æô¶¯¶¨Ê±Æ÷0
  TR1=1;       //Æô¶¯¶¨Ê±Æ÷1   
  ET0=1;       //¿ª¶¨Ê±Æ÷0ÖжÏ
  SM0=0;     //8λUART²¨ÌØÂʿɱ䣨T1Òç³öÂÊ/N£©·½Ê½1
  SM1=1;     
  PS=1;     //´®¿ÚÖжϸßÓÅÏȼ¶
  REN=1;     //ÔÊÐí´®¿Ú½ÓÊÕ
  EA=1;       //¿ª×ÜÖжÏ
  ES=1;     //¿ª´®¿ÚÖжÏ
}
void get_uart_deal()
{
if(num==9)
{
  ES=0;
  for(i=1;i<9;i++)
  {
   uart_deal[i]=uart[i]-48;
  }
  if(uart[0]==115)
  {
   shi=uart_deal[1]*10+uart_deal[2];
   if(shi>=24)
    shi=0;
   fen=uart_deal[4]*10+uart_deal[5];
   if(fen>=60)
    fen=0;
   miao=uart_deal[7]*10+uart_deal[8];
   if(miao>=60)
    miao=0;
  }
  for(i=0;i<14;i++)
  {
   SBUF=tab[i];
   while(!TI);
   TI=0;
  }
  for(i=0;i<9;i++)
  {
   SBUF=uart[i];
   while(!TI);
   TI=0;
  }
  ES=1;
  num=0;
}
}
void  uart_isr() interrupt 4
{
     if(RI==1)
  {
  RI=0;
  uart[num]=SBUF;
  num++;
  }
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。