From acce179c49a6a9c625e9402e6f9046d1325ffcea Mon Sep 17 00:00:00 2001
From: chen <15335560115@163.com>
Date: 星期三, 26 二月 2025 18:04:26 +0800
Subject: [PATCH] 初步写完键盘驱动和串口初始化

---
 keil/include/main/main.c |  396 +++++++++++++++++++++++++++++++++----------------------
 1 files changed, 237 insertions(+), 159 deletions(-)

diff --git a/keil/include/main/main.c b/keil/include/main/main.c
index 027c49d..1784f47 100644
--- a/keil/include/main/main.c
+++ b/keil/include/main/main.c
@@ -62,7 +62,7 @@
 #include "HIDO_Timer.h"
 #include "TCPClient.h"
 
-//#define DEBUG_MODE
+#define DEBUG_MODE
 extern int simple_main(void);
 extern int temp_main(void);
 #define TEST_UART_POLL_MODE 0
@@ -186,14 +186,14 @@
 				if(fVoltage_mv<3300)
 				{
 					power_low_flag=1;
-					gps_air780_power_change(gps_power_state,0);//gps原样,关闭4G 
+//					gps_air780_power_change(gps_power_state,0);//gps原样,关闭4G 
 					LOG_INFO(TRACE_MODULE_APP, "电池电压低于3.3V,4G,GPS停止工作\r\n");
 				}else{
 					power_low_flag=0;
-					gps_air780_power_change(gps_power_state,1);//gps原样,开启4G
+//					gps_air780_power_change(gps_power_state,1);//gps原样,开启4G
 					LOG_INFO(TRACE_MODULE_APP, "电池电压正常,4G,GPS,正常工作\r\n");
 				}
-		gpio_pin_set(ADC_GND_ENABLE);//在拉高
+//		gpio_pin_set(ADC_GND_ENABLE);//在拉高
   //  LOG_INFO(TRACE_MODULE_APP, "The voltage is %%%d \r\n",bat_percent);
 }
 //void UartInit(void)
@@ -225,34 +225,35 @@
 }
 void IMUTask(void)
 {
-	if(nomove_count>g_com_map[NOMOVESLEEP_TIME]&&g_com_map[IMU_ENABLE]==1)
-	{power_wakeup_enable((enum POWER_WAKEUP_SOURCE_T)ACCLERATE_DETECT_Pin, POWER_WAKEUP_LEVEL_HIGH);
-		mcu_deep_sleep();
-	}
+//	if(nomove_count>g_com_map[NOMOVESLEEP_TIME]&&g_com_map[IMU_ENABLE]==1)
+//	{power_wakeup_enable((enum POWER_WAKEUP_SOURCE_T)ACCLERATE_DETECT_Pin, POWER_WAKEUP_LEVEL_HIGH);
+//		mcu_deep_sleep();
+//	}
 }
 void UserKeyTask(void)
  {
-     if(!GET_USERKEY)
-     {
-        if(HIDO_TimerGetTick() - keystarttime>3)
-        {
-            userkey_state = 1;
-            keystarttime =  HIDO_TimerGetTick();
-						UDPClient_UploadGPS();
-        }
-        if(HIDO_TimerGetTick() - keystarttime2>10)
-        {
-            g_com_map[CNT_RESTART] = 1;
-        }
-     }else
-     {
-       keystarttime =  HIDO_TimerGetTick(); 
-       keystarttime2 =  HIDO_TimerGetTick(); 
-     }
+//     if(!GET_USERKEY)
+//     {
+//        if(HIDO_TimerGetTick() - keystarttime>3)
+//        {
+//            userkey_state = 1;
+//            keystarttime =  HIDO_TimerGetTick();
+//						//UDPClient_UploadGPS();
+//        }
+//        if(HIDO_TimerGetTick() - keystarttime2>10)
+//        {
+//            g_com_map[CNT_RESTART] = 1;
+//        }
+//     }else
+//     {
+//       keystarttime =  HIDO_TimerGetTick(); 
+//       keystarttime2 =  HIDO_TimerGetTick(); 
+//     }
  } 
 void MinuteTask(void)
-{		gpio_pin_clr(ADC_GND_ENABLE);//拉低
-    adc_get(&sample[0], NUM_SAMPLES, adc_callback);//adc采样
+{
+//{		gpio_pin_clr(ADC_GND_ENABLE);//拉低
+//    adc_get(&sample[0], NUM_SAMPLES, adc_callback);//adc采样
 }
 uint8_t link_error_time;
 void SecondTask(void)
@@ -279,7 +280,7 @@
 	{
     if(IfTCPConnected())
     {
-				link_error_time=0;
+//				link_error_time=0;
         TCP_reconnect_timer =0;
         flag_TCP_reconnectting = 0;
     } else {
@@ -309,25 +310,12 @@
 uint8_t uwb_enable_flag=0;
 static void sleep_timer_callback(void *dev, uint32_t time)
 {
-    IO_control_init();
-		if(enbale_blink_flag)
-	{
-	green_charge_state=0;
-	charge_red_on();
-	}
-	charge_state_change();//充电状态判断
 if(secondtask_count++%2==0)
     {
         flag_secondtask = 1;
     }else{
         flag_secondtask = 0;
     }
-		if(enbale_blink_flag)
-	{
-		delay_us(5000);
-	green_charge_state=0;
-	charge_red_off();
-	}		
  if(delaysleep_count>0)
      delaysleep_count--;
     //GPS工作逻辑
@@ -369,19 +357,19 @@
     memcpy(&send_struct.gunLableId,&g_com_map[BIND_DEV_ID],2);//更新绑定ID
     send_struct.tagId=dev_id;//更新设备ID
 
-    if(g_com_map[BIND_DEV_ID]==0)
-    {
-        UWB_work_state = UN_BIND;
-    }else{
-        UWB_work_state = SEARCH_DEV;
-    }
+//    if(g_com_map[BIND_DEV_ID]==0)
+//    {
+//        UWB_work_state = UN_BIND;
+//    }else{
+//        UWB_work_state = SEARCH_DEV;
+//    }
 		//g_com_map[SEND_4G_SECOND]
-    if(g_com_map[SEND_4G_SECOND]<30)
-		{
-		gps_open_flag=0;
-		}else{
-		gps_open_flag=1;
-		}
+//    if(g_com_map[SEND_4G_SECOND]<30)
+//		{
+//		gps_open_flag=0;
+//		}else{
+//		gps_open_flag=1;
+//		}
     g_com_map[MODBUS_MODE] = 0;
 		log_4g_enable_flag=g_com_map[LOG_4G_ENABLE];
     ip0 = (g_com_map[TCP_IP_0]>>12&0xf)*1000+(g_com_map[TCP_IP_0]>>8&0xf)*100+(g_com_map[TCP_IP_0]>>4&0xf)*10+(g_com_map[TCP_IP_0]&0xf);
@@ -389,9 +377,9 @@
     ip2 = (g_com_map[TCP_IP_2]>>12&0xf)*1000+(g_com_map[TCP_IP_2]>>8&0xf)*100+(g_com_map[TCP_IP_2]>>4&0xf)*10+(g_com_map[TCP_IP_2]&0xf);
     ip3 = (g_com_map[TCP_IP_3]>>12&0xf)*1000+(g_com_map[TCP_IP_3]>>8&0xf)*100+(g_com_map[TCP_IP_3]>>4&0xf)*10+(g_com_map[TCP_IP_3]&0xf);
     port = g_com_map[TCP_PORT];
-    g_com_map[VERSION] = (1<<8)|9;
+    g_com_map[VERSION] = (1<<8)|0;
     LOG_INFO(TRACE_MODULE_APP,"设备ID: %x .\r\n",dev_id);
-    LOG_INFO(TRACE_MODULE_APP,"固件版本:4G-GPS定位手环 V%d.%d. \r\n",g_com_map[VERSION]>>8,g_com_map[VERSION]&0xff);
+    LOG_INFO(TRACE_MODULE_APP,"固件版本:MK_对讲机 V%d.%d. \r\n",g_com_map[VERSION]>>8,g_com_map[VERSION]&0xff);
     LOG_INFO(TRACE_MODULE_APP,"服务器地址: %d.%d.%d.%d:%d.\r\n",ip0,ip1,ip2,ip3,port);
 }
 
@@ -399,54 +387,33 @@
 
 void IdleTask(void)
 {
-    if(gpio_pin_get_val(INPUT_5V_Pin))
-    {
+//    if(gpio_pin_get_val(INPUT_5V_Pin))
+//    {
 
-        if(state5v==0)
-        {
-            state5v=1;
-            state5V_prase_flag=state5v;
-            gps_prase_flag=0;//解除gps解析
-            uart1_change_from_gps_to_debug();//测试
-         //   uart_receive(UART_ID1,m_EUART_DMA_RXBuf,EUART_RX_BUF_SIZE,uart_receive_callback);//开启dma
-            //UartInit();
-        }
+//        if(state5v==0)
+//        {
+//            state5v=1;
+//            state5V_prase_flag=state5v;
+//            gps_prase_flag=0;//解除gps解析
+//            uart1_change_from_gps_to_debug();//测试
+//         //   uart_receive(UART_ID1,m_EUART_DMA_RXBuf,EUART_RX_BUF_SIZE,uart_receive_callback);//开启dma
+//            //UartInit();
+//        }
 
-        //UART_CheckSend();
-    } else {
-        if(state5v==1)
-        {
-            g_com_map[MODBUS_MODE] = 0;
-            state5v=0;
-            state5V_prase_flag=state5v;
-            gps_prase_flag=1;//恢复gps解析
-            uart1_change_from_debug_to_gps();//测试
-          //  uart_receive(UART_ID1,m_EUART_DMA_RXBuf,EUART_RX_BUF_SIZE,uart_receive_callback);//开启dma
-            //UartDeinit();
-        }
-    }
+//        //UART_CheckSend();
+//    } else {
+//        if(state5v==1)
+//        {
+//            g_com_map[MODBUS_MODE] = 0;
+//            state5v=0;
+//            state5V_prase_flag=state5v;
+//            gps_prase_flag=1;//恢复gps解析
+//            uart1_change_from_debug_to_gps();//测试
+//          //  uart_receive(UART_ID1,m_EUART_DMA_RXBuf,EUART_RX_BUF_SIZE,uart_receive_callback);//开启dma
+//            //UartDeinit();
+//        }
+//    }
 		UART_CheckReceive();
-}
-int bind_check(void)
-{
-    if(g_com_map[BIND_DEV_ID]!=0x00)
-    {
-        return 1;
-//绑定信息为1说明设备已经被下发绑定
-    } else {
-        return 0;
-//绑定信息为0说明设备未被绑定
-    }
-}
-void check_if_in_search(void)
-{
-    if(link_success_flag==1) { //如果第一次测距收包成功那么则进入连接测距模式
-        UWB_work_state=LINK_SUCCESS;
-    } else { //否则进入搜索模式
-        UWB_work_state=SEARCH_DEV;
-        if(first_search_flag==0)
-            first_search_flag=1;
-    }
 }
 void boot_deinit(void)
 {
@@ -479,12 +446,136 @@
         .int_en = true,
         .callback = app_wdt_callback,
     };
+ void board_key_scan(uint8_t *key)
+ {
+	 uint8_t key_down_flag=0;
+	//第一行拉低做检测
+	 gpio_pin_clr(CN1);
+	 gpio_pin_set(CN2);
+	 gpio_pin_set(CN3);
+	 gpio_pin_set(CN4);
+	 if(!gpio_pin_get_val(COM1)||!gpio_pin_get_val(COM2)||!gpio_pin_get_val(COM3)||!gpio_pin_get_val(COM4))
+	 {
+	 if(!gpio_pin_get_val(COM1))
+	 {
+	 key_down_flag=1;
+	 *key=1; 
+		 while(!gpio_pin_get_val(COM1));
+	 }else if(!gpio_pin_get_val(COM2))
+	 {
+	 key_down_flag=1;
+	 *key=2; 
+		 while(!gpio_pin_get_val(COM2));
+	 }else if (!gpio_pin_get_val(COM3))
+	 {
+	 key_down_flag=1;
+	 *key=3; 
+		 while(!gpio_pin_get_val(COM3));
+	 }else if (!gpio_pin_get_val(COM4))
+	 {
+	 key_down_flag=1;
+	 *key=4; 
+		while(!gpio_pin_get_val(COM4));
+	 }else{
+	 key_down_flag=0;
+		 
+	 }
+	 	//第二行拉低做检测
+	 gpio_pin_set(CN1);
+	 gpio_pin_clr(CN2);
+	 gpio_pin_set(CN3);
+	 gpio_pin_set(CN4);
+	 	 if(!gpio_pin_get_val(COM1))
+	 {
+	 key_down_flag=1;
+	 *key=5; 
+		 while(!gpio_pin_get_val(COM1));
+	 }else if(!gpio_pin_get_val(COM2))
+	 {
+	 key_down_flag=1;
+	 *key=6; 
+		 while(!gpio_pin_get_val(COM2));
+	 }else if (!gpio_pin_get_val(COM3))
+	 {
+	 key_down_flag=1;
+	 *key=7; 
+		 while(!gpio_pin_get_val(COM3));
+	 }else if (!gpio_pin_get_val(COM4))
+	 {
+	 key_down_flag=1;
+	 *key=8; 
+		while(!gpio_pin_get_val(COM4));
+	 }else{
+	 key_down_flag=0;
+		 
+	 }
+	 
+	 	 	//第三行拉低做检测
+	 gpio_pin_set(CN1);
+	 gpio_pin_set(CN2);
+	 gpio_pin_clr(CN3);
+	 gpio_pin_set(CN4);
+	 if(!gpio_pin_get_val(COM1))
+	 {
+	 key_down_flag=1;
+	 *key=9; 
+		 while(!gpio_pin_get_val(COM1));
+	 }else if(!gpio_pin_get_val(COM2))
+	 {
+	 key_down_flag=1;
+	 *key=10; 
+		 while(!gpio_pin_get_val(COM2));
+	 }else if (!gpio_pin_get_val(COM3))
+	 {
+	 key_down_flag=1;
+	 *key=11; 
+		 while(!gpio_pin_get_val(COM3));
+	 }else if (!gpio_pin_get_val(COM4))
+	 {
+	 key_down_flag=1;
+	 *key=12; 
+		while(!gpio_pin_get_val(COM4));
+	 }else{
+	 key_down_flag=0;
+		 
+	 }
+	 	//第四行拉低做检测
+	 gpio_pin_set(CN1);
+	 gpio_pin_set(CN2);
+	 gpio_pin_set(CN3);
+	 gpio_pin_clr(CN4);
+	 if(!gpio_pin_get_val(COM1))
+	 {
+	 key_down_flag=1;
+	 *key=13; 
+		 while(!gpio_pin_get_val(COM1));
+	 }else if(!gpio_pin_get_val(COM2))
+	 {
+	 key_down_flag=1;
+	 *key=14; 
+		 while(!gpio_pin_get_val(COM2));
+	 }else if (!gpio_pin_get_val(COM3))
+	 {
+	 key_down_flag=1;
+	 *key=15; 
+		 while(!gpio_pin_get_val(COM3));
+	 }else if (!gpio_pin_get_val(COM4))
+	 {
+	 key_down_flag=1;
+	 *key=16; 
+		while(!gpio_pin_get_val(COM4));
+	 }else{
+	 key_down_flag=0;
+		 
+	 }
+	 }
+ }
 int main(void)
 {
     board_clock_run();
     boot_deinit();
     board_pins_config();
-    board_debug_console_open(TRACE_PORT_UART1);
+    board_debug_console_open(TRACE_PORT_UART0);//4G串口
     // Reset reason
     reset_cause_get();
     reset_cause_clear();
@@ -508,39 +599,27 @@
 
     // Disable watchdog timer
     wdt_close(WDT_ID0);
-		wdt_open(WDT_ID0,&app_wdt_cfg);//30s检测喂狗
+
     LOG_INFO(TRACE_MODULE_APP, "UWB simple example\r\n");
 
     // open system timer
     //sys_timer_open();
 
-    // TODO 4G
-    Uart_Register(UART_ID_4G, UART_ID0);
-    Internet_Init();
-    TCPClient_Init();
-
     gpio_open();
-		board_output_init();//配置adcGND引脚
-//		battery_monitor_open();
-//		Voltage_input=battery_monitor_get();
-//		battery_monitor_close();
-    adc_open(&usr_adc_cfg);
-		
-    IIC2_Init();
-    Accelerometer_Init();
-    IO_control_init();
-    io_pin_mux_set(SCL_PIN, IO_FUNC0);//测试测距波形
-    gpio_pin_set_dir(SCL_PIN , GPIO_DIR_IN, 0);
-    io_pull_set(SCL_PIN , IO_PULL_UP, IO_PULL_UP_LEVEL4);
+
+//    adc_open(&usr_adc_cfg);
+		board_gpio_init();
+		key_board_init();
+//    IIC2_Init();
+//    Accelerometer_Init();
+//    io_pin_mux_set(SCL_PIN, IO_FUNC0);//测试测距波形
+//    gpio_pin_set_dir(SCL_PIN , GPIO_DIR_IN, 0);
+//    io_pull_set(SCL_PIN , IO_PULL_UP, IO_PULL_UP_LEVEL4);
     //gps_air780_power_change(0,1);//开启gps,4G 
 //加速度计初始化必须在IO_control_init之前因为复用SDA引脚
-		gpio_pin_clr(ADC_GND_ENABLE);
    
 		   Program_Init();
-    //uart_open(UART_ID1, &test_uart_cfg);
- 
-   // uart1_change_from_gps_to_debug();   
-    //Uart1GpsRecDebugSend();   
+    uart_open(UART_ID1, &test_uart_cfg);
     uart_receive(UART_ID1,m_EUART_DMA_RXBuf,EUART_RX_BUF_SIZE,uart_receive_callback);
    
 // Initialize low power mode
@@ -550,44 +629,43 @@
     //sleep_timer_start(__MS_TO_32K_CNT(g_com_map[COM_INTERVAL]));//测试
     sleep_timer_start(__MS_TO_32K_CNT(SLEEP_TIMER_NUM));//测试
  //   board_5V_input_init(voltage_input_handler);
-		 adc_get(&sample[0], NUM_SAMPLES, adc_callback);//adc采样
-    board_acceleration_detection_init(move_handler);
+//		 adc_get(&sample[0], NUM_SAMPLES, adc_callback);//adc采样
+    //board_acceleration_detection_init(move_handler);
 //		 LOG_INFO(TRACE_MODULE_APP, "测试进入app");
-		board_4GUsart_detection_init(_4gUsart_handler);
+		//board_4GUsart_detection_init(_4gUsart_handler);
 		
     while (1)
-    { test4=gpio_pin_get_val(SCL_PIN);
-			wdt_ping(WDT_ID0);//喂狗
-			if(!power_low_flag)//确认是否休眠下才开启功能
-			{
-        if(flag_TCP_reconnectting||IfTCPConnected())
-        {
-//					if(flag_TCP_reconnectting)
-//					{
-//					link_error_time++;
-//					}//后加的
-        //    LOG_INFO(TRACE_MODULE_APP, "处理4G任务\r\n");
-           
-//            if(flag_4guart_needinit)
+    {
+//			if(!power_low_flag)//确认是否休眠下才开启功能
+//			{
+//        if(flag_TCP_reconnectting||IfTCPConnected())
+//        {
+////					if(flag_TCP_reconnectting)
+////					{
+////					link_error_time++;
+////					}//后加的
+//        //    LOG_INFO(TRACE_MODULE_APP, "处理4G任务\r\n");
+//           
+////            if(flag_4guart_needinit)
+////            {
+////                flag_4guart_needinit = 0;
+////                AIR780EUartInit();
+////            }//yuan
+//					  if(flag_4G_recdata==1)
 //            {
-//                flag_4guart_needinit = 0;
-//                AIR780EUartInit();
-//            }//yuan
-					  if(flag_4G_recdata==1)
-            {
-                flag_4G_recdata = 2;
-               
-                //LOG_INFO(TRACE_MODULE_APP, "运行Socket_RecvAll tt2 %d\r\n",tt2);
-                Socket_RecvAll();
-            }
-//						air780_led_on();
-            Internet_Poll();
-            HIDO_ATLitePoll();
-            HIDO_TimerPoll();
-            TCPClient_Poll();
-//            air780_led_off();
-        }
-		}
+//                flag_4G_recdata = 2;
+//               
+//                //LOG_INFO(TRACE_MODULE_APP, "运行Socket_RecvAll tt2 %d\r\n",tt2);
+//                Socket_RecvAll();
+//            }
+////						air780_led_on();
+//            Internet_Poll();
+//            HIDO_ATLitePoll();
+//            HIDO_TimerPoll();
+//            TCPClient_Poll();
+////            air780_led_off();
+//        }
+//		}
         if(flag_secondtask)
         {
             flag_secondtask = 0;
@@ -595,7 +673,7 @@
 				//	time_count++;
         }
 				UserKeyTask();
-				IMUTask();
+				//IMUTask();
         IdleTask();
 #ifndef DEBUG_MODE
 //if(flag_sleeptimer)

--
Gitblit v1.9.3