1. 开发环境
1.1 单片机开发环境
KEIL5——百度网盘链接:点击此处
推荐微信搜索KEIL5下载,下载资源很多,自行搜索下载安装
1.2 触摸屏开发环境
USART HMI——HMI官网下载:http://wiki.tjc1688.com/download/usart_hmi.html
下载后自行安装
2. 主要材料清单
STM32F103C8T6最小系统 x 1 | 陶晶驰HMI触摸屏 x 1 |
---|---|
脉搏传感器 x 1 | DS18B20温度传感器 x 1 |
0.96寸OLED屏幕 x 1 | JR6001语音模块 x 1 |
液位传感器 x 1 | 按键 x 4 |
J-LINK下载器 x 1 | USB-TTL x 1 |
3. 实物图
3.1 电路板实物图
3.2 触摸屏实物图
3.3 控制板原理图
原理图源文件:点击此处。用AD2022版本打开或者更高版本打开
注意:部分管脚可能连接错误,实际管脚连接与代码对应一致。
4. 代码
4.1 单片机代码
4.1.1 主程序部分代码
int main(void)
{
Device_Init();
while (1)
{
adc_data1 = Get_Adc_Average(ADC_Channel_1,5);
if(adc_data1 > 4095) adc_data1 = 4095;
adc_data1 = adc_data1*100/4095;
ReadBMP();
bodytemp = DS18B20_Get_Temp() + 0;//110
bodytempH = DS18B20_Get_Temp()/10 + 0;//11
bodytempL = DS18B20_Get_Temp()%10;
if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_12) == 0){
delay_ms(15);
if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_12) == 0){
OLED_Clear();
st1++;
if(st1 == 2)st1 = 0;
while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_12) == 0);
}
}
if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13) == 0){
delay_ms(15);
if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13) == 0){
OLED_Clear();
st2++;
if(st2 == 5)st2 = 0;
while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13) == 0);
}
}
if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_14) == 0){
delay_ms(15);
if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_14) == 0){
st3 = 1;
while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_14) == 0);
}
}
if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_15) == 0){
delay_ms(15);
if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_15) == 0){
st4 = 1;
while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_15) == 0);
}
}
if(st1 == 0){
if(bodytemp < tempL){
OLED_ShowCHinese(64+20+16,0,26);
OLED_ShowCHinese(64+20+32,0,28);
MusicOn(1);
}
else if(bodytemp > tempH){
OLED_ShowCHinese(64+20+16,0,26);
OLED_ShowCHinese(64+20+32,0,27);
MusicOn(1);
}
else{
OLED_ShowCHinese(64+20+16,0,29);
OLED_ShowCHinese(64+20+32,0,31);
}
if( pBPM > pBPMH){
OLED_ShowCHinese(64+20+16,2,26);
OLED_ShowCHinese(64+20+32,2,7);
MusicOn(2);
}
else if( pBPM < pBPML){
OLED_ShowCHinese(64+20+16,2,26);
OLED_ShowCHinese(64+20+32,2,8);
MusicOn(2);
}
else{
OLED_ShowCHinese(64+20+16,2,29);
OLED_ShowCHinese(64+20+32,2,31);
}
if( adc_data1 < ylsign && adc_data1 > 0){
MusicOn(3);
}
else{
//正常
}
OLED_ShowCHinese(0,0,13);
OLED_ShowCHinese(0+16,0,14);
OLED_ShowCHinese(0+32,0,11);
OLED_ShowNum(32+16,0,bodytempH,2,16);
OLED_ShowString(32+16+16,0,".",16);
OLED_ShowNum(64+8,0,bodytempL,1,16);
OLED_ShowCHinese(64+8+12,0,19);
OLED_ShowCHinese(0+32-32+2,2,25);
OLED_ShowCHinese(0+48-32,2,5);
OLED_ShowCHinese(0+64-32,2,11);
OLED_ShowNum(64+8-32,2,pBPM,3,16);
OLED_ShowCHinese(0+32-32+2,4,21);
OLED_ShowCHinese(0+48-32,4,22);
OLED_ShowCHinese(0+64-32,4,11);
OLED_ShowNum(64+8-32,4,adc_data1,3,16);
OLED_ShowString(64+8-32+32,4,"%",16);
}
else{
OLED_ShowCHinese(0,0,13);
OLED_ShowCHinese(0+16,0,14);
OLED_ShowCHinese(0+32,0,11);
OLED_ShowNum(32+16,0,tempH/10,3,16);
OLED_ShowNum(32+16+32+10,0,tempL/10,3,16);
OLED_ShowCHinese(0+32-32+2,2,25);
OLED_ShowCHinese(0+48-32,2,5);
OLED_ShowCHinese(0+64-32,2,11);
OLED_ShowNum(32+16,2,pBPMH,3,16);
OLED_ShowNum(32+16+32+10,2,pBPML,3,16);
OLED_ShowCHinese(0+32-32+2,4,21);
OLED_ShowCHinese(0+48-32,4,22);
OLED_ShowCHinese(0+64-32,4,11);
OLED_ShowNum(32+16+16,4,ylsign,3,16);
switch(st2){
case 0: {
OLED_ShowString(64+15,0,"*",16);
if(st3 == 1){
tempH = tempH + 10;
st3 = 0;
}
if(st4 == 1){
tempH = tempH - 10;
st4 = 0;
}
break;
}
case 1: {
OLED_ShowString(64+10+45,0,"*",16);
if(st3 == 1){
tempL = tempL + 10;
st3 = 0;
}
if(st4 == 1){
tempL = tempL - 10;
st4 = 0;
}
break;
}
case 2: {
OLED_ShowString(64+15,2,"*",16);
if(st3 == 1){
pBPMH = pBPMH + 10;
st3 = 0;
}
if(st4 == 1){
pBPMH = pBPMH - 10;
st4 = 0;
}
break;
}
case 3: {
OLED_ShowString(64+10+45,2,"*",16);
if(st3 == 1){
pBPML = pBPML + 10;
st3 = 0;
}
if(st4 == 1){
pBPML = pBPML - 10;
st4 = 0;
}
break;
}
case 4: {
OLED_ShowString(64+10+32,4,"*",16);
if(st3 == 1){
ylsign = ylsign + 5;
st3 = 0;
}
if(st4 == 1){
ylsign = ylsign - 5;
st4 = 0;
}
break;
}
default:break;
}
}
UsartPrintf(hmi_uart,"t33.txt=\"%d.%d\"\xff\xff\xff",bodytempH,bodytempL);
UsartPrintf(hmi_uart,"t32.txt=\"%d%\"\xff\xff\xff",adc_data1);
UsartPrintf(hmi_uart,"t34.txt=\"%d\"\xff\xff\xff",pBPM);
}
}
4.1.2 代码烧录
完整代码下载:点击此处
魔术棒配置下载器,点击下载即可。不会下载,自行搜索教程。
4.2 触摸屏代码
4.2.1 开发界面
文本控件可以任意修改内容,控件的名称不要改动!!!
4.2.2 代码烧录
完整代码下载:点击此处
插好USB-TTL,点击下载按钮即可完成下载。不会下载,软件官网有教程。