- int main(void)
- {
- uint8_t dat,i;
- uint8_t zl[10]={0x7E,0xFF,0x06,0x03,0x00,0x00,0x01,0xFE,0xF7,0xEF};
- GPIO_Config_T gpioConfig;
- USART_Config_T usartConfig;
- APM_DelayInit();
- GPIO_Init();
- KEY_Init();
- APM_DelayUs(100);
- ADC_Init();
- OLED_Init();
- OLED_Clear();
- OLED_ShowCHinese(24,0,0);
- OLED_ShowCHinese(40,0,1);
- OLED_ShowCHinese(56,0,2);
- OLED_ShowCHinese(72,0,3);
- OLED_ShowCHinese(88,0,4);
- OLED_ShowCHinese(0,2,5);
- OLED_ShowCHinese(16,2,6);
- OLED_ShowCHinese(64,2,7);
- OLED_ShowCHinese(80,2,8);
- OLED_ShowCHinese(0,6,11);
- OLED_ShowCHinese(16,6,12);
- OLED_ShowChar(32,2,':',16);
- OLED_ShowChar(96,2,':',16);
- OLED_ShowNum(40,2,6,2,16);
- OLED_ShowNum(104,2,36,2,16);
- OLED_ShowChar(32,4,':',16);
- OLED_ShowChar(96,4,':',16);
- OLED_ShowNum(40,4,6,2,16);
- OLED_ShowNum(104,4,36,2,16);
- OLED_ShowChar(32,6,':',16);
- OLED_ShowChar(96,6,':',16);
- OLED_ShowString(40,6,"OFF",16);
- OLED_ShowString(104,6,"OFF",16);
- while (!ADC_ReadStatusFlag(ADC_FLAG_ADRDY));
- ADC_StartConversion();
- while (1)
- {
- ADC_MultiChannelPolling();
- APM_DelayMs(500);
- }
- }
1)超声波测控程序
- 含有工位切换与检测数据显示的超声波测距程序为:
- void USART_Receive_Isr(void)
- {
- uint8_t dat;
- uint16_t l;
- if (USART_ReadStatusFlag(MINI_COM1, USART_FLAG_RXBNE) == SET)
- {
- dat = (uint8_t)USART_RxData(MINI_COM1);
- sj[j]=dat;
- j=j+1;
- }
- if((j==4)&&(f<3))
- {
- l=sj[1]*256+sj[2]; // mm
- l=l/10; // cm
- if(GPIO_ReadInputBit(GPIOC, GPIO_PIN_13)==1)
- {
- OLED_ShowNum(40,2,l,2,16); // 设置
- s1=l;
- if(f==2) f=f+1;
- }
- else
- {
- OLED_ShowNum(40,4,l,2,16); // 测距
- if(l<s1)
- {
- OLED_ShowString(40,6,"OFF",16);
- }
- else
- {
- OLED_ShowString(40,6,"ON ",16);
- }
- f=2;
- }
- j=0;
- if(f<3) printf("%c", 0x55);
- }
- }
图2 超声波测距
在控制方面,是采用开发板上控制电机的某一相来控制注水水泵的启停;而加热器的控制则是用继电器或可控硅来完成。
2)NTC温度测控程序
为与主界面相匹配,相应的A/D数据采集与显示程序为:
- void ADC_MultiChannelPolling(void)
- {
- float voltage;
- uint8_t index;
- uint16_t W,P,O;
- for (index = 0; index < ADC_CH_SIZE; index++)
- {
- voltage = (adcData[index] * 3300.0) / 4095.0;
- if(index == 1)
- { // NTC
- OLED_ShowNum(40,2,(voltage-1540),4,16);
- O=bh(voltage-1540);
- OLED_ShowNum(104,4,O,2,16);
- if(O<P)
- {
- GPIO_ClearBit(GPIOA, GPIO_PIN_12);
- OLED_ShowString(104,6,"ON ",16);
- }
- else
- {
- GPIO_SetBit(GPIOA, GPIO_PIN_12);
- OLED_ShowString(104,6,"OFF",16);
- }
- }
- if(index == 2)
- { // 电位器
- W=bh(voltage);
- P=W;
- OLED_ShowNum(104,2,W,2,16);
- }
- }
- }
图3 温度检测