Browse Source

增加部分功能

liuhao 3 years ago
parent
commit
b199f0a906

+ 1 - 1
TEST_Prj/dysys_prj/程序/HARDWARE/oled/oled.c

@@ -414,7 +414,7 @@ void OLED_ShowCHineseWord(u8 x,u8 y,u8* str,u8 flag)
 * @·µ»ØÖµ£º         void
 * @ÆäËû£º           
 ********************************************************************************/
-void OLED_ShowText(u8 x,u8 y,u8* str,u8 flag)
+void OLED_ShowText(u8 x,u8 y,char* str,u8 flag)
 {
 	u8 tempstr[3] = {'\0'};
 	while(*str!='\0')

+ 1 - 1
TEST_Prj/dysys_prj/程序/HARDWARE/oled/oled.h

@@ -53,7 +53,7 @@ void IIC_Stop();
 void Write_IIC_Command(unsigned char IIC_Command);
 void Write_IIC_Data(unsigned char IIC_Data);
 void Write_IIC_Byte(unsigned char IIC_Byte);
-void OLED_ShowText(u8 x,u8 y,u8* str,u8 flag);
+void OLED_ShowText(u8 x,u8 y,char* str,u8 flag);
 
 void IIC_Wait_Ack();
 #endif  

+ 18 - 16
TEST_Prj/dysys_prj/程序/HARDWARE/oled/oledfont.h

@@ -208,22 +208,24 @@ const unsigned char F8X16[]=
   0x00,0x06,0x01,0x01,0x02,0x02,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//~ 94
 };
 chinese Hzk[]={
-"和",
-{0x20,0x24,0x24,0xA4,0xFE,0x23,0x22,0x20,0x00,0xF8,0x08,0x08,0x08,0xF8,0x00,0x00,0x10,0x08,0x06,0x01,0xFF,0x01,0x06,0x00,0x00,0x3F,0x10,0x10,0x10,0x3F,0x00,0x00},
-"你",
-{0x00,0x80,0x60,0xF8,0x07,0x40,0x20,0x18,0x0F,0x08,0xC8,0x08,0x08,0x28,0x18,0x00,0x01,0x00,0x00,0xFF,0x00,0x10,0x0C,0x03,0x40,0x80,0x7F,0x00,0x01,0x06,0x18,0x00},
-"在",
-{0x08,0x08,0x88,0xC8,0x38,0x0C,0x0B,0x08,0x08,0xE8,0x08,0x08,0x08,0x08,0x08,0x00,0x02,0x01,0x00,0xFF,0x40,0x41,0x41,0x41,0x41,0x7F,0x41,0x41,0x41,0x41,0x40,0x00},
-"一",
-{0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
-"起",
-{0x40,0x48,0x48,0x48,0xFF,0x48,0x48,0x00,0xC4,0x44,0x44,0x44,0xFC,0x00,0x00,0x00,0x80,0x60,0x1F,0x20,0x7F,0x44,0x44,0x40,0x4F,0x50,0x50,0x50,0x50,0x5C,0x40,0x00},
-"好",
-{0x10,0x10,0xF0,0x1F,0x10,0xF0,0x00,0x80,0x82,0x82,0xE2,0x92,0x8A,0x86,0x80,0x00,0x40,0x22,0x15,0x08,0x16,0x61,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00},
-"快",
-{0x00,0xE0,0x00,0xFF,0x10,0x20,0x08,0x08,0x08,0xFF,0x08,0x08,0xF8,0x00,0x00,0x00,0x01,0x00,0x00,0xFF,0x00,0x81,0x41,0x31,0x0D,0x03,0x0D,0x31,0x41,0x81,0x81,0x00},
-"乐",
-{0x00,0x00,0xE0,0x9C,0x84,0x84,0x84,0xF4,0x82,0x82,0x83,0x82,0x80,0x80,0x00,0x00,0x00,0x20,0x10,0x08,0x06,0x40,0x80,0x7F,0x00,0x00,0x02,0x04,0x08,0x30,0x00,0x00},
+"流",
+{0x10,0x60,0x02,0x8C,0x00,0x44,0x64,0x54,0x4D,0x46,0x44,0x54,0x64,0xC4,0x04,0x00,0x04,0x04,0x7E,0x01,0x80,0x40,0x3E,0x00,0x00,0xFE,0x00,0x00,0x7E,0x80,0xE0,0x00},
+"速",
+{0x40,0x40,0x42,0xCC,0x00,0x04,0xF4,0x94,0x94,0xFF,0x94,0x94,0xF4,0x04,0x00,0x00,0x00,0x40,0x20,0x1F,0x20,0x48,0x44,0x42,0x41,0x5F,0x41,0x42,0x44,0x48,0x40,0x00},
+"温",
+{0x10,0x60,0x02,0x8C,0x00,0x00,0xFE,0x92,0x92,0x92,0x92,0x92,0xFE,0x00,0x00,0x00,0x04,0x04,0x7E,0x01,0x40,0x7E,0x42,0x42,0x7E,0x42,0x7E,0x42,0x42,0x7E,0x40,0x00},
+"度",
+{0x00,0x00,0xFC,0x24,0x24,0x24,0xFC,0x25,0x26,0x24,0xFC,0x24,0x24,0x24,0x04,0x00,0x40,0x30,0x8F,0x80,0x84,0x4C,0x55,0x25,0x25,0x25,0x55,0x4C,0x80,0x80,0x80,0x00},
+"剩",
+{0x48,0x4A,0xFA,0x0A,0xFE,0x09,0xF9,0x49,0xA8,0x00,0x00,0xF0,0x00,0x00,0xFF,0x00,0x22,0x11,0x0B,0x04,0xFF,0x04,0x09,0x12,0x23,0x00,0x00,0x0F,0x40,0x80,0x7F,0x00},
+"余",
+{0x80,0x80,0x40,0x20,0x50,0x48,0x44,0xC3,0x44,0x48,0x50,0x20,0x40,0x80,0x80,0x00,0x00,0x40,0x22,0x1A,0x02,0x42,0x82,0x7F,0x02,0x02,0x02,0x0A,0x12,0x60,0x00,0x00},
+"量",
+{0x20,0x20,0x20,0xBE,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xBE,0x20,0x20,0x20,0x00,0x00,0x80,0x80,0xAF,0xAA,0xAA,0xAA,0xFF,0xAA,0xAA,0xAA,0xAF,0x80,0x80,0x00,0x00},
+"℃",
+{0x06,0x09,0x09,0xE6,0xF8,0x0C,0x04,0x02,0x02,0x02,0x02,0x02,0x04,0x1E,0x00,0x00,0x00,0x00,0x00,0x07,0x1F,0x30,0x20,0x40,0x40,0x40,0x40,0x40,0x20,0x10,0x00,0x00},/*"℃",7*/
+/* (16 X 16 , 宋体 )*/
+
 }; 
 
 #endif

+ 5 - 1
TEST_Prj/dysys_prj/程序/SYSTEM/usart/usart.c

@@ -83,6 +83,7 @@ void UsartSendData(u8 *p,char len)
 				}
 }
 
+extern u8 warning_flag;
 
 void USART1_IRQHandler(void)                	//串口1中断服务程序
 {
@@ -105,7 +106,10 @@ void USART1_IRQHandler(void)                	//
 		//用读SR和DR的方法清除IDLE
 		rxes = USART1->SR;
 		rxes = USART1->DR;
-
+		if(strstr(Usart1ReadBuff,"SZZ152_manual")!=NULL)
+		{
+		   warning_flag=1;
+		}
 		Usart1ReadCnt=0;
 		memset(Usart1ReadBuff,0,Usart1ReadLen-1);
 	}

File diff suppressed because it is too large
+ 6 - 7
TEST_Prj/dysys_prj/程序/USER/Demo.uvguix.liuhao


+ 1 - 1
TEST_Prj/dysys_prj/程序/USER/Demo.uvoptx

@@ -386,7 +386,7 @@
 
   <Group>
     <GroupName>FWLib</GroupName>
-    <tvExp>1</tvExp>
+    <tvExp>0</tvExp>
     <tvExpOptDlg>0</tvExpOptDlg>
     <cbSel>0</cbSel>
     <RteFlg>0</RteFlg>

+ 2 - 3
TEST_Prj/dysys_prj/程序/USER/Demo.uvprojx

@@ -10,7 +10,7 @@
       <TargetName>demo</TargetName>
       <ToolsetNumber>0x4</ToolsetNumber>
       <ToolsetName>ARM-ADS</ToolsetName>
-      <pCCUsed>5060960::V5.06 update 7 (build 960)::.\ARMCC</pCCUsed>
+      <pCCUsed>5060750::V5.06 update 6 (build 750)::ARMCC</pCCUsed>
       <uAC6>0</uAC6>
       <TargetOption>
         <TargetCommonOption>
@@ -185,7 +185,6 @@
             <uocXRam>0</uocXRam>
             <RvdsVP>0</RvdsVP>
             <RvdsMve>0</RvdsMve>
-            <RvdsCdeCp>0</RvdsCdeCp>
             <hadIRAM2>0</hadIRAM2>
             <hadIROM2>0</hadIROM2>
             <StupSel>8</StupSel>
@@ -352,7 +351,7 @@
             <NoWarn>0</NoWarn>
             <uSurpInc>0</uSurpInc>
             <useXO>0</useXO>
-            <ClangAsOpt>4</ClangAsOpt>
+            <uClangAs>0</uClangAs>
             <VariousControls>
               <MiscControls></MiscControls>
               <Define></Define>

+ 186 - 39
TEST_Prj/dysys_prj/程序/USER/main.c

@@ -9,37 +9,150 @@
 #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) //控制出水 电磁阀
+#define HwInput1 PBin(8) //红外传感器输入 
+#define HwInput2 PBin(7) //红外传感器输入
+#define HwInput3 PBin(6) //红外传感器输入
+#define HwInput4 PBin(5) //红外传感器输入
 
-void Hw_Init(void)
+#define KEY1 PAin(0)    // 手动取消报警按钮
+
+int temp_val=0;
+u16 get_cnt=0;
+u16 ds_val=0;//滴速
+u16 sy_val=0;//剩余量
+
+void KEY_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
+	 GPIO_InitTypeDef  GPIO_InitStructure;
+	 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB, ENABLE);	 //使能端口时钟
+	 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;				 // 端口配置
+	 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; 		 //上拉输入
+	 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		 //IO口速度为50MHz
+	 GPIO_Init(GPIOA, &GPIO_InitStructure);					 //根据设定参数初始化
+	
+	 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_7|GPIO_Pin_6;				 // 端口配置
+	 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; 		 //上拉输入
+	 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		 //IO口速度为50MHz
+	 GPIO_Init(GPIOB, &GPIO_InitStructure);					 //根据设定参数初始化
 }
 
+u16 count=0;
+u16 Rpm_count=0;
+void exti_Init(void)
+{
+	 EXTI_InitTypeDef EXTI_InitStruct;
+	 NVIC_InitTypeDef NVIC_InitStruct;
+	 GPIO_InitTypeDef GPIO_InitStructure;
+//   KEY_Init();//IO初始化
+  RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//配置外部中断时钟
+ 	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//使能GPIOA时钟
+
+	GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_9;//
+	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //设置成输入
+ 	GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIOA8
+	 //io口与中断线映射 
+	GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource9);//链接到中断线8  GPIO8只能映射到中断线4上面
+	EXTI_InitStruct.EXTI_Line=EXTI_Line8;//确定中断线
+	EXTI_InitStruct.EXTI_LineCmd=ENABLE;//使能
+	EXTI_InitStruct.EXTI_Mode=EXTI_Mode_Interrupt;//中断模式
+	EXTI_InitStruct.EXTI_Trigger=EXTI_Trigger_Falling;//上降沿触发
+	EXTI_Init(&EXTI_InitStruct);//初始化 
+
+	NVIC_InitStruct.NVIC_IRQChannel=EXTI9_5_IRQn;
+/*
+需要明确的是,PxN管脚共用外部中断线EXTIN和外部中断向量EXTIN_IRQn
+和中断服务程序入口EXTIN_IRQHandler,但是需要注意的是[9...5]
+共用EXTI9_5_IRQn和EXTI9_5_IRQHandler、[15...10]共用EXTI15_10_IRQn和EXTI15_10_IRQHandler
+*/
+	NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;//使能
+	NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=2;//中断抢优先级
+	NVIC_InitStruct.NVIC_IRQChannelSubPriority=2;
+	NVIC_Init(&NVIC_InitStruct);//初始化
+}
+
+void EXTI9_5_IRQHandler(void)
+{
+	
+	if(EXTI_GetITStatus(EXTI_Line9)!=RESET)
+	{
+	   count++;
+	}
+  EXTI_ClearITPendingBit(EXTI_Line9);//清除中断 标志
+}
+
+
+ //通用定时器4中断初始化
+//这里时钟选择为APB1的2倍,而APB1为36M
+//arr:自动重装值。
+//psc:时钟预分频数
+//这里使用的是定时器2!
+
+void TIM2_Int_Init(u16 arr,u16 psc)
+{
+  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
+ 	NVIC_InitTypeDef NVIC_InitStructure;
+
+
+	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); //时钟使能
+	
+	//定时器TIM4初始化
+	TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值	
+	TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值
+	TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割:TDTS = Tck_tim
+	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
+	TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); //根据指定的参数初始化TIMx的时间基数单位
+ 
+	TIM_ITConfig(TIM2,TIM_IT_Update, ENABLE ); //使能指定的TIM4中断,允许更新中断
+
+	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //中断分组 2
+	//中断优先级NVIC设置
+ 	NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;  //TIM6中断
+ 	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(TIM2, ENABLE);  //使能TIMx
+}
+
+void TIM2_IRQHandler() 
+{					  
+	static  u8 st;
+	static	u16 pw=0;
+	st=TIM_GetFlagStatus(TIM2, TIM_IT_Update);
+	if(st!=0)
+	{  
+		TIM_ClearFlag(TIM2, TIM_IT_Update);
+		if(++pw>=100*60)//10s时间到 
+		{
+							pw=0;
+							ds_val=count;//获取滴速 
+							count=0;
+		}
+		if(HwInput1==0)
+		{ 
+		  sy_val=100;
+		}
+		else if(HwInput2==0)
+		{
+		   sy_val=50;
+		}
+		else if(HwInput3==0)
+		{
+		  sy_val=10;
+		}
+		else if(HwInput4==0)
+		{
+		  sy_val=0;
+		}
+		get_cnt++;
+	}
+}
 
 
-//void TIM2_IRQHandler() 
-//{					  
-//	static  u8 st;
-//	st=TIM_GetFlagStatus(TIM2, TIM_IT_Update);
-//	if(st!=0)
-//	{  
-//		TIM_ClearFlag(TIM2, TIM_IT_Update);
-//	}
-//}
-//测距
-int temp_val=0;
-u16 get_cnt=0;
 
 char showbuff[16]={0};
+u8 warning_sta=0;//异常状态
+u8 warning_flag=0;//警告标志位
 
 int main(void)
 {	 
@@ -47,30 +160,64 @@ int main(void)
 	delay_init();	    	 //延时函数初始化	  
  	LED_Init();		  			//初始化与LED连接的硬件接口
 	uart_init(9600);
-//	ADC1_Init();
 	delay_ms(500);
 	OLED_Init();
 	OLED_Clear();
-	 OLED_ShowString(0,2,(u8*)"2322352",16); //显示 
 	DS18B20_Init();
-  OLED_ShowText(0,0,"和你在一起好快乐",0);
-		//	 sprintf(showbuff,"temp:%2d.%1d",temp_val/10,temp_val%10); //打印成字符串
-		//			 OLED_ShowString(0,2,(u8*)showbuff,16); //显示 
+
+	
+	sprintf(showbuff,"温度:%2d.%1d",temp_val/10,temp_val%10); //打印成字符串
+  OLED_ShowText(0,0,showbuff,0); //显示 
+	
+	sprintf(showbuff,"流速:%3d/min",ds_val); //打印成字符串
+  OLED_ShowText(0,2,showbuff,0); //显示 
+	
+	sprintf(showbuff,"剩余量:%3d/ml",sy_val); //打印成字符串
+  OLED_ShowText(0,4,showbuff,0); //显示 
+	
+	TIM2_Int_Init(71,10000) ; // 开启定时器4	10ms
 	buzz=1;
  	while(1)
-	{	 		
-
+	{	 	
 				
-				if(++get_cnt>100) //采集时间计数器 
+				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,4,(u8*)showbuff,16); //显示 
-				}		
-	
-	delay_ms(5);//延时
-		
+					  get_cnt=0;
+						sprintf(showbuff,"温度:%2d.%1d",temp_val/10,temp_val%10); //打印成字符串
+						OLED_ShowText(0,0,showbuff,0); //显示 
+						
+						sprintf(showbuff,"流速:%3d/min",ds_val); //打印成字符串
+						OLED_ShowText(0,2,showbuff,0); //显示 
+						
+						sprintf(showbuff,"剩余量:%3d/ml",sy_val); //打印成字符串
+						OLED_ShowText(0,4,showbuff,0); //显示 0); //打印成字符串
+					
+					  if(ds_val>70||ds_val<10||sy_val==10||sy_val==0)//滴速 通常成人每分钟40-60滴,儿童每分钟20-40滴。
+					  {
+					     warning_flag=1;
+					  }
+					  printf("SZZ152_X%2d.%1dH%dD%dZ%dK\r\n",temp_val/10,temp_val%10,ds_val,sy_val,warning_flag);//串口发送给wifi模块
+						
+						if(warning_flag)
+						{
+						  buzz=!buzz;//声光报警触发
+						}else
+						{
+						   buzz=1;
+						}
+				}
+				
+				if(KEY1==0)
+				{
+					 delay_ms(5);//延时
+				   if(KEY1==0)
+					 {
+					     while(!KEY1);
+							 warning_flag=0;
+							 
+					 }
+				}
+				delay_ms(5);//延时
 	} 
 }
 

Some files were not shown because too many files changed in this diff