发个CH375 从机模式 双向通信 自编的简单上位机软件

2020-01-30 14:11发布

完成了。ourdev_639006K3AZ8Z.rar(文件大小:16.64M) (原文件名:完成设计.rar)

补上驱动ourdev_639008WAVXRA.rar(文件大小:100K) (原文件名:电脑端驱动安装.rar)

资料里面有视频。
实现了单片机STC89C52与PC双向通信,单片机向PC发送AD采集的电压值,PC通过键盘控制单片机上的三个LED。
按1,黄 {MOD}的亮,按2,绿 {MOD}LED亮,按3,红 {MOD}的LED亮。
没有照相机,所以实物是看不到了。
调试过程中把TLC1549当成了TLC549,让我白费了几天的功夫。。。。。

test.c被公司的加密软件加密
我只能发在下面了
// Copyright (c) Naiky Company. All rights reserved.
// Abstract:
// 测试CH372/CH375  V1.0  support USB chip: CH372/CH375
// 本程序测试数据传输的正确性,可以用于长时间连续测试,对应的单片机端的测试程序为TEST.C
// 方法: 显示单片机通过CH375发送的数据
/////////////////////////////////////////////////////////////////////////////////////////////
#include        <windows.h>
#include        <stdlib.h>
#include        <stdio.h>
#include        <conio.h>
#include        <winioctl.h>
#include        "CH375DLL.H"                                // CH375的动态链接库

#define                TEST_DATA                        0x21        // 计算机和单片机的应用程序之间约定下传数据的首字节是命令码

void main (void)
{
        int                                key;// 设置退出控制台的按键
        unsigned char        mBuffer[100];// 发送数据缓存 必须大于块的大小
        unsigned char        mReadBuf[100];// 接收数据缓存 必须大于块的大小
        unsigned long        i;//用于循环控制
        unsigned long        mLength;// 数据长度
        unsigned long        mTestCount;// 测试计数
        unsigned long        mErrCnt = 0;// 错误计数
        unsigned long        mStep;// 步骤计数
        unsigned long        mTotal;//总计
        printf( " CH372/CH375 Bulk Data Test Program V1.0 ,Copyright (c) Naiky Company.    All rights reserved. " );
        printf( "test data correctness " );
        printf( "*** Load DLL: CH375DLL.DLL " );// 需要使用DLL则需要先加载,没有此句也会自动加载

        if ( LoadLibrary( "CH375DLL.DLL" ) == NULL )
                return;  // 加载DLL失败,可能未安装到系统中
        printf( "*** CH375OpenDevice: 0# " );
        if ( CH375OpenDevice( 0 ) == INVALID_HANDLE_VALUE )
                return;  /* 使用之前必须打开设备 */
        CH375SetTimeout( 0, 5000, 5000 );  // 设置USB数据读写的超时,超过5000mS未完成读写将强制返回,避免一直等待下去

        printf("*** Step-1: test data correctness: 1000 times, random length and data ");

        for (mTestCount = 0; mTestCount < 1000; ++mTestCount)  // 循环测试
        {
                Sleep( 100 );// 设置读取和发送数据的频率

                mBuffer[0] = TEST_DATA;// 发送的第一个字节
                mTotal = 64;//rand();                      // 随机数长度
                mTotal = mTotal % 100;
                if (mTotal == 0 || mTotal > 64)
                        mTotal=64;
               
                if (kbhit())
                {
                        key = getch();
                        if (key == 0x1b || key == 0x20) // ESC键或者空格键终止循环
                        {
                                printf( "*** CH375CloseDevice by break: 0               " );
                                CH375CloseDevice(0);
                                exit(2);
                                break;
                        }
                        if (key == 0x31) // ESC键或者空格键终止循环
                        {
                                mBuffer[1] = 0;// 发送的第2个字节// 控制绿灯亮
                               
                        }
                        if (key == 0x32) // ESC键或者空格键终止循环
                        {
                                mBuffer[2] = 0;// 发送的第3个字节// 控制黄灯亮
                               
                        }
                        if (key == 0x33) // ESC键或者空格键终止循环
                        {
                                mBuffer[3] = 0;// 发送的第4个字节// 控制红灯亮
                               
                        }
                }
                else
                {
                        mBuffer[1] = 1;// 控制LED灭
                        mBuffer[2] = 1;
                        mBuffer[3] = 1;
                }

/***************************************************************************************************************/
                if ( CH375WriteData( 0, mBuffer, &mTotal ) )  // 发送,发送成功
                {
                        mLength = 64;
                        if ( mTestCount == 0 )
                                Sleep( 200 );  // 考虑到之前单片机准备上传的数据可能未被计算机取走,导致首次回传有可能直接读到之前的数据而不是本次数据的取反,所以首次回传先等待单片机准备好取反数据
                        if ( CH375ReadData( 0, mReadBuf, &mLength ) )  // 接收成功
                                printf("Cnt=%4ld, Len=%2ld, Data: 电压值:%c.%c%c Vxd", mTestCount, mTotal, mReadBuf[0], mReadBuf[1], mReadBuf[2]);
                }
        }

        if (mErrCnt==0)
                printf(" *** passed                                              ");

// 关闭CH375设备,如果不继续使用则必须关闭设备,就象读写完硬盘中的数据文件后要关闭一样
        printf( "*** Total error = %ld ", mErrCnt );
        printf( "*** CH375CloseDevice: 0 " );
        CH375CloseDevice( 0 );

        printf( " Exit. " );
        getch();
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
up101
1楼-- · 2020-01-30 17:39
很入门的东西,但是不简单。支持!!
cc2666
2楼-- · 2020-01-30 18:20
谢谢分享,家里有两片,有时间试试
zhuyi25762
3楼-- · 2020-01-31 00:09
test.c是乱码,工程打不开
wangshaosh
4楼-- · 2020-01-31 00:45
 精彩回答 2  元偷偷看……
jackmo
5楼-- · 2020-01-31 02:24
markgggggg
hao999a
6楼-- · 2020-01-31 03:56
学习了,谢谢

一周热门 更多>