標(biāo)題: 到單片機串口通信接收,發(fā)送的字符是正常的,但是單片機數(shù)碼管就一直從 [打印本頁]

作者: 2224304162    時間: 2022-11-29 10:43
標(biāo)題: 到單片機串口通信接收,發(fā)送的字符是正常的,但是單片機數(shù)碼管就一直從
循環(huán)
到我在串口助手看到發(fā)送的也是正常字符,一到單片機數(shù)碼管顯示就亂了一直從
{       
        TMOD = 0x20;
        PCON = 0x00;
        SCON = 0X50; //Method 1, ALLOW REN
        TH1 = 0xFD;
        TL1 = 0xFD;
        REN = 1;
        EA = 1;
        ES = 1;
        TR1 = 1;
}

void usart() interrupt 4
{

if(RI)  //接收到數(shù)據(jù)進(jìn)入if
   {
        RI=0;                                //重置串口接收狀態(tài)
                time = SBUF ; //time放到緩存區(qū)發(fā)送
       

         }
}


作者: 2224304162    時間: 2022-11-29 10:44
一直從70到48循環(huán)數(shù)碼管,我用串口助手也看了上位機發(fā)送的沒問題
作者: xuyaqi    時間: 2022-11-29 13:00
你是數(shù)碼管顯示過程原理還沒弄明白,改一下程序看能否顯示自己想顯示的字符。
作者: lkc8210    時間: 2022-11-29 13:14
標(biāo)題沒尾
內(nèi)文沒尾
代碼去頭沒尾
作者: 2224304162    時間: 2022-11-29 14:50
#include <reg52.h>
sbit key1=P1^0;
sbit key2=P1^1;
sbit key3=P1^2;
sbit key4=P1^3;
sbit key5=P1^4;
sbit key6=P1^5;
typedef unsigned char uchar;
typedef unsigned int uint;
unsigned int i;
unsigned char tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsigned char x;
unsigned int aj=0;
uchar time;
void delay(int a)               
{   
    for(;a>0;a--)
      for(i=0;i<62;i++);
}
void UsartInit()

{       
        TMOD = 0x20;
        PCON = 0x00;
        SCON = 0X50; //Method 1, ALLOW REN
        TH1 = 0xFD;
        TL1 = 0xFD;
        REN = 1;
        EA = 1;
        ES = 1;
        TR1 = 1;
}
          
     



void Show_Init()  
{
        key1=1;
    key2=1;
    key3=1;
    key4=1;
        key5=1;
        key6=1;

}
void send(unsigned char cc)
{
        SBUF = cc;
        while(TI==0);  
        TI = 0;  
}
void key()
{        if(!aj)
    {
        if(!key1)  
        {
            delay(1);
            if(!key1)
            {
                send('1');
                aj=1;
                                x=1;
            }
        }
        else if(!key2)  
        {
            delay(1);
            if(!key2)
            {
                send('2');
                aj=1;
                                x=2;
            }
        }
        else if(!key3)
        {
            delay(1);
            if(!key3)                       
            {
                send('3');
                aj=1;
                                x=3;
            }
        }
        else if(!key4)
        {
            delay(1);
            if(!key4)
            {
                send('4');
                aj=1;
                                x=4;
            }
        }
                else if(!key5)
        {
            delay(1);
            if(!key5)
            {
                send('5');
                aj=1;
                                x=5;
            }
        }
                else if(!key6)
        {
            delay(1);
            if(!key6)
            {
                send('6');
                aj=1;
                                x=6;
            }
        }
    }       
    if(key1==1 && key2==1 && key3==1 && key4==1 && key5==1 & key6==1)
       aj=0;

}

void main()
{       
         
        Show_Init();
        UsartInit();
        while(1)
        {
        P2=0xFD;
        P0=tab[(int)time/0x10];delay(2);
         
        P2=0xFB;
        P0=tab[(int)time%0x10];delay(2);

        P2=0xFE;
        P0=tab[x];delay(2);
           key();
          
          
          
          
        }  
}
void usart() interrupt 4
{

if(RI)  //接收到數(shù)據(jù)進(jìn)入if
   {
        RI=0;                                //重置串口接收狀態(tài)
                time = SBUF ; //time放到緩存區(qū)發(fā)送
       

         }
}

作者: 2224304162    時間: 2022-11-29 15:00
lkc8210 發(fā)表于 2022-11-29 13:14
標(biāo)題沒尾
內(nèi)文沒尾
代碼去頭沒尾

大佬代碼發(fā)在后面了hex模式發(fā)送數(shù)碼管顯示是對的,文本模式就是顯示錯的48-57 65-70
作者: 2224304162    時間: 2022-11-29 15:02
xuyaqi 發(fā)表于 2022-11-29 13:00
你是數(shù)碼管顯示過程原理還沒弄明白,改一下程序看能否顯示自己想顯示的字符。

大佬是這樣的,我數(shù)碼管要顯示的的是從上位機發(fā)送過來的字符,但是單片機接收到的數(shù)碼管顯示不對
作者: 2224304162    時間: 2022-11-29 15:03
上位機發(fā)送的是10進(jìn)制的字符,不知道單片機要怎么讀取
作者: 2224304162    時間: 2022-11-29 15:04
void main() {                           Show_Init();          UsartInit();         while(1)         {         P2=0xFD;         P0=tab[time/10];delay(2);                   P2=0xFB;         P0=tab[time%10];delay(2);          P2=0xFE;         P0=tab[x];delay(2);            key();                                                      }   }
作者: xuyaqi    時間: 2022-11-29 15:37
2224304162 發(fā)表于 2022-11-29 15:02
大佬是這樣的,我數(shù)碼管要顯示的的是從上位機發(fā)送過來的字符,但是單片機接收到的數(shù)碼管顯示不對

串口發(fā)字符一般用ASCII碼,你要解決怎么在數(shù)碼管顯示ASCII碼字符,你先解決怎么在數(shù)碼管顯示ASCII碼字符,再加串口通信。
作者: lkc8210    時間: 2022-11-29 15:45
2224304162 發(fā)表于 2022-11-29 15:02
大佬是這樣的,我數(shù)碼管要顯示的的是從上位機發(fā)送過來的字符,但是單片機接收到的數(shù)碼管顯示不對

發(fā)了字符,單片機要用數(shù)組接收




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1