stm32制作,pcb及源碼
Altium Designer畫的溫度,電壓,電流測量及上下限設置原理圖和PCB圖如下:(51hei附件中可下載工程文件)
0.png (187.51 KB, 下載次數(shù): 99)
下載附件
2019-7-14 01:08 上傳
0.png (63.45 KB, 下載次數(shù): 78)
下載附件
2019-7-14 01:08 上傳
0.png (10.56 KB, 下載次數(shù): 92)
下載附件
2019-7-14 01:08 上傳
單片機源程序如下:
- #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);//開機函數(shù)
- void OLED_deal(void);//人機處理界面
- void Tiaozheng_deal(void);//溫度上下限調(diào)整界面
- 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();//系統(tǒng)時鐘初始化
- USART_Config();//窗口初始化,用于調(diào)試
- 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**********************/
- //開機顯示函數(shù)
- 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);}
- //定義三個數(shù)組,作為傳感器值緩沖
- char buffer1[5]={0},buffer2[5]={0},buffer3[5]={0};
- //用sprintf函數(shù)將測量值轉(zhuǎn)換為字符形式
- 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);}
- //顯示運行模式,具體作用函數(shù)在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函數(shù)將測量值轉(zhuǎn)換為字符形式
- 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, 下載次數(shù): 310)
2019-7-14 01:10 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|