keil4
这是单片机的源码 自己定义功能、
我的主要是ADC测压
CB
上位机部分//
#include <stdio.h>
#include <Windows.h>
HANDLE hCom;
int cmd;
unsigned char str[2];
DWORD wCount;//实际读取的字节数
BOOL bReadStat, bWriteStat;//读取或写数据
unsigned char a,b,c;
double s;
int UARTInt()
{
int UART_send;
hCom = CreateFile(TEXT("com4"),
GENERIC_READ|GENERIC_WRITE,//允许读写
0,//指定共享属性,由于串口不能共享,所以该参数必须为0
NULL,
OPEN_EXISTING,//打开而不是创建
0,//属性描述,该值为FILE_FLAG_OVERLAPPED,表示使用异步I/O,该参数为0,表示同步I/O操作
NULL);
if(hCom == INVALID_HANDLE_VALUE)//串口打开失败
{
UART_send=0;
return UART_send;
}
else//COM打开成功
{
UART_send=1;
}
SetupComm(hCom, 200, 200); //输入缓冲区和输出缓冲区的大小都是200字节
//超时设置
COMMTIMEOUTS TimeOuts;
TimeOuts.ReadIntervalTimeout = MAXBYTE;//读间隔超时
TimeOuts.ReadTotalTimeoutMultiplier = 0;//读时间系数
TimeOuts.ReadTotalTimeoutConstant = 0;//读时间常量
//设定写超时
TimeOuts.WriteTotalTimeoutMultiplier = 1;;//写时间系数
TimeOuts.WriteTotalTimeoutConstant = 1;//写时间常量
SetCommTimeouts(hCom, &TimeOuts);//设置超时数据写入
//配置串口
DCB dcb;
GetCommState(hCom, &dcb);
dcb.BaudRate = 9600;
dcb.ByteSize = 8;
dcb.Parity = NOPARITY;///无奇偶校验位
dcb.StopBits = ONESTOPBIT;///一个停止位
SetCommState(hCom, &dcb);///配置数据写入
return UART_send;
}
void Send_Byte(int cmd)
{
BOOL bWriteStat;
unsigned char str1[9]={'1','2','3','4','5','6','7','8','9'};
PurgeComm(hCom, PURGE_TXCLEAR ); ///清空缓冲区
bWriteStat = WriteFile(hCom, &str1[cmd-1], sizeof(str1), &wCount, NULL);///读取串口成功返回1
if(!bWriteStat)
{
printf("指令发送失败!\n");
}
}
void Get_val()
{
unsigned char str[4];
PurgeComm(hCom, PURGE_TXCLEAR );
bReadStat = ReadFile(hCom, str, sizeof(str), &wCount, NULL);///读取串口成功返回1
if(!bReadStat)
{
printf("电压数值获取失败!\n");
}
else
{
a=str[0];
b=str[1];
c=str[2];
str[3] = '\0';
s=(double)(a-48)*100+(b-48)*10+(c-48);//与下位机传递电压的度值
s = s / 255 * 5;//计算电压真实值的公式 保留两位小数
printf("现在电压为%.2fV\n",s);
printf("您选择的功能已经实现,请继续操作!\n\n");
}
File_Write(); ///存入文件
Sleep(100);///占用cpu,线程休眠100毫秒
}
至于为什么选上位机而不是用串口呢?
就是上位机的 快速 操作方便 符合用户需求
我们所呈现的功能 一定要符合大众需求 快速便捷 是重要的/////
谢谢观看 //