找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

我想用单片机通过串口实现输入一组数据,然后在12864上的一行显示出来

查看数: 3994 | 评论数: 14 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2020-5-19 22:24

正文摘要:

显示函数我写好了,请问就是怎么把串口收到的数据储存起来,然后怎么调用啊? #include<reg51.h> #include<intrins.h> #define  uchar  unsigned char #define  uint&nbs ...

回复

ID:592807 发表于 2020-5-21 08:56
chengyuyu 发表于 2020-5-20 15:03
您好,谢谢您的解答,我还是有一点不明白,希望您能赐教,就是那个我该怎么知道temp【】数组里面的数是多 ...

1 如果你的串口通讯正常的并且temp数组足够大的话,那么你接受道所有的数剧都会在temp数组里面。2 读取数据问题着个全是可以不用解释,数据就在数组里面,你复制出来也行,直接调用也行
3 着个应该才是你要问的问题,比如串口发送:“1 2 3  a b c 你好吗”怎么在显示屏显示,做法如下
定义结构体:
typedef struct
{
u8 sign_name;//数字和字符的ASCII码
u8 sign_data[16];//显示数据局,字库
}sign_number;

typedef struct
{
u8 font[2];//汉字的ASCII码,
u8 chinese1[16];//汉字上半部分字库
u8 chinese2[16];//下半部分字库
}chinese;

1 的ASCII码是0X31,用for循环检索到temp里面有0x31就往显示屏输送1的显示数据


你要自己建造一个字库,:
ID:755110 发表于 2020-5-21 08:40
763900682 发表于 2020-5-20 23:46
无论用那种单片机,道理差不多的。都要先申请一个全局变量的数组,将串口接收的数据放到该数组中。接受完数 ...

void UsartConfiguration()
{
         SCON=0X50;//&sup1;¤×÷·&frac12;&Ecirc;&frac12;1
         TMOD=0X20;
         TL1=0XFA;
         TH1=0XFA;
         TR1=1;
         EA=1;
         ES=1;
}
void main(void)
{
while(1)       
  {               
        UsartConfiguration();
         if(rcv_date_ok_flag==1)
              {
                      rcv_date_ok_flag=0;
                      for(i=0;i<rcv_len;i++)
                      shu_disp_1(2,i,rcv_buf);
              }
  }
}                               
void UART_one_Interrupt_Receive(void) interrupt 4
{         
        unsigned char i;   
uchar temp =SBUF;

if(temp==0x02)
{
        rcv_date_ok_flag=0;
        rcv_len=0;
}
else if(temp==0x03)
{
        rcv_date_ok_flag=1;
}
else
{
        rcv_buf[rcv_len++]=temp;
}
}
您能给看看哪不对吗
ID:352449 发表于 2020-5-20 23:46
无论用那种单片机,道理差不多的。都要先申请一个全局变量的数组,将串口接收的数据放到该数组中。接受完数组后,串口会有特定的寄存器标志接收完成,检测到接收完成就将数组的数据显示,然后清空数组和寄存器的标志位。等待下一次接收。
ID:648281 发表于 2020-5-20 23:26
你好!
如果串口传什么汉字就显示什么的话,需要带有字库的液晶;
如果不含有字库的液晶,只能先制作字库,显示汉字数受限。
ID:755110 发表于 2020-5-20 15:04
xxpp2011 发表于 2020-5-20 08:53
一位一位接收,放进数组里面,显示就从数组里面读

您好,我发了一下我的代码,您看看还要怎么做才能取出temp【】里面的数?
ID:755110 发表于 2020-5-20 15:03
黄youhui 发表于 2020-5-20 11:45
串口接收的数据是ASCII码,你接收到的也只能是ASCII码。ASCII是uint8_t(char)类型的所以最大只有0xff  ...

您好,谢谢您的解答,我还是有一点不明白,希望您能赐教,就是那个我该怎么知道temp【】数组里面的数是多少,师傅跟我说用for循环就能取出来,您能给我解释一下吗?
ID:592807 发表于 2020-5-20 11:45
chengyuyu 发表于 2020-5-20 09:10
您好,能稍微讲一下传参吗,我现在应该是可以把接收到的数据缓存到一个数组,但是我用的12864是不带字库 ...

串口接收的数据是ASCII码,你接收到的也只能是ASCII码。ASCII是uint8_t(char)类型的所以最大只有0xff 也就是说你从串口接收到的数字是255,不存在大于256的数字。
而且你发送1000.串口传输给单片机或者单片机传给串口的就是  0x31  0X30  0X30这三个数字,
0X31在ASCII里面就是1   0X30就是0.
如图所示如果发送或者接收的数字大于126,那么串口会默认将这个大于126的数字和下一个数字组合,凑成一个汉字,也就是为什么汉字占两个字节,而数字符号占一个字节的原因。

51hei截图20200520113747.png (44.57 KB, 下载次数: 70)

51hei截图20200520113747.png
ID:440553 发表于 2020-5-20 10:40
用个数组,把接收到的数据存起来。然后把这个数组的内容显示在12864上
ID:755110 发表于 2020-5-20 09:12
xxpp2011 发表于 2020-5-20 08:53
一位一位接收,放进数组里面,显示就从数组里面读

您好,我的12864是不带字库的,所以我定义了一个字符字库【】,里面是从1-9的字模,这样从数组里面读是不是得取位然后再显示?
ID:755110 发表于 2020-5-20 09:10
muzhi 发表于 2020-5-19 22:52
if(串口收到数据了)
{
    调用"屏幕显示字符串函数"(传参"串口收到的数据");

您好,能稍微讲一下传参吗,我现在应该是可以把接收到的数据缓存到一个数组,但是我用的12864是不带字库的,所以得知道数组里面的数的大小,然后在yi==temp%1000000000/100000000
                               
                                        qianwan=temp%100000000/10000000
                                       
                                        baiwan=temp%10000000/1000000
                                       
                                        shiwan=temp%1000000/100000                               
           wan=temp%100000/10000;                                           

                 qian=temp%10000/1000;

                 bai=temp%1000/100;               

                 shi=temp%100/10;

                 ge=temp%10;这样取出值的大小最后根据每个值得大小来显示自定义字符字库里的字符,这个思路对吗?
ID:592807 发表于 2020-5-20 09:03
无论用那种单片机,道理差不多的。都要先申请一个全局变量的数组,将串口接收的数据放到该数组中。接受完数组后,串口会有特定的寄存器标志接收完成,检测到接收完成就将数组的数据显示,然后清空数组和寄存器的标志位。等待下一次接收。
ID:452950 发表于 2020-5-20 08:53
一位一位接收,放进数组里面,显示就从数组里面读
ID:342911 发表于 2020-5-19 22:52
if(串口收到数据了)
{
    调用"屏幕显示字符串函数"(传参"串口收到的数据");
}

类似这样?

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

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

Powered by 单片机教程网

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