完成了。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();
}
|