#include "led.h" #include "delay.h" #include "sys.h" #include "stm32f10x.h" #include "stdio.h" #include "key.h" #include "usart.h" #include "drive_dht11.h" #include "bh1750.h" #include "ds1302.h" #include "oled.h" #include "sk9822.h" #include "string.h" u8 humi=0;//ʪ��ֵ u8 temp=0;//�¶�ֵ u8 buffer[10]={0}; u16 GzVal=0; //ʵ�ʹ���ֵ char ShowBuf[16]={0}; char DateShowBuf[30]={0}; char SendBuff[50]={0}; short TEMP = 0; u16 cj_val=0;//���ֵ u8 openflag=0;//�ֶ�ģʽ���ذ�ť u8 mode_flag=0; #define YP1 PCout(13) #define YP2 PCout(14) #define YP3 PCout(15) u8 warning_cnt=0; u16 GetTimer=0;//�ɼ�ʱ������� u8 dw_val=0;//��λ//����ֵ u8 sc_val=0;//ɫ�� int set_s1=7,set_f1=0; //���� ʱ��1 int cnt_s1=2,cnt_f1=0,cnt_m1=0;//ѧϰʱ�� ʱ���� #define RT_INPUT PBin(8)//��������Ӧ #define KEY_GPIO_PROT GPIOA #define KEY1_GPIO_PIN GPIO_Pin_0 #define KEY2_GPIO_PIN GPIO_Pin_1 #define KEY3_GPIO_PIN GPIO_Pin_2 #define KEY4_GPIO_PIN GPIO_Pin_3 #define KEY5_GPIO_PIN GPIO_Pin_4 #define KEY1_IN GPIO_ReadInputDataBit(KEY_GPIO_PROT,KEY1_GPIO_PIN) #define KEY2_IN GPIO_ReadInputDataBit(KEY_GPIO_PROT,KEY2_GPIO_PIN) #define KEY3_IN GPIO_ReadInputDataBit(KEY_GPIO_PROT,KEY3_GPIO_PIN) #define KEY4_IN GPIO_ReadInputDataBit(KEY_GPIO_PROT,KEY4_GPIO_PIN) #define KEY5_IN GPIO_ReadInputDataBit(KEY_GPIO_PROT,KEY5_GPIO_PIN) void key_gpio_init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC, ENABLE); GPIO_InitStructure.GPIO_Pin = KEY1_GPIO_PIN|KEY2_GPIO_PIN|KEY3_GPIO_PIN|KEY4_GPIO_PIN|KEY5_GPIO_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_Init(KEY_GPIO_PROT, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); } #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; } void TIMER3_Int_Init(u16 arr,u16 psc) { TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStrue; NVIC_InitTypeDef NVIC_InitStructure; TIM_TimeBaseInitStrue.TIM_Period=arr; TIM_TimeBaseInitStrue.TIM_Prescaler=psc; TIM_TimeBaseInitStrue.TIM_CounterMode=TIM_CounterMode_Up; TIM_TimeBaseInitStrue.TIM_ClockDivision=TIM_CounterMode_Up; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE); TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStrue); TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);//ʹ��TIM3�����ж� //�ж����ȼ�NVIC���� NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; //TIM3�ж� NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //��ռ���ȼ�0�� NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //�����ȼ�3�� NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQͨ����ʹ�� NVIC_Init(&NVIC_InitStructure); //��ʼ��NVIC�Ĵ��� TIM_Cmd(TIM3, ENABLE); //ʹ��TIMx } int key_Task(void) { static char key_flag=0; if(KEY1_IN==0|KEY2_IN==0|KEY3_IN==0|KEY4_IN==0|KEY5_IN==0) { if(key_flag==0) { key_flag=1; if(KEY1_IN==0) { mode_flag^=1; } else if(KEY2_IN==0) { if(mode_flag==0) { if(++dw_val>2)dw_val=0; }else { } } else if(KEY3_IN==0) { if(mode_flag==0) { if(++sc_val>2)sc_val=0; }else { } } else if(KEY4_IN==0) { if(mode_flag==0) { openflag^=1;//���ذ�ť }else { } } else if(KEY5_IN==0) { } } }else { key_flag=0; } return 20; } u16 DataUpTime=0;//ʱ����ʾ������ u8 rt_flag=0;//���������־λ u16 rt_cnt=0; u8 seccnt=0; void TIM3_IRQHandler(void)//�жϷ������ { if(TIM_GetITStatus(TIM3,TIM_IT_Update)==SET)//SETΪ1 { GetTimer++;//�ɼ������� TIM_ClearITPendingBit(TIM3,TIM_IT_Update); //���TIM3�ĸ����жϱ�־ key_Task(); DataUpTime++; if(RT_INPUT==1) //��������Ӧ { rt_flag=1; rt_cnt=0; }else { if(rt_cnt++>50*15)//15sû���� { rt_cnt=0;rt_flag=0; } } if(rt_flag) //���� ��ʼ��ʱ����ѧϰʱ�� { if(++seccnt>50) { seccnt=0; if(++cnt_m1>59) { cnt_m1=0; if(++cnt_f1>59) { cnt_f1=0; if(++cnt_s1>23) { cnt_s1=0; } } } } } } } u8 GetFlag=0; uint8_t sendBuff[16]={0}; void ShowTo(char* Pdat,char len)//�ַ����еĿո� 0 { char ixd=0; for(ixd=0;ixd<len;ixd++) { if(Pdat[ixd]==' ') { Pdat[ixd]='0'; } } } #define IO_TX_GPIO_Port PAout(7) void uartX_sendByte(uint8_t val) { int i = 0; IO_TX_GPIO_Port=0; delay_us(104); for (i = 0; i < 8; i++) { if (val & 0x01) { IO_TX_GPIO_Port=1; } else { IO_TX_GPIO_Port=0; } delay_us(104); val >>= 1; } IO_TX_GPIO_Port=1; delay_us(104); } /********************************************************************************************* //������:Next_Play() // //����˵��:�趨���� // //��ڲ���: // //���ڲ���:NO ***********************************************************************************************/ void Next_Play() { uartX_sendByte(0x7E); uartX_sendByte(0x02); uartX_sendByte(0x01); uartX_sendByte(0xEF); } /********************************************************************************************* //������:Last_Play() // //����˵��: // //��ڲ���: // //���ڲ���:NO ***********************************************************************************************/ void Last_Play() { uartX_sendByte(0x7E); uartX_sendByte(0x02); uartX_sendByte(0x02); uartX_sendByte(0xEF); } /********************************************************************************************* //������:Specify_Musi_Play() // //����˵��:ָ����Ŀ���� // //��ڲ���: // //���ڲ���:NO ***********************************************************************************************/ void Specify_Musi_Play(u8 num) { uartX_sendByte(0x7E); uartX_sendByte(0x04); uartX_sendByte(0x03); uartX_sendByte(0x00); uartX_sendByte(num); uartX_sendByte(0xEF); } /********************************************************************************************* //������:Volume_add() // //����˵��:������ // //��ڲ���: // //���ڲ���:NO ***********************************************************************************************/ void Volume_add() { uartX_sendByte(0x7E); uartX_sendByte(0x02); uartX_sendByte(0x04); uartX_sendByte(0xEF); } /********************************************************************************************* //������:Volume_nec() // //����˵��:������ // //��ڲ���: // //���ڲ���:NO ***********************************************************************************************/ void Volume_nec() { uartX_sendByte(0x7E); uartX_sendByte(0x02); uartX_sendByte(0x05); uartX_sendByte(0xEF); } /********************************************************************************************* //������:Specify_Volume() // //����˵��:ָ������ // //��ڲ���: // //���ڲ���:NO ***********************************************************************************************/ void Specify_Volume(u8 num) { uartX_sendByte(0x7E); uartX_sendByte(0x03); uartX_sendByte(0x06); uartX_sendByte(num); uartX_sendByte(0xEF); } /********************************************************************************************* //������:Music_play() // //����˵��:���� // //��ڲ���: // //���ڲ���:NO ***********************************************************************************************/ void Music_play() { uartX_sendByte(0x7E); uartX_sendByte(0x02); uartX_sendByte(0x0D); uartX_sendByte(0xEF); } /********************************************************************************************* //������:Music_pause() // //����˵��:��ͣ // //��ڲ���: // //���ڲ���:NO ***********************************************************************************************/ void Music_pause() { uartX_sendByte(0x7E); uartX_sendByte(0x02); uartX_sendByte(0x0E); uartX_sendByte(0xEF); } /********************************************************************************************* //������:Music_stop() // //����˵��:ֹͣ // //��ڲ���: // //���ڲ���:NO ***********************************************************************************************/ void Music_stop() { uartX_sendByte(0x7E); uartX_sendByte(0x02); uartX_sendByte(0x10); uartX_sendByte(0xEF); } /********************************************************************************************* //������:Switch_play_Device() // //����˵��:U/TF/AUX/SLEEP/FLASH(0/1/2/3/4)�л� // //��ڲ���: // //���ڲ���:NO ***********************************************************************************************/ void Switch_play_Device(u8 num) { uartX_sendByte(0x7E); uartX_sendByte(0x03); uartX_sendByte(0x09); uartX_sendByte(num); uartX_sendByte(0xEF); } /********************************************************************************************* //������:Cycle_play() // //����˵��:1:ȫ��ѭ�� 0:����ѭ�� // //��ڲ���: // //���ڲ���:NO ***********************************************************************************************/ void Cycle_play(u8 num) { uartX_sendByte(0x7E); uartX_sendByte(0x03); uartX_sendByte(0x11); uartX_sendByte(num); uartX_sendByte(0xEF); } u8 test=0; int main(void) { NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//�����ж����ȼ�����Ϊ��2��2λ��ռ���ȼ���2λ��Ӧ���ȼ� delay_init(); //��ʱ������ʼ�� LED_Init(); //��ʼ�������ӵ�Ӳ���ӿ� YP1=1;YP2=1;YP3=1; uart_init(9600); delay_ms(1000); key_gpio_init(); TIMER3_Int_Init(20000,71);//��ʱ����ʼ�� //10ms��һ���ж� BH1750_Init(); OLED_Init();//Һ����ʼ�� OLED_Clear();//Һ������ delay_ms(10);//�ϵ���ʱһ�� Ds1302_Gpio_Init(); SK9822_Intit(); Wave_IO_Init(); SK9822_Write_Data(0xff,0,0,0); Ds1302_Write_Time_All(1); // Next_Play(); delay_ms(10); Cycle_play(1); delay_ms(10); Cycle_play(1); delay_ms(10); Specify_Musi_Play(2); delay_ms(10); Cycle_play(1); delay_ms(10); while(1) { if(GetTimer>50)//1S { GetTimer=0; if(openflag) { switch(dw_val) { case 0: switch(sc_val) { case 0: YP1=0;YP2=1;YP3=1; SK9822_Write_Data(0xff,0xff,0xff,0xff); break; case 1: YP1=1;YP2=0;YP3=1; SK9822_Write_Data(0xff,255,255,0); break ; case 2: YP1=1;YP2=1;YP3=0; SK9822_Write_Data(0xff,60,255,60); break; } break; case 1: switch(sc_val) { case 0: SK9822_Write_Data(0xff,125,125,125); break; case 1: SK9822_Write_Data(0xff,125,125,0); break ; case 2: SK9822_Write_Data(0xff,30,125,30); break; } break; case 2: switch(sc_val) { case 0: SK9822_Write_Data(0xff,30,30,30); break; case 1: SK9822_Write_Data(0xff,40,40,0); break ; case 2: SK9822_Write_Data(0xff,10,50,10); break; } break; } }else{ SK9822_Write_Data(0xff,0,0,0);//Ϩ�� } if(mode_flag) { OLED_ShowString(90,6,"A",16); }else{ OLED_ShowString(90,6,"M",16); } if(dht11_read_data(buffer) == 0)//��ȡ��ʪ�� { humi = buffer[0] + buffer[1] / 10;//ȡʪ��ֵ temp = buffer[2] + buffer[3] / 10;//ȡ�¶�ֵ } GzVal = Dispose();//��ȡ���� cj_val=Wave_Start(); if(cj_val>15) { OLED_ShowText(0,6,"����:�쳣",0); warning_cnt|=0x01; }else { warning_cnt&=~0x01; OLED_ShowText(0,6,"����:����",0); } if(rt_flag) //���� { OLED_ShowString(103,6,"1",16); } else //û�� { OLED_ShowString(103,6,"0",16); } printf("drv_X%dH%dD%dZ%d\r\n",temp,humi,GzVal,cj_val);//���͵���λ��app if(mode_flag)//�Զ�ģʽ { }else{ //�ֶ�ģʽ } } if(DataUpTime>20) //400msˢ��һ������ { DataUpTime=0;// Ds1302_Readtime(); sprintf((char*)DateShowBuf,"ʱ��:%2d:%2d:%2d", (int)ds1302Data.hour, (int)ds1302Data.min, (int)ds1302Data.sec); ShowTo(DateShowBuf,strlen(DateShowBuf)); OLED_ShowText(0,0,DateShowBuf,0); sprintf((char*)DateShowBuf,"����:%2d:%2d:00", (int)set_s1, (int)set_f1); ShowTo(DateShowBuf,strlen(DateShowBuf)); OLED_ShowText(0,2,DateShowBuf,0); sprintf((char*)DateShowBuf,"ѧϰ:%2d:%2d:%2d", (int)cnt_s1, (int)cnt_f1,cnt_m1); ShowTo(DateShowBuf,strlen(DateShowBuf)); OLED_ShowText(0,4,DateShowBuf,0); if((ds1302Data.hour==set_s1)&&(ds1302Data.min==set_f1)) //��������ʱ�� { warning_cnt|=0x02; } else { warning_cnt&=~0x02; } if(cnt_s1>=2) { warning_cnt|=0x04; }else{ warning_cnt&=~0x04; } // if((warning_cnt&0x01)==0x01) //�����쳣 // { // YP1=0;delay_us(10);YP2=1;delay_us(10);YP3=1;delay_us(10); // } // else if((warning_cnt&0x02)==0x02)//���� // { // YP1=1;delay_us(10);YP2=0;delay_us(10);YP3=1;delay_us(10); // } // else if((warning_cnt&0x04)==0x04)//ѧϰʱ����� // { // YP1=1;delay_us(10);YP2=1;delay_us(10);YP3=0;delay_us(10); // } // else{ // YP1=1;YP2=1;YP3=1;delay_us(10); // } } } }