#include "stdafx.h"
#include "Uart.h"
#include <windows.h>
#include <stdio.h>
HANDLE UART_Open(int nPort, int nBuadRate)
{
char nt_port[10]={0}
sprintf(nt_port,"COM%d",nPort)
hCom = CreateFile(nt_port,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL)
//int ret = 0
if(hCom==(HANDLE)-1)
{
AfxMessageBox("打开COM失败!!"颂孝老)
//TRACE("OPEN_PORT_FAIL\n")
// return OPEN_PORT_FAIL
}
if(hCom == INVALID_HANDLE_VALUE)
{
AfxMessageBox("打开COM失败!!")
//TRACE("OPEN_PORT_FAIL\n")
// return OPEN_PORT_FAIL
}
DCB dcb
if(!GetCommState(hCom,&dcb))//获取COM口的设备控制块
{
CloseHandle(hCom)
AfxMessageBox("获取串口参数失败!!")
//TRACE("GET_COM_STATA_FAIL\n")
// return GET_COM_STATA_FAIL
}
dcb.BaudRate=nBuadRate
dcb.ByteSize=8
dcb.Parity=NOPARITY
dcb.StopBits=ONESTOPBIT
if(!SetCommState(hCom,&dcb)) //设置COM口的设备控制块
{
CloseHandle(hCom)
AfxMessageBox("设置串口参数失败!!")
//TRACE("SET_COM_STATA_FAIL\n")
// return SET_COM_STATA_FAIL
}
SetupComm(hCom,1024,1024)//输入缓冲区和输出缓冲区的大小都是1024
COMMTIMEOUTS TimeOuts
//设定读超时
TimeOuts.ReadIntervalTimeout=1000
TimeOuts.ReadTotalTimeoutMultiplier=300
TimeOuts.ReadTotalTimeoutConstant=2000
//设定写超时
TimeOuts.WriteTotalTimeoutMultiplier=300
TimeOuts.WriteTotalTimeoutConstant=2000
if(!SetCommTimeouts(hCom,&TimeOuts)) //将超时参数写入设备控制
{
CloseHandle(hCom)
AfxMessageBox("野升设置串口超时失败!!")
// TRACE("SET_COM_TIMEOUT_FAIL\n")
// return SET_COM_TIMEOUT_FAIL
}
PurgeComm(hCom,PURGE_TXCLEAR|PURGE_RXCLEAR)//清空缓冲区
return hCom
}
int UART_Read(HANDLE hCom, char *buf, int buf_len)
{
int ret = 0
DWORD len
ret = ReadFile(hCom,buf,buf_len,&len,NULL)
if(!ret)
{
//TRACE("RECV_DATA_FAIL\n")
AfxMessageBox("读取数据失败!!")
return RECV_DATA_FAIL
}
if(len == 0)
{
//TRACE("RECV_DATA_TIMEOUT\n")
AfxMessageBox("读取数据超时!!")
return RECV_DATA_TIMEOUT
}
return 0
}
int UART_Write(HANDLE hCom, char *buf, int buf_len)
{
int ret = 0
DWORD len
//ClearCommError(hCom,&dErrorflag,&comstat)
ret = WriteFile(hCom,buf,buf_len,&len,NULL)
if(!ret)
{
//TRACE("SEND_DATA_FAIL\n")
AfxMessageBox("写入数据失败!!")
return SEND_DATA_FAIL
}
if(len==0)
{
//TRACE("SEND_DATA_TIMEOUT\n")
AfxMessageBox("写入数据超时!!")
return SEND_DATA_TIMEOUT
}
PurgeComm(hCom,PURGE_TXABORT|PURGE_RXABORT|PURGE_TXCLEAR|PURGE_RXCLEAR)//清空缓冲区
return 0
}
int UART_Close(HANDLE hCom)
{
int ret=0
ret=CloseHandle(hCom)
if(!ret)
{
// TRACE("CLOSE_PORT_FAIL\n")
AfxMessageBox("关闭串口失败!!")
return CLOSE_PORT_FAIL
}
return 0
}
采用RS232对接现场电脑的控制模枝枯式有些电脑我们知道他有配置串口卡,带有RS232的,或者是没有RS232的电脑,我们也可以利用USB转串口来实现控制,这升首个控制方法怎么实现呢?采用中控的串口接电脑的串口,不过电脑要设置一个串口指令程序,要制作一个小软件才能够实现,当中控的串口发一条指令,电脑串口接收到指令的时候,电脑执行某些 *** 作。
采用红外控制方式来实现电脑的控制
电脑一般都没有红外遥控功能,而我们的中控系统有红外控制功吵搭数能,怎么实现呢?利用USB转红外控制的模块,这种模块一般都比较便宜,可以实现中控系统来控制电脑的开关机,还可以调用电脑系统的特定播放器如千千静听,暴风影音的各种 *** 作,播放暂停上一首,下一首等等。
利用电源控制的闭合开关来实现控制
利用继电器的闭合以及端口的特点来实现电脑的开机和关机,不过这样子对电脑有一定的损伤,但是市场上大部分公司都是利用这种方案,直接断掉电脑的供电。
可以控制关机,不能控制开机
方式很多,第一种,纯硬件,单片机链接到计算机的开关上,相当于按开关键,现在计算机都有高级电源管理,按开关自动调用shutdown第二种是用RS232串口联机,VB捕获串口,收到特定字节就调用shutdown
第棚档消三种是用单片机做PS2接口模拟键盘,相链知当于按键盘上的关机快捷键,如果不蠢消知道键盘的快捷键,那直接按 Win+u+u也可以
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)