ソースを参照

完善部分功能

liuhao 2 年 前
コミット
df94b8f7de

+ 98 - 1
TEST_Prj/stm32_SmartLed_proprj/Demo/SYSTEM/usart/usart.c

@@ -253,6 +253,99 @@ void UsartSendData(u8 *p,char len)
 				}
 }
 
+#include "ds1302.h"
+extern int set_s1,set_f1;
+
+extern u8 openflag;
+extern u8 mode_flag;
+extern u8 dw_val;
+extern u8 sc_val;
+char tempbuf[16]={0};
+int settemp=0;
+
+void analyse_data()
+{
+	if(strstr(Usart1ReadBuff,"oepn")!=NULL)
+	{
+	    openflag=1;
+	}
+	else if(strstr(Usart1ReadBuff,"close")!=NULL)
+	{
+	   openflag=0;
+	}
+	else if(strstr(Usart1ReadBuff,"mode1")!=NULL)
+	{
+	   mode_flag=1;
+	}
+	else if(strstr(Usart1ReadBuff,"mode0")!=NULL)
+	{
+	   mode_flag=0;
+	}
+	else if(strstr(Usart1ReadBuff,"dwval")!=NULL) //设置挡位
+	{
+	   if(strstr(Usart1ReadBuff,"1")!=NULL)
+		 {
+				dw_val=0;
+		 }
+		 if(strstr(Usart1ReadBuff,"2")!=NULL)
+		 {
+		   dw_val=1;
+		 }
+		 if(strstr(Usart1ReadBuff,"3")!=NULL)
+		 {
+		   dw_val=2;
+		 }
+	}
+	else if(strstr(Usart1ReadBuff,"scval")!=NULL) //设置色彩
+	{
+	   if(strstr(Usart1ReadBuff,"1")!=NULL)
+		 {
+				sc_val=0;
+		 }
+		 if(strstr(Usart1ReadBuff,"2")!=NULL)
+		 {
+		   sc_val=1;
+		 }
+		 if(strstr(Usart1ReadBuff,"3")!=NULL)
+		 {
+		   sc_val=2;
+		 }
+	}
+	else if(strstr(Usart1ReadBuff,"alarm:")!=NULL)//设置闹钟 格式alarm:15@43\r\n;
+	{
+		  memset(tempbuf,0,16);
+	    if(String_Sub(Usart1ReadBuff,tempbuf,"alarm:","@")==1) //提取时
+			{
+			    set_s1=atoi(tempbuf);
+			}
+			memset(tempbuf,0,16);
+			if(String_Sub(Usart1ReadBuff,tempbuf,"@","\r\n")==1) //提取fen 
+			{
+			   set_f1=atoi(tempbuf);
+			}
+	}
+	else if(strstr(Usart1ReadBuff,"time:")!=NULL&&strstr(Usart1ReadBuff,"\r\n")!=NULL)//设置闹钟 格式time:15S43F34\r\n;
+	{
+		  memset(tempbuf,0,16);
+	    if(String_Sub(Usart1ReadBuff,tempbuf,"time:","S")==1) //提取时
+			{
+			    ds1302Data.hour=atoi(tempbuf);
+			}
+			memset(tempbuf,0,16);
+			if(String_Sub(Usart1ReadBuff,tempbuf,"S","F")==1) //提取fen 
+			{
+			    ds1302Data.min=atoi(tempbuf);
+			}
+			memset(tempbuf,0,16);
+			if(String_Sub(Usart1ReadBuff,tempbuf,"F","\r\n")==1) //提取fen 
+			{
+			    ds1302Data.sec=atoi(tempbuf);
+			}
+			Ds1302_Write_Time_All(1);//更新时间数据 
+	}
+	
+}
+
 
 void USART1_IRQHandler(void)                	//串口1中断服务程序
 {
@@ -276,7 +369,11 @@ void USART1_IRQHandler(void)                	//
 		//用读SR和DR的方法清除IDLE
 		rxes = USART1->SR;
 		rxes = USART1->DR;
-	//	analyse_data();
+		if(Usart1ReadCnt>0)
+		{
+				analyse_data();
+		}
+		memset(Usart1ReadBuff,0,Usart1ReadLen-1);
 		Usart1ReadCnt=0;
 	}
 	

ファイルの差分が大きいため隠しています
+ 6 - 7
TEST_Prj/stm32_SmartLed_proprj/Demo/USER/Demo.uvguix.liuhao


+ 2 - 2
TEST_Prj/stm32_SmartLed_proprj/Demo/USER/Demo.uvoptx

@@ -140,7 +140,7 @@
         <SetRegEntry>
           <Number>0</Number>
           <Key>JL2CM3</Key>
-          <Name>-U59106098 -O78 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8004 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_128.FLM -FS08000000 -FL020000 -FP0($$Device:STM32F103C8$Flash\STM32F10x_128.FLM)</Name>
+          <Name>-U59610219 -O78 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(1BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8004 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_128.FLM -FS08000000 -FL020000 -FP0($$Device:STM32F103C8$Flash\STM32F10x_128.FLM)</Name>
         </SetRegEntry>
         <SetRegEntry>
           <Number>0</Number>
@@ -418,7 +418,7 @@
 
   <Group>
     <GroupName>CORE</GroupName>
-    <tvExp>0</tvExp>
+    <tvExp>1</tvExp>
     <tvExpOptDlg>0</tvExpOptDlg>
     <cbSel>0</cbSel>
     <RteFlg>0</RteFlg>

+ 2 - 3
TEST_Prj/stm32_SmartLed_proprj/Demo/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>

+ 32 - 11
TEST_Prj/stm32_SmartLed_proprj/Demo/USER/main.c

@@ -11,6 +11,7 @@
 #include "oled.h"
 #include "sk9822.h"
 
+
 u8 humi=0;//湿度值
 u8 temp=0;//温度值
 u8 buffer[10]={0}; 
@@ -21,9 +22,13 @@ char SendBuff[50]={0};
 short TEMP = 0;
 u16 cj_val=0;//测距值
 
-u8 ld_val=0;//亮度值
 u8 openflag=0;//手动模式开关按钮
+u8 mode_flag=0;
+
 
+u16 GetTimer=0;//采集时间计数器 
+u8 dw_val=0;//挡位//亮度值
+u8 sc_val=0;//色彩
 int set_s1=7,set_f1=0; //设置 时间1 
 int cnt_s1=0,cnt_f1=0,cnt_m1=0;//学习时间 时分秒
 #define RT_INPUT PBin(1)//人体红外感应
@@ -163,12 +168,7 @@ void TIMER3_Int_Init(u16 arr,u16 psc)
 
 }
 
-u8 mode_flag=0;
-
 
-u16 GetTimer=0;//采集时间计数器 
-u8 dw_val=0;//挡位
-u8 sc_val=0;//色彩
 
 int key_Task(void)
 {
@@ -206,7 +206,7 @@ int key_Task(void)
 				 {
 						 if(mode_flag==0)
 						 {
-						 
+						   openflag^=1;//开关按钮
 						 }else
 						 {
 						 
@@ -299,6 +299,9 @@ int main(void)
 	delay_ms(10);//上电延时一会 
 	key_gpio_init();
 	Ds1302_Gpio_Init();
+	SK9822_Intit();
+
+	SK9822_Write_Data(0xf0,0x55,0xa0,0x0f);
  	while(1)
 	{	 	
 
@@ -311,7 +314,7 @@ int main(void)
 									humi = buffer[0] + buffer[1] / 10;//取湿度值
 									temp = buffer[2] + buffer[3] / 10;//取温度值
 						}		
-						GzVal = Dispose();		
+						GzVal = Dispose();//读取光照		
 						cj_val=Wave_Start();
 						if(cj_val<10)
 						{
@@ -320,7 +323,7 @@ int main(void)
 						{
 						   OLED_ShowText(0,6,"坐姿:正常",0);
 						}
-					  printf("wsdgzcheck_X%dH%dD%dZ\r\n",temp,humi,GzVal);//发送到上位机app
+					  printf("drv_X%dH%dD%dZ\r\n",temp,humi,GzVal);//发送到上位机app
 									
 					
 			}
@@ -339,11 +342,29 @@ int main(void)
 								sprintf((char*)DateShowBuf,"学习:%2d:%2d:%2d", (int)cnt_s1, (int)cnt_f1,cnt_m1);
 								ShowTo(DateShowBuf,10);
 								OLED_ShowText(0,4,DateShowBuf,0);
+								if(ds1302Data.hour==set_f1&&ds1302Data.min==set_s1) //到达闹钟时间
+								{
 								
-						 
+								}								
+							  else
+								{
+								
+								}
 
 					}
-
+				if(mode_flag)//自动模式
+				{
+				   if(rt_flag) //有人
+					 {
+					    
+					 }
+					 else  //没人
+					 {
+					   
+					 }
+				}else{   //手动模式
+				
+				}
 			
 	} 
 }

+ 36 - 18
TEST_Prj/stm32_SmartLed_proprj/Demo/USER/sk9822.c

@@ -4,24 +4,42 @@
 //写一个字节数据函数  
 void SK9822_Write_Byte(unsigned char Data)
 {
-       unsigned char i=0;
-       for(i=0;i<8;i++)
-       {
-                //SDI=(Data&0x80)>>7;
-                if(Data&0x80)
-                {
-                    SK9822_SDI_PIN_H();
-                }else
-                {
-                    SK9822_SDI_PIN_L();
-                }
-                Data<<=1; 	  
-		delay_us(1);   
-		SK9822_SCK_PIN_H();
-		delay_us(1); 
-		SK9822_SCK_PIN_L();
-		delay_us(1);
-       }
+//       unsigned char i=0;
+//       for(i=0;i<8;i++)
+//       {
+//                //SDI=(Data&0x80)>>7;
+//                if(Data&0x80)
+//                {
+//                    SK9822_SDI_PIN_H();
+//                }else
+//                {
+//                    SK9822_SDI_PIN_L();
+//                }
+//                Data<<=1; 	  
+//		delay_us(1);   
+//		SK9822_SCK_PIN_H();
+//		delay_us(1); 
+//		SK9822_SCK_PIN_L();
+//		delay_us(1);
+//       }
+			unsigned char i;
+			unsigned char txdata=Data;
+     for(i = 0; i < 8; i++)
+     {
+         SK9822_SCK_PIN_L();
+         delay_us(1);
+         //数据发送 
+         if(txdata & 0x80){        
+            SK9822_SDI_PIN_H();
+         }else{
+              SK9822_SDI_PIN_L();
+         }
+         txdata <<= 1;
+         delay_us(1);
+         SK9822_SCK_PIN_H();
+         delay_us(1);
+     }
+      SK9822_SCK_PIN_L();
 }
 //函数名称:SK9822写数据函数 
 //输入参数:Bri 亮度调整  高3位固定为1  取值范围00000-11111

この差分においてかなりの量のファイルが変更されているため、一部のファイルを表示していません