找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 936|回复: 10
收起左侧

到单片机串口通信接收,发送的字符是正常的,但是单片机数码管就一直从

[复制链接]
ID:761917 发表于 2022-11-29 10:43 | 显示全部楼层 |阅读模式
循环
到我在串口助手看到发送的也是正常字符,一到单片机数码管显示就乱了一直从
{       
        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)  //接收到数据进入if
   {
        RI=0;                                //重置串口接收状态
                time = SBUF ; //time放到缓存区发送
       

         }
}

回复

使用道具 举报

ID:761917 发表于 2022-11-29 10:44 | 显示全部楼层
一直从70到48循环数码管,我用串口助手也看了上位机发送的没问题
回复

使用道具 举报

ID:94031 发表于 2022-11-29 13:00 | 显示全部楼层
你是数码管显示过程原理还没弄明白,改一下程序看能否显示自己想显示的字符。
回复

使用道具 举报

ID:161164 发表于 2022-11-29 13:14 | 显示全部楼层
标题没尾
内文没尾
代码去头没尾
回复

使用道具 举报

ID:761917 发表于 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)  //接收到数据进入if
   {
        RI=0;                                //重置串口接收状态
                time = SBUF ; //time放到缓存区发送
       

         }
}
回复

使用道具 举报

ID:761917 发表于 2022-11-29 15:00 | 显示全部楼层
lkc8210 发表于 2022-11-29 13:14
标题没尾
内文没尾
代码去头没尾

大佬代码发在后面了hex模式发送数码管显示是对的,文本模式就是显示错的48-57 65-70
回复

使用道具 举报

ID:761917 发表于 2022-11-29 15:02 | 显示全部楼层
xuyaqi 发表于 2022-11-29 13:00
你是数码管显示过程原理还没弄明白,改一下程序看能否显示自己想显示的字符。

大佬是这样的,我数码管要显示的的是从上位机发送过来的字符,但是单片机接收到的数码管显示不对
回复

使用道具 举报

ID:761917 发表于 2022-11-29 15:03 | 显示全部楼层
上位机发送的是10进制的字符,不知道单片机要怎么读取
回复

使用道具 举报

ID:761917 发表于 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();                                                      }   }
回复

使用道具 举报

ID:94031 发表于 2022-11-29 15:37 | 显示全部楼层
2224304162 发表于 2022-11-29 15:02
大佬是这样的,我数码管要显示的的是从上位机发送过来的字符,但是单片机接收到的数码管显示不对

串口发字符一般用ASCII码,你要解决怎么在数码管显示ASCII码字符,你先解决怎么在数码管显示ASCII码字符,再加串口通信。
回复

使用道具 举报

ID:161164 发表于 2022-11-29 15:45 | 显示全部楼层
2224304162 发表于 2022-11-29 15:02
大佬是这样的,我数码管要显示的的是从上位机发送过来的字符,但是单片机接收到的数码管显示不对

发了字符,单片机要用数组接收
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表