数码之家

 找回密码
 立即注册
搜索
查看: 4457|回复: 30

[C51] 谁帮忙写个串口读取用数码管显示的程序

[复制链接]
回帖奖励 42 家元 回复本帖可获得 1 家元奖励! 每人限 1 次
发表于 2020-12-2 19:54:01 | 显示全部楼层 |阅读模式
本帖最后由 love香 于 2020-12-4 22:41 编辑




空格0.011.8----------------空格2.2  16  57  2414.212.611.4   0   1  12   0   0   0   0   0   1
这个是串口调试助手读取到的信息,一共是88个字符数据
上位机发送字符串“SRD”,控制器会马上返回88个字符的数据,每个控制器状态数据占4位,共22个控制器状态数据
绿字部分 (0.0)(11.8)----后面的(空格2.2)
绿字部分这些数字我想用9位数码管显示出来
这88个字符,固定读取第1-2-4位5-6-8位25-26-28位字符,
这些数字会在0.00-60.0之间变动,每次读取的都可能不一样。



我尝试改GPS数码管时钟的程序,用来显示,但是失败告终,
因为GPS有固定的格式$开头,这个没有固定格式,前面第一位为0的时候输出是空格,为1的时候才输出1,所以不知道怎么改了:cry:
有没有大神帮个忙,可以有偿。











百度下载地址https://pan.baidu.com/s/1LjRRkaGxLu1LUT6hnMl-Ww密码   iaw9
补充现在再用的GPS时钟程序与仿真文件,这个没有修改的,因为我不知道改太多程序。










本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
发表于 2020-12-2 20:14:53 | 显示全部楼层
有偿是怎么个有偿法   还有是用stc的单片机还是?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-2 20:21:12 | 显示全部楼层
珜羽 发表于 2020-12-2 20:14
有偿是怎么个有偿法   还有是用stc的单片机还是?

就当给点辛苦费吧:loveliness: 用现有的贴片STC89C52吧,IO应该够用了。
回复 支持 反对

使用道具 举报

发表于 2020-12-3 08:48:31 | 显示全部楼层
末尾 有没有回车换行符,把接收的HEX贴上来看看,另外 "这个没有固定格式,前面第一位是0的时候是空格,为1的时候才输出1" 哪里输出为1    ?
回复 支持 反对

使用道具 举报

发表于 2020-12-3 10:19:24 | 显示全部楼层
为什么一定要固定格式呢?其实这里的固定格式也是有的,就是你发送SRD,它返回88个字符,这不就是固定的么?
你发送SRD后等着接收88个字符即可,可以设置超时时间,超时时间到仍不满88个字符,就抛弃此次数据,开始下一次发送SRD
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-3 11:08:55 | 显示全部楼层
wpppmlah 发表于 2020-12-3 08:48
末尾 有没有回车换行符,把接收的HEX贴上来看看,另外 "这个没有固定格式,前面第一位是0的时候是空格,为1的 ...

下位机没有HEX文件哦,
前面第一位是0的时候是空格,如果是1 的时候,第一位就是1 ,不是空格了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-3 11:10:35 | 显示全部楼层
renpeng009 发表于 2020-12-3 10:19
为什么一定要固定格式呢?其实这里的固定格式也是有的,就是你发送SRD,它返回88个字符,这不就是固定的么 ...

谢谢,好像这样检测确实比较好,就是我还没有这个能力修改太多参数,:sweat:
回复 支持 反对

使用道具 举报

发表于 2020-12-3 11:34:37 | 显示全部楼层
定义数据接收数组num[]、显示用数组V[]
发送SRD指令
循环88次,将串口得到的数据依次存入数组num[](进入循环前,给num[87]赋值为大于1的整数(例如2),用于判断接收的数据是否有效)
判断num[87]是否大于1,如果不是,说明数据接收完成且正确;否则说明数据接收错误,放弃此次显示,重新发送SRD指令
判断num[0]是否是空格,是,则将num[1]、num[3]、num[4]分别存入V[0]、V[1]、V[2]并显示到数码管,同时点亮第一位数字右下角小数点;否,则将num[0]、num[1]、num[3]分别存入V[0]、V[1]、V[2]并显示到数码管,同时点亮第二位数字右下角小数点。
其它数据显示类推。
回复 支持 反对

使用道具 举报

发表于 2020-12-3 12:12:54 | 显示全部楼层
如果需要帮忙写代码,你得把现有代码和单片机与串口模块、数码管的电路图发上来。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-3 13:56:49 | 显示全部楼层
本帖最后由 love香 于 2020-12-3 21:17 编辑
cox_1974 发表于 2020-12-3 12:12
如果需要帮忙写代码,你得把现有代码和单片机与串口模块、数码管的电路图发上来。 ...



主题贴已更新了,北斗GPS模块接收 数码管显示时间的程序,没有做修改
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-3 14:02:02 | 显示全部楼层
本帖最后由 love香 于 2020-12-3 21:18 编辑
cox_1974 发表于 2020-12-3 12:12
如果需要帮忙写代码,你得把现有代码和单片机与串口模块、数码管的电路图发上来。 ...


已经修改了主题内容
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-3 14:06:37 | 显示全部楼层
cox_1974 发表于 2020-12-3 11:34
定义数据接收数组num[]、显示用数组V[]
发送SRD指令
循环88次,将串口得到的数据依次存入数组num[](进入循 ...

#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
#define BAUD 9600
#define XTAL 11059200

sbit KK=P3^5;   //

//****************************************
//延时
//****************************************
void delay(unsigned int k)      
{                                               
        unsigned int i,j;                              
        for(i=0;i<k;i++)
        {                       
                for(j=0;j<121;j++);
        }                                               
}
/***************************************************
                    发送一个字节
***************************************************/
void SendByte(unsigned char dat)
{
SBUF = dat;
while(!TI);
      TI = 0;
}
//**************************************************
void sendString(char *str)
{
while(*str!='\0')// \0 表示字符串结束标志,
                //通过检测是否字符串末尾
  {
  SendByte(*str);
  str++;
  }
}

void main()
{
        SCON = 0x50;
        TMOD = 0x20;
        PCON = 0x00;
        TH1 = (unsigned char)(256 - XTAL/12/32/BAUD);
        TL1 = TH1;
        TI   = 0;
        RI   = 0;
        TR1  = 1;
        IE   = 0x90;
        while(1)
        {
     //           sendString("SRD\r\n");

                 if (KK==0)
                           { sendString("SRD");       
                delay(350);        //350MS发送一次
                                         }
        }
}


你的思路很好,无奈我太菜了,这个是单独发设SRD字符的程序,没能合并到GPS数码管的程序里面
回复 支持 反对

使用道具 举报

发表于 2020-12-3 15:03:26 | 显示全部楼层
太简单了,就看有偿是怎么个尝了:lol:
回复 支持 反对

使用道具 举报

发表于 2020-12-3 15:31:01 | 显示全部楼层
楼主 把仿真文件发上来,方便有能力的大神使用测试
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-3 21:19:16 | 显示全部楼层
本帖最后由 love香 于 2020-12-3 21:20 编辑
小陆 发表于 2020-12-3 15:03
太简单了,就看有偿是怎么个尝了

大神帮个忙吧
反正不能肉偿:shy:
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-3 21:20:36 | 显示全部楼层
wpppmlah 发表于 2020-12-3 15:31
楼主 把仿真文件发上来,方便有能力的大神使用测试

已修改 发送了
回复 支持 反对

使用道具 举报

发表于 2020-12-3 22:29:36 | 显示全部楼层

回帖奖励 +1 家元

你的意思是不是说:用51单片机给控制器发送字符串“SRD”,控制器会回复一串字符串,这些字符串得绿色部分包含了你想让数码管显示的内容?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-3 22:32:48 | 显示全部楼层
40560335 发表于 2020-12-3 22:29
你的意思是不是说:用51单片机给控制器发送字符串“SRD”,控制器会回复一串字符串,这些字符串得绿色部分 ...

对,就是这个意思。:praise:
回复 支持 反对

使用道具 举报

发表于 2020-12-3 23:48:34 | 显示全部楼层
love香 发表于 2020-12-3 22:32
对,就是这个意思。

如果应答的字符串有规律那就很好办了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-4 00:29:26 | 显示全部楼层
40560335 发表于 2020-12-3 23:48
如果应答的字符串有规律那就很好办了

规律也有,就是一共返回88个字符,不会多,如果少了就是数据丢失了,这条数据也可能不准确了。
回复 支持 反对

使用道具 举报

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

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-5-10 10:32 , Processed in 0.109200 second(s), 11 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

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