单片机与CB联系 源码区 (上位机)

本文详细介绍了使用Keil4进行单片机编程,实现ADC电压测量功能,并通过串口与上位机进行数据交换的过程。文章深入讲解了在Windows环境下,如何利用C语言和Windows API函数,完成串口的初始化、配置、数据发送与接收等关键步骤。

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

至于为什么选上位机而不是用串口呢?

就是上位机的 快速 操作方便  符合用户需求 

我们所呈现的功能 一定要符合大众需求 快速便捷 是重要的/////

谢谢观看   //

 

C#串口介绍以及简单串口通信程序设计实现 源代码和串口程序介绍连接:https://www.cnblogs.com/JiYF/p/6618696.html 本站积分太贵,自己变得。。直接到连接地址下载代码 周末,没事干,写个简单的串口通信工具,也算是本周末曾来过,废话不多,直接到主题 串口介绍   串行接口简称串口,也称串行通信接口或串行通讯接口(通常指COM接口),是采用串行通信方式的扩展接口。(至于再详细,自己百度) 串口应用:   工业领域使用较多,比如:数据采集,设备控制等等,好多都是用串口通信来实现!你要是细心的话,你会发现,目前家用国网智能电能表就具备RS485通信总线(串行总线的一种)RS232可以相互转化(当然一般,非专业的谁也不会闲的蛋疼,趴电表上瞎看,最多也就看看走了多少度电) RS232 DB9介绍: 1.示意图 2.针脚介绍: 载波检测(DCD) 接受数据(RXD) 发出数据(TXD) 数据终端准备好(DTR) 信号地线(SG) 数据准备好(DSR) 请求发送(RTS) 清除发送(CTS) 振铃指示(RI) 3.实物图: 以下是我购买XX公司的一个usb转串口线:这个头就是一个公头,另一端是一个usb口 笨小孩串口工具运行图: 1.开启程序 2.发送一行字符串HelloBenXH,直接将针脚的发送和接收链接起来就可以测试了(针脚2 接受数据(RXD) 和3 发出数据(TXD))直接链接, C#代码实现:采用SerialPort 1.实例化一个SerialPort [csharp] view plain copy 在CODE上查看代码片派生到我的代码片 private SerialPort ComDevice = new SerialPort(); 2.初始化参数绑定接收数据事件 [csharp] view plain copy 在CODE上查看代码片派生到我的代码片 public void init() { btnSend.Enabled = false; cbbComList.Items.AddRange(SerialPort.GetPortNames()); if (cbbComList.Items.Count > 0) { cbbComList.SelectedIndex = 0; } cbbBaudRate.SelectedIndex = 5; cbbDataBits.SelectedIndex = 0; cbbParity.SelectedIndex = 0; cbbStopBits.SelectedIndex = 0; pictureBox1.BackgroundImage = Properties.Resources.red; ComDevice.DataReceived += new SerialDataReceivedEventHandler(Com_DataReceived);//绑定事件 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值