上位机 串口通信 接受电压值

 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毫秒
        }
 

发布了44 篇原创文章 · 获赞 5 · 访问量 4021

猜你喜欢

转载自blog.csdn.net/wangdada___/article/details/89855575