查看: 1972|回复: 0
打印 上一主题 下一主题

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

[复制链接]
跳转到指定楼层
沙发
发表于 2016-5-18 22:28:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
完成了。ourdev_639006K3AZ8Z.rar(文件大小:16.64M) (原文件名:完成设计.rar)

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

资料里面有视频。
实现了单片机STC89C52与PC双向通信,单片机向PC发送AD采集的电压值,PC通过键盘控制单片机上的三个LED。
按1,黄色的亮,按2,绿色LED亮,按3,红色的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( "\nCH372/CH375 Bulk Data Test Program V1.0 ,Copyright (c) Naiky Company.\n   All rights reserved.\n" );
        printf( "test data correctness \n" );
        printf( "*** Load DLL: CH375DLL.DLL \n" );// 需要使用DLL则需要先加载,没有此句也会自动加载

        if ( LoadLibrary( "CH375DLL.DLL" ) == NULL )
                return;  // 加载DLL失败,可能未安装到系统中
        printf( "*** CH375OpenDevice: 0# \n" );
        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\n");

        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              \n" );
                                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 V\xd", mTestCount, mTotal, mReadBuf[0], mReadBuf[1], mReadBuf[2]);
                }
        }

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

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

        printf( "\nExit.\n" );
        getch();
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入中科因仑

本版积分规则

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