#include "led.h" #include "delay.h" #include "sys.h" #include "stm32f10x.h" #include "stdio.h" #include "usart.h" #include "adc.h" #include "oled.h" #include "ds18b20.h" #include "HX711.h" #define HwInput PBin(7) //����������� #define KEY1 PAin(0) // �ֶ����Ƽ��� #define JR_OUT_PIN PBout(12) //���Ƽ������ #define CS_OUT_PIN PBout(13) //���Ƴ�ˮ ��ŷ� void Hw_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //ʹ�ܶ˿�ʱ�� GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; // �˿����� GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //�������� GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO���ٶ�Ϊ50MHz GPIO_Init(GPIOB, &GPIO_InitStructure); //�����趨������ʼ��GPIOC13 } #define Trig PBout(10) // ��������� #define CW_ECHO1 PBin(11) u16 Distance=0; //�������˿ڳ�ʼ�� void Wave_IO_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 , ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB , ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //PB0��TRIG GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //��Ϊ�������ģʽ GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); //��ʼ������GPIO GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; //��ECH0 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //��Ϊ���� GPIO_Init(GPIOB, &GPIO_InitStructure); TIM_DeInit(TIM2); TIM_TimeBaseStructure.TIM_Period=65535; /* �Զ���װ�ؼĴ������ڵ�ֵ(����ֵ) */ /* �ۼ� TIM_Period��Ƶ�ʺ����һ�����»����ж� */ TIM_TimeBaseStructure.TIM_Prescaler= (360 - 1); /* ʱ��Ԥ��Ƶ�� 72M/360 */ TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; /* ������Ƶ */ TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; /* ���ϼ���ģʽ */ TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); TIM_ClearFlag(TIM2, TIM_FLAG_Update); /* �������жϱ�־ */ // NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); //TIM2_NVIC_Configuration();//��ʱ����ʼ�� //TIM2_Configuration(); } //void TIM2_IRQHandler() //{ // static u8 st; // st=TIM_GetFlagStatus(TIM2, TIM_IT_Update); // if(st!=0) // { // TIM_ClearFlag(TIM2, TIM_IT_Update); // } //} //��� //��ʼ��࣬����һ��>10us�����壬Ȼ��������صĸߵ�ƽʱ�� u16 Wave_Start(void) { u32 Distance; u32 timeout=0; Trig=1; delay_us(20); //����һ��10us�ĸߵ�ƽ Trig=0; TIM_SetCounter(TIM2,0); timeout=0; while(!CW_ECHO1) //�ȴ��ߵ�ƽ { if(++timeout>60000)break; delay_us(1); } TIM_Cmd(TIM2, ENABLE); //����ʱ�� timeout=0; while(CW_ECHO1) //�ȴ��͵�ƽ { if(++timeout>600000)break; delay_us(1); } TIM_Cmd(TIM2, DISABLE); //��ʱ��2ʧ�� Distance=TIM_GetCounter(TIM2)*5*34/2000; //������� ����cm TIM_SetCounter(TIM2,0); if(Distance>200)Distance=200; return Distance; } u8 jr_flag=0; u8 get_cnt=0; u8 hw_cnt=0; u8 cs_out_flag=0; //��ˮ��־ u16 sw_val=0;//ˮλֵ u8 cs_out_zs_flag=0;//��ˮ������־λ char showbuff[16]; short temp_val=0; u8 mode_flag=0; int main(void) { NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//�����ж����ȼ�����Ϊ��2��2λ��ռ���ȼ���2λ��Ӧ���ȼ� delay_init(); //��ʱ������ʼ�� LED_Init(); //��ʼ����LED���ӵ�Ӳ���ӿ� uart_init(9600); ADC1_Init(); OLED_Init(); OLED_Clear(); Hw_Init(); DS18B20_Init(); Wave_IO_Init(); while(1) { if(++get_cnt>100) //�ɼ�ʱ������� { get_cnt=0; temp_val = DS18B20_Get_Temp();//�ɼ��¶�ֵ sprintf(showbuff,"temp:%2d.%1d",temp_val/10,temp_val%10); //��ӡ���ַ��� OLED_ShowString(0,2,(u8*)showbuff,16); //��ʾ } if(mode_flag) //�Զ�ģʽ { if(HwInput==0) //����Ƿ��б��� { if(++hw_cnt>20) //����100ms { sw_val = Wave_Start(); if(sw_val>4) { CS_OUT_PIN=0;//���Ƴ�ˮ }else { CS_OUT_PIN=1;//ֹͣ��� } cs_out_flag=1; } }else { hw_cnt=0; cs_out_flag=0; CS_OUT_PIN=1;//ֹͣ��� } if(jr_flag) //���ȿ���flag { JR_OUT_PIN=0; OLED_ShowString(0,4,(u8*)"heater:on ",16); //��ʾ }else { JR_OUT_PIN=1; OLED_ShowString(0,4,(u8*)"heater:off",16); //��ʾ } }else //�ֶ�ģʽ { if(KEY1==0) //������� { delay_ms(5); if(KEY1==0) { jr_flag^=1; //���Ƽ��� while(!KEY1); //�ȴ����� } } } delay_ms(5);//��ʱ } }