stm32制作,pcb及源码
Altium Designer画的温度,电压,电流测量及上下限设置原理图和PCB图如下:(51hei附件中可下载工程文件)
单片机源程序如下:
- #include "stm32f10x.h"
- #include "bsp_usart.h"
- #include "bsp_adc.h"
- #include "bsp_systick.h"
- #include "OLED_I2C.h"
- #include "bsp_i2c_gpio.h"
- #include "bsp_buzz.h"
- #include "bsp_ds18b20.h"
- #include "bsp_key.h"
- void KaiJi_Init(void);//开机函数
- void OLED_deal(void);//人机处理界面
- void Tiaozheng_deal(void);//温度上下限调整界面
- void key_serve();//按键服务程序
- uint8_t temp_H=30;//温度上限
- uint8_t temp_L=20;//温度下限
- float current;//电流
- static uint8_t flag=0;//按键标志位
- float temp;//温度
- extern float volatege[2];//电压
- int main(void)
- {
- SystemInit();//系统时钟初始化
- USART_Config();//窗口初始化,用于调试
- ADCx_Init();//adc初始化
- i2c_Init();//I2C总线的GPIO初始化
- OLED_Init();//oled初始化
- Key_GPIO_Config();//按键初始化
- Buzz_GPIO_Config();//蜂鸣器初始化
- KaiJi_Init();//开机界面
- while( DS18B20_Init() )
- printf("\r\n no ds18b20 exit \r\n");
- printf("\r\n ds18b20 exit \r\n");
- while (1)
- {
- // if(i++>=50){ printf ( "\r\n获取该序列号器件的温度: %.2f\r\n", DS18B20_GetTemp_SkipRom());i=0;}//测试用
- key_serve();
- OLED_deal();
- ADC_deal();
- Buzz_serve();
- Systick_delay_ms(20); //按键消抖
- }
- }
- /*********************************************END OF FILE**********************/
- //开机显示函数
- void KaiJi_Init(void)
- {
- int i;
- for(i=2;i<6;i++){OLED_ShowCN((i)*16,0,i);}
- OLED_ShowStr(12,3,(unsigned char*)"Name:",2);
- for(i=0;i<2;i++){OLED_ShowCN((i+4)*16,3,i);}
- OLED_ShowStr(12,6,(unsigned char*)"Date:",2);
- OLED_ShowStr(52,6,(unsigned char*)"2019/5/15",2);
- Systick_delay_ms(2000);
- OLED_CLS();
- }
- void OLED_deal(void)
- {
- int i;
- current=(volatege[0]/10900)*1000;
- temp=DS18B20_GetTemp_SkipRom();
- for(i=6;i<13;i++){OLED_ShowCN((i-5.5)*16,0,i);}
- //定义三个数组,作为传感器值缓冲
- char buffer1[5]={0},buffer2[5]={0},buffer3[5]={0};
- //用sprintf函数将测量值转换为字符形式
- sprintf(buffer1,"%.2f",temp);
- sprintf(buffer2,"%.2f",volatege[0]);
- sprintf(buffer3,"%.2f",current);
- OLED_ShowStr(0,2,(unsigned char*)"Temp:",2);
- //显示温度测量值
- OLED_ShowStr(40,2,buffer1,2);
- //显示“℃”符号
- for(i=13;i<14;i++){OLED_ShowCN((i-8)*16,2,i);}
- //显示运行模式,具体作用函数在ZDSC_Init();里面:
- OLED_ShowStr(0,4,(unsigned char*)"U:",2);
- OLED_ShowStr(16,4,buffer2,2);
- OLED_ShowStr(50,4,(unsigned char*)"V",2);
- OLED_ShowStr(64,4,(unsigned char*)"I:",2);
- OLED_ShowStr(80,4,buffer3,2);
- OLED_ShowStr(112,4,(unsigned char*)"mA",2);
- Tiaozheng_deal();
- }
- void key_serve()
- {
- if(Key_Scan(GPIOA,GPIO_Pin_4)==1)
- {
- if(flag==0)
- {
- flag=1;
- temp_H++;
- printf("TEMP_H=%d",temp_H);
- }
- }
- else if(Key_Scan(GPIOA,GPIO_Pin_5)==1)
- {
- if(flag==0)
- {
- flag=1;
- temp_H--;
- printf("TEMP_H=%d",temp_H);
- }
- }
- else if(Key_Scan(GPIOA,GPIO_Pin_6)==1)
- {
- if(flag==0)
- {
- flag=1;
- temp_L++;
- printf("TEMP_L=%d",temp_L);
- }
- }
- else if(Key_Scan(GPIOA,GPIO_Pin_7)==1)
- {
- if(flag==0)
- {
- flag=1;
- temp_L--;
- printf("TEMP_L=%d",temp_L);
- }
- }
- else flag=0;
- }
- void Tiaozheng_deal(void)
- {
- char buffer1[5]={0},buffer2[5]={0};
- //用sprintf函数将测量值转换为字符形式
- sprintf(buffer1,"%d",temp_H);
- sprintf(buffer2,"%d",temp_L);
- OLED_ShowStr(0,6,(unsigned char*)"Temp_H:",1);
- OLED_ShowStr(44,6,buffer1,1);
- OLED_ShowStr(64,6,(unsigned char*)"Temp_L:",1);
- OLED_ShowStr(108,6,buffer2,1);
- }
复制代码
所有资料51hei提供下载:
资料合集测量.7z
(2.48 MB, 下载次数: 303)
|