>_<:PC部分
这里com.cpp和com.h是串口通信的函数封装,在主函数中:
-
刚开始调用封装好的串口通信函数,设置打开串口COM4,波特率设置为9600,超时设置:
1 if(openport("com4")) 2 printf("open comport success\n"); 3 if(setupdcb(9600)) 4 printf("setupDCB success\n"); 5 if(setuptimeout(0,0,0,0,0)) //如果所有写超时参数均为0,那么就不使用写超时 6 printf("setuptimeout success\n"); 7 clearall();//全清
-
接着循环接收控制台命令来与串口通信:这里用了串口通信函数WriteChar和ReceiveChar来与串口进行信息传送,注意这里的读写应和单片机的一致,否则就会出现错误。这里举a==5的例子说明:
[命令5表示改变距离阈值,当输入5时,PC将向串口发送字符’5’,然后等待输入改变后的温度,当输入改变温度时,将该温度传给串口[因为我们这里的范围是0-100]所以一个char类型就能表示,将这个值发送给串口,当单片机改变好距离阈值后会返回改好的命令,所以调用ReceiveChar接收返回信息。其他类似。]
1 while(1){ 2 scanf("%d",&a);//1表示要温度,2表示要距离,3表示距离警报关闭,4温度警报关闭,5改变距离阈值,6改变温度阈值 3 if(a==5){ 4 m_szWriteBuffer[0]='5'; 5 WriteChar(m_szWriteBuffer,1); 6 printf("Please enter the num:(0-100cm) \n"); 7 scanf("%d",&a); 8 m_szWriteBuffer[0]=(BYTE)(a); 9 WriteChar(m_szWriteBuffer,1); 10 ReceiveChar(m_szReceiveBuffer,20); 11 printf("%s\n",m_szReceiveBuffer); 12 }else if(a==6){ 13 m_szWriteBuffer[0]='6'; 14 WriteChar(m_szWriteBuffer,1); 15 printf("Please enter the num:(0-100℃) \n"); 16 scanf("%d",&a); 17 m_szWriteBuffer[0]=(BYTE)(a); 18 WriteChar(m_szWriteBuffer,1); 19 ReceiveChar(m_szReceiveBuffer,20); 20 printf("%s\n",m_szReceiveBuffer); 21 }else{ 22 m_szWriteBuffer[0]=(BYTE)(a+'0'); 23 WriteChar(m_szWriteBuffer,1); 24 25 ReceiveChar(m_szReceiveBuffer,20); 26 printf("%s\n",m_szReceiveBuffer); 27 } 28 }
>_<:单片机部分
设备:
- 18B20温度传感器
- 8位数码管显示
- 串口通信
- HC-SR04超声波测距仪
- STC89C52[11.0952MHz]
- 蜂鸣器
连线:
这里选用11.0592MHz的晶振,将8位7段数码管公共线接P0的8个端口,P2.3接位码,P2.2接段码;串口通信采用MAX232连接如图所示。
上一篇:基于RS-485总线的数据采集系统
下一篇:基于USB接口的嵌入式无线传输系统设计
推荐阅读最新更新时间:2024-03-16 14:53