搜索
bottom↓
回复: 8

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

[复制链接]

出0入0汤圆

发表于 2011-5-11 13:09:10 | 显示全部楼层 |阅读模式
完成了。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();
}

出0入0汤圆

发表于 2011-5-11 13:26:02 | 显示全部楼层
很入门的东西,但是不简单。支持!!

出50入4汤圆

发表于 2011-5-11 14:56:02 | 显示全部楼层
test.c是乱码,工程打不开

出0入0汤圆

 楼主| 发表于 2011-5-11 19:10:20 | 显示全部楼层
晶振用的是11.0592M的,其他晶振也都可以用,只是通信速度不一样而已

出0入0汤圆

发表于 2012-7-2 11:25:37 | 显示全部楼层
markgggggg

出0入0汤圆

发表于 2012-8-7 21:57:57 | 显示全部楼层
学习了,谢谢

出0入0汤圆

发表于 2013-2-28 21:32:32 | 显示全部楼层
学习USB,谢谢
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-4 11:23

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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