久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 10281|回復(fù): 9
打印 上一主題 下一主題
收起左側(cè)

STM8L單片機+BS818A的八位電容觸摸按鍵方案全套設(shè)計資料 PCB+程序源碼等

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:219113 發(fā)表于 2018-7-31 17:14 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
分享一套基于BS818A的八位電容觸摸按鍵方案
Altium Designer畫的原理圖和PCB圖如下:(51hei附件中可下載工程文件)


成品pcb正面和背面:


元件清單:



STM8L15x-16x-05x-AL31-L_StdPeriph_Lib   原文件夾名稱/庫名稱。


1.觸發(fā)關(guān)閉的動作從中斷it文件中拿出。
某些情況下,可能出現(xiàn)設(shè)定左右中斷后halt過程中。突然進(jìn)入中斷,關(guān)閉中斷,導(dǎo)致再也無法喚醒。

2.代碼里面放一個計數(shù)器,計算喚醒的次數(shù)。

3.ADC 的while(1)等待需要做一個超時限制。

4.整機需要RTC喚醒,或者看門狗么?

5.需要減少喚醒功耗。

6.
///////////////////
1.2016-06-18增加沒有傳感接入情況下的Err顯示。
2.

/////////
1.增加開機后的debug顯示。
2.關(guān)閉初始化后的debug。
3.增加一個次數(shù)的變量。增加一個喚醒次數(shù)的變量。
4.增加檢測detect引腳,觸發(fā)debug輸出的代碼。
5.修改err顯示值的設(shè)定范圍。----------------------------
6.修改電池電壓的獲取時間。----------------------------
7.關(guān)閉屏幕的時候,按照正確的流程來。將多余的電留在屏幕電容里面上,估計可以減少對啟動電流的需求。
8.


///////////////////////////
1.修改detect pin輸出的debug信息。=========
2.增加獨立watchdog。=========
3.顯示時間增加到5秒==========
4.修改option 代碼為 00 00 00 03 00 00 00 00 ,iwatchdog 由硬件啟動,halt后停止,關(guān)閉代碼讀取。===========
5.增加reset次數(shù)記錄和顯示。


PCB空板使用說明


1.焊接電池座時,注意焊盤正負(fù)極。
2.根據(jù)自己的需要,在按鍵上覆蓋按鍵面板材料。
3.J1跳線用于測試整機功耗。
4.J11跳線用于測試芯片的工作模式(串行,并行)
5.J13跳線用于測試芯片的低功耗模式(會影響按鍵掃描速度)
6.整個板子可以根據(jù)需要,從中間切開,分成單獨的芯片模塊和MCU模塊。以便使用其他方案驅(qū)動。
7.J12為STM8L的SWIM接口。
8.在粘接壓克力等面板到PCB上時,建議使用3M的468MP無基材膠。

單片機源程序如下:
  1. /* Includes ------------------------------------------------------------------*/
  2. #include "stm8l15x.h"
  3. #include "main.h"

  4. /** @addtogroup STM8L15x_StdPeriph_Template
  5.   * @{
  6.   */

  7. /* Private typedef -----------------------------------------------------------*/

  8. /* Private define ------------------------------------------------------------*/

  9. /* Private macro -------------------------------------------------------------*/



  10. /* Private variables ---------------------------------------------------------*/

  11. /* Private function prototypes -----------------------------------------------*/
  12. void DEBUGBOARD_Init(void);

  13. void GPIO_LowPower_Config(void);
  14. void IWDG_Config(void);

  15. /* Private functions ---------------------------------------------------------*/



  16. #define NSS_H        GPIO_SetBits(GPIOA, GPIO_Pin_2)
  17. #define NSS_L        GPIO_ResetBits(GPIOA, GPIO_Pin_2)

  18. #define DATA_H        GPIO_SetBits(GPIOD, GPIO_Pin_0)
  19. #define DATA_L        GPIO_ResetBits(GPIOD, GPIO_Pin_0)

  20. #define SCK_H        GPIO_SetBits(GPIOA, GPIO_Pin_3)
  21. #define SCK_L        GPIO_ResetBits(GPIOA, GPIO_Pin_3)






  22. void delay_us(volatile uint32_t times)
  23. {
  24.         while(times--);
  25. }






  26. void GPIO_LowPower_Config(void)
  27. {

  28. #if 1////all low out

  29. GPIO_Init(GPIOA, GPIO_Pin_0, GPIO_Mode_Out_PP_Low_Fast);//SWIM
  30. GPIO_Init(GPIOA, GPIO_Pin_1, GPIO_Mode_Out_PP_Low_Fast);///NRST

  31. GPIO_Init(GPIOA, GPIO_Pin_2, GPIO_Mode_In_FL_No_IT);//bin1
  32. GPIO_Init(GPIOA, GPIO_Pin_3, GPIO_Mode_In_FL_No_IT);//bin0


  33. GPIO_Init(GPIOB, GPIO_Pin_0, GPIO_Mode_Out_PP_High_Fast);///
  34. GPIO_Init(GPIOB, GPIO_Pin_1, GPIO_Mode_Out_PP_High_Fast);///
  35. GPIO_Init(GPIOB, GPIO_Pin_2, GPIO_Mode_Out_PP_High_Fast);///
  36. GPIO_Init(GPIOB, GPIO_Pin_3, GPIO_Mode_Out_PP_High_Fast);///
  37. GPIO_Init(GPIOB, GPIO_Pin_4, GPIO_Mode_Out_PP_High_Fast);///
  38. GPIO_Init(GPIOB, GPIO_Pin_5, GPIO_Mode_Out_PP_High_Fast);///
  39. GPIO_Init(GPIOB, GPIO_Pin_6, GPIO_Mode_Out_PP_High_Fast);///
  40. GPIO_Init(GPIOB, GPIO_Pin_7, GPIO_Mode_Out_PP_High_Fast);///



  41. GPIO_Init(GPIOC, GPIO_Pin_0, GPIO_Mode_Out_PP_Low_Fast);////SDA
  42. GPIO_Init(GPIOC, GPIO_Pin_1, GPIO_Mode_Out_PP_Low_Fast);////SCL

  43. GPIO_Init(GPIOC, GPIO_Pin_4, GPIO_Mode_Out_PP_Low_Fast);////

  44. GPIO_Init(GPIOC, GPIO_Pin_5, GPIO_Mode_In_FL_No_IT);///bin3
  45. GPIO_Init(GPIOC, GPIO_Pin_6, GPIO_Mode_In_FL_No_IT);///bin2

  46. GPIO_Init(GPIOD, GPIO_Pin_0, GPIO_Mode_In_FL_No_IT);///debug data


  47. #endif

  48. }












  49. void testpin(uint8_t high_low)
  50. {
  51.         if(high_low == 1)
  52.                 GPIO_SetBits(GPIOC,GPIO_Pin_6);
  53.         else
  54.                 GPIO_ResetBits(GPIOC,GPIO_Pin_6);
  55. }



  56. void Init(void)
  57. {
  58.         //IWDG_Config();
  59.          /*High speed internal clock prescaler: 1*/
  60.         CLK_SYSCLKDivConfig(CLK_SYSCLKDiv_1);
  61.         //GPIO_Config();
  62.         GPIO_LowPower_Config();
  63.         //ADC_Periph_Init();///2017-01-04
  64.         
  65. #if 1//def  DEBUG
  66.         ///DEBUGBOARD_Init();///move in GPIO_LowPower_Config();
  67. #endif

  68. }


  69. void Power_Ctrl(uint8_t onoff)
  70. {
  71.         if(onoff == 1)///////更換了電阻為上拉。(更加省電)2016-05-11/////帶mos 管,1
  72.         {
  73.                 GPIO_ResetBits(GPIOB, GPIO_Pin_7);///通電
  74.         }
  75.         else
  76.         {
  77.                 GPIO_SetBits(GPIOB, GPIO_Pin_7);///斷電
  78.         }
  79. }





  80. void uart_put(uint8_t  data)/////new 2016-07-19///////因為中斷問題,80->100
  81. {
  82.         uint8_t i;

  83.         NSS_L;
  84.         SCK_L;

  85.         if((data&0x80)!=0)/////第一個bit data
  86.                 DATA_H;
  87.         else
  88.                 DATA_L;

  89.         delay_us(10);
  90.         SCK_H;

  91.         for(i=1;i<8;i++)
  92.         {
  93.                 delay_us(10);
  94.                 SCK_L;
  95.                 NSS_H;/////////////////完成識別后才拉高。
  96.                
  97.                 if(((data<<i)&0x80)!=0)
  98.                         DATA_H;
  99.                 else
  100.                         DATA_L;
  101.                 delay_us(10);
  102.                 SCK_H;
  103.         }
  104.         delay_us(10);//////每個byte的間隙。

  105. }



  106. void DEBUGBOARD_Init(void)
  107. {
  108.         /* Enable AHB clock to the GPIO domain. */
  109.         //LPC_SYSCON->SYSAHBCLKCTRL |= (1<<6);
  110.         GPIO_Init(GPIOA, GPIO_Pin_2, GPIO_Mode_Out_PP_Low_Fast);//ce
  111.         GPIO_Init(GPIOA, GPIO_Pin_3, GPIO_Mode_Out_PP_Low_Fast);//clk
  112.         GPIO_Init(GPIOD, GPIO_Pin_0, GPIO_Mode_Out_PP_Low_Fast);//data

  113. }









  114. void RTC_Config(uint16_t time)//////////////兩個RTC 會沖突。在需要調(diào)用的時候通過改變CLK源實現(xiàn)重啟。2017-01-06
  115. {
  116.   CLK_PeripheralClockConfig(CLK_Peripheral_RTC, ENABLE);
  117. #if 0//def USE_LSE
  118.   CLK_RTCClockConfig(CLK_RTCCLKSource_LSE, CLK_RTCCLKDiv_1);
  119. #else
  120.   CLK_RTCClockConfig(CLK_RTCCLKSource_LSI, CLK_RTCCLKDiv_1);///////內(nèi)置晶振38K////////2375Hz
  121. #endif
  122.   Calendar_Init();//////LSI 38k set to 1Hz spre

  123.   /* Configures the RTC wakeup timer_step = RTCCLK/16 = LSE/16 = 488.28125 us */

  124.   ///////ck_spre frequency = ck_apre frequency/(PREDIV_S+1)
  125.   ///////ck_apre frequency = fRTCCLK frequency/ (PREDIV_A+1)
  126.   ///////ck_spre frequency = (fRTCCLK frequency/ (PREDIV_A+1))/(PREDIV_S+1)
  127.   ///////RTCCLK frequency = CLK_RTCCLKSource_LSI/CLK_RTCCLKDiv_1
  128.   ///////ck_spre frequency = (38000/(0x7f+1))/(0x00ff+1) == 1s

  129.   RTC_WakeUpClockConfig(RTC_WakeUpClock_CK_SPRE_16bits);////RTC_WakeUpClock_RTCCLK_Div16////---2375/16 = 148.43Hz == 0.0067368s///////////設(shè)置為1秒

  130.   
  131.   //RTC_BypassShadowCmd(DISABLE);/////////////////////move here  2016-05-29

  132.   /* Enable wake up unit Interrupt */
  133.   RTC_ITConfig(RTC_IT_WUT, ENABLE); //開啟中斷
  134.   
  135.   RTC_SetWakeUpCounter(time); //設(shè)置RTC Weakup計算器初值
  136.   
  137.   RTC_WakeUpCmd(ENABLE); //使能自動喚醒

  138. }


  139. void RTC_Config_old(void)
  140. {
  141.   CLK_PeripheralClockConfig(CLK_Peripheral_RTC, ENABLE);
  142. #ifdef USE_LSE
  143.   CLK_RTCClockConfig(CLK_RTCCLKSource_LSE, CLK_RTCCLKDiv_1);
  144. #else
  145.   CLK_RTCClockConfig(CLK_RTCCLKSource_LSI, CLK_RTCCLKDiv_1);
  146. #endif

  147.   /* Configures the RTC wakeup timer_step = RTCCLK/16 = LSE/16 = 488.28125 us */
  148.   RTC_WakeUpClockConfig(RTC_WakeUpClock_RTCCLK_Div16);

  149.   Calendar_Init();
  150.   RTC_BypassShadowCmd(DISABLE);/////////////////////move here  2016-05-29


  151.   /* Enable wake up unit Interrupt */
  152.   RTC_ITConfig(RTC_IT_WUT, ENABLE);
  153.   
  154. }






  155. uint8_t WakeUpModeParser(uint8_t wakeupsource,uint8_t timeout_func,uint8_t up_func,uint8_t down_func)
  156. {
  157. uint8_t sys_mod = SYS_STANDBY_MODE;

  158.         if(wakeupsource == 1)///up
  159.         {
  160.                 sys_mod = up_func;
  161.         }
  162.         else if(wakeupsource == 2)///down
  163.         {
  164.                 sys_mod = down_func;
  165.         }
  166.         else if(wakeupsource == 3)////RTC  wake up
  167.         {
  168.                 sys_mod = timeout_func;
  169.                 #ifdef DEBUG
  170.                 printf_string("RTC wake\n");
  171.                 #endif
  172.         }
  173.         else
  174.         {
  175.                 sys_mod = SYS_STANDBY_MODE;
  176.         }

  177. return sys_mod;
  178.                
  179. }


















  180. void RTC_SetSleepTimer(uint8_t sleeptype,uint16_t counter)
  181. {

  182.         if(counter == DISABLE)
  183.         {
  184.                 RTC_WakeUpCmd(DISABLE);
  185.                 CLK_PeripheralClockConfig(CLK_Peripheral_RTC, DISABLE);
  186.         }
  187.         else
  188.         {
  189.                 /////////定時器打開。///////1秒后喚醒RTC_Config();
  190.                 /* RTC wake-up event every 500 ms (timer_step x (1023 + 1) )*/
  191.                 CLK_PeripheralClockConfig(CLK_Peripheral_RTC,ENABLE);/////////temp  是不是可以移動到初始化的地方?2017-01-06
  192.                 if(sleeptype == TYPE_SHORTTIME)
  193.                 {
  194.                         RTC_WakeUpClockConfig(RTC_WakeUpClock_RTCCLK_Div16);
  195.                         RTC_SetWakeUpCounter((counter<<1));//RTC wakeup timer_step = RTCCLK/16 = LSE/16 = 488.28125 us */////2048->1000ms //////~~=  y=2X
  196.                 }
  197.                 else if(sleeptype == TYPE_LONGTIME)
  198.                 {
  199.                         RTC_WakeUpClockConfig(RTC_WakeUpClock_CK_SPRE_16bits);////RTC_WakeUpClock_RTCCLK_Div16////---2375/16 = 148.43Hz == 0.0067368s///////////設(shè)置為1秒
  200.                         RTC_SetWakeUpCounter(counter);
  201.                 }
  202.                 RTC_WakeUpCmd(ENABLE);
  203.         }


  204.         
  205. }




  206. volatile uint32_t g_timer_count  = 0;


  207. void TIMER_Configuration(void)
  208. {
  209.   TIM4_DeInit();

  210.   /* Enable TIM4 Clock */
  211.   CLK_PeripheralClockConfig(CLK_Peripheral_TIM4, ENABLE);

  212.   /* Time base configuration */
  213.   TIM4_TimeBaseInit(TIM4_Prescaler_16384, 0xf0 );

  214.   /* Enable TIM4 IT UPDATE */
  215.   TIM4_ITConfig(TIM4_IT_Update, ENABLE);

  216.   /* Clear the Flag */
  217.   TIM4_ClearFlag(TIM4_FLAG_Update);

  218.   /* Enable TIM4 */
  219.   TIM4_Cmd(ENABLE);
  220. }





  221. RTC_InitTypeDef   RTC_InitStr;


  222. /**
  223.   * @brief  Calendar Configuration.
  224.   * @param  None
  225.   * @retval None
  226.   */
  227. void Calendar_Init(void)
  228. {
  229.   RTC_InitStr.RTC_HourFormat = RTC_HourFormat_24;
  230.   RTC_InitStr.RTC_AsynchPrediv = 0x7c;
  231.   RTC_InitStr.RTC_SynchPrediv = 0x012F;
  232.   RTC_Init(&RTC_InitStr);
  233. }



  234. ///////////////////////////////////////////////////////////////
  235. #define RELOAD_VALUE   254

  236. /**
  237.   * @brief  Configures the IWDG to generate a Reset if it is not refreshed at the
  238.   *         correct time.
  239.   * @param  None
  240.   * @retval None
  241.   */
  242. void IWDG_Config(void)
  243. {
  244.   /* Enable IWDG (the LSI oscillator will be enabled by hardware) */
  245.   IWDG_Enable();
  246.   
  247.   /* IWDG timeout equal to 214 ms (the timeout may varies due to LSI frequency
  248.      dispersion) */
  249.   /* Enable write access to IWDG_PR and IWDG_RLR registers */
  250.   IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);
  251.   
  252.   /* IWDG configuration: IWDG is clocked by LSI = 38KHz */
  253.   IWDG_SetPrescaler(IWDG_Prescaler_128);////>510ms
  254.   
  255.   /* IWDG timeout equal to 214.7 ms (the timeout may varies due to LSI frequency dispersion) */
  256.   /* IWDG timeout = (RELOAD_VALUE + 1) * Prescaler / LSI
  257.                   = (254 + 1) * 32 / 38 000
  258.                   = 214.7 ms */
  259.   IWDG_SetReload((uint8_t)RELOAD_VALUE);
  260.   
  261.   /* Reload IWDG counter */
  262.   IWDG_ReloadCounter();
  263. }



  264. void IWatchdogReset()
  265. {



  266.   /* IWDG Configuration */
  267.   IWDG_Config();
  268.   
  269.   while(1);///////////等待reset

  270.   #if 0
  271.   while (1)
  272.   {
  273.    /* Reload IWDG counter */
  274.     IWDG_ReloadCounter();  
  275.   }
  276.   #endif


  277. }












  278. void SoftReset_AtFirstTimeStartup(void)
  279. {
  280.         uint32_t startadd = FLASH_DATA_EEPROM_START_PHYSICAL_ADDRESS;// + (uint16_t)FLASH_BLOCK_SIZE;

  281.         if(FLASH_ReadByte(startadd) != 0xfb)/////////如果沒有寫過0xfa,寫入0xfa,并reset
  282.         {
  283.                 /* Define flash programming Time*/
  284.                 FLASH_SetProgrammingTime(FLASH_ProgramTime_Standard);

  285.                 /* Unlock flash data eeprom memory */
  286.                 FLASH_Unlock(FLASH_MemType_Data);
  287.                 /* Wait until Data EEPROM area unlocked flag is set*/
  288.                 while (FLASH_GetFlagStatus(FLASH_FLAG_DUL) == RESET)
  289.                 {}

  290.                 FLASH_ProgramByte(startadd,(uint8_t)(0xfb));///////不用擦,直接寫
  291.                 FLASH_Lock(FLASH_MemType_Data);/////鎖定
  292.                
  293.                 IWatchdogReset();//////通過watchdog 軟reset
  294.         }

  295.         /* Check if the system has resumed from IWDG reset */
  296.         if (RST_GetFlagStatus(RST_FLAG_IWDGF) != RESET)//////////////檢查是否有watchdog reset的flag。去掉
  297.         {
  298.                 /* IWDGF flag set */
  299.                 /* Clear IWDGF Flag */
  300.                 RST_ClearFlag(RST_FLAG_IWDGF);
  301.                 #ifdef DEBUG
  302.                 printf_string("Reset by watchdog\n");
  303.                 #endif
  304.         }
  305.         else
  306.         {
  307.                 /* IWDGF flag is not set */
  308.                 #ifdef DEBUG
  309.                 printf_string("Normal reset\n");
  310.                 #endif
  311.         }





  312. }


  313. ///////////////////////////////////////////////////////////////


  314. void IWDG_test(void)
  315. {


  316.         printf_string("reset\n");
  317.         IWDG_ReloadCounter();

  318. while(1)
  319. {
  320.         testpin(1);
  321.         delay_us(102660);////////max  delay_us(102660) == 840ms
  322.         IWDG_ReloadCounter();
  323.         testpin(0);
  324.         delay_us(102660);
  325.         IWDG_ReloadCounter();
  326. }




  327. }






  328. //**********************************************************




  329. uint8_t SPIx_ReadWriteByte(uint8_t dat)///////////sw spi
  330. {

  331.         uint8_t i = 0;
  332.         uint8_t temp = 0;
  333.         //uint8_t b = 0;

  334.         SCLK_L;//GPIOSetValue(PORT0,6,0);//GPIO_ResetBits(GPIOB, GPIO_Pin_0);    //SCK=0
  335.         delay_us(2);

  336.         for(i=0;i<8;i++)
  337.         {
  338.                 if(dat&0x80)    //1000,0000;輸出1
  339.                 {
  340.                         MOSI_H;//GPIOSetValue(PORT0,9,1);//GPIO_SetBits(GPIOB, GPIO_Pin_1);    //MOSI=1
  341.                 }
  342.                 else
  343.                 {
  344.                         MOSI_L;//GPIOSetValue(PORT0,9,0);//GPIO_ResetBits(GPIOB, GPIO_Pin_1);    //MOSI=0
  345.                 }
  346.                 dat = (dat << 1);    //串行輸出

  347.                 temp = (temp << 1);    //串行輸入

  348.                 //if(LPC_GPIO0->DATA&(1<<8))
  349.                 if((GPIOB->IDR & (uint8_t)GPIO_Pin_2)!=0)
  350.                 {
  351.                         temp++;    //讀入1
  352.                 }
  353.                 delay_us(2);
  354.                 SCLK_H;////GPIO_SetBits(GPIOB, GPIO_Pin_0);    //SCK=1
  355.                 delay_us(2);
  356.                 SCLK_L;////GPIO_ResetBits(GPIOB, GPIO_Pin_0);    //SCK=0

  357.         }

  358.         return temp;    //返回讀入的數(shù)據(jù)

  359. }






  360. void LED_onoff(uint8_t led,uint8_t onoff)
  361. {
  362. uint8_t led_light = 0x00;
  363.         
  364.         switch(led)
  365.         {
  366.         case 0:
  367.                 if(onoff == 1)
  368.                 {
  369.                         led_light |= 0x01;// GPIO_ResetBits(GPIOB, GPIO_Pin_0);///通電
  370.                 }
  371.                 else
  372.                 {
  373.                         led_light &= (~0x01);///斷電
  374.                 }
  375.                 break;

  376.         case 1:
  377.                 if(onoff == 1)
  378.                 {
  379.                         led_light |= 0x02;// GPIO_ResetBits(GPIOB, GPIO_Pin_0);///通電
  380.                 }
  381.                 else
  382.                 {
  383.                         led_light &= (~0x02);///斷電
  384.                 }
  385.                 break;

  386.         case 2:
  387.                 if(onoff == 1)
  388.                 {
  389.                         led_light |= 0x04;// GPIO_ResetBits(GPIOB, GPIO_Pin_0);///通電
  390.                 }
  391.                 else
  392.                 {
  393.                         led_light &= (~0x04);///斷電
  394.                 }
  395.                 break;

  396.         case 3:
  397.                 if(onoff == 1)
  398.                 {
  399.                         led_light |= 0x08;// GPIO_ResetBits(GPIOB, GPIO_Pin_0);///通電
  400.                 }
  401.                 else
  402.                 {
  403.                         led_light &= (~0x08);///斷電
  404.                 }
  405.                 break;

  406.         case 4:
  407.                 if(onoff == 1)
  408.                 {
  409.                         led_light |= 0x10;// GPIO_ResetBits(GPIOB, GPIO_Pin_0);///通電
  410.                 }
  411.                 else
  412.                 {
  413.                         led_light &= (~0x10);///斷電
  414.                 }
  415.                 break;

  416.         case 5:
  417.                 if(onoff == 1)
  418.                 {
  419.                         led_light |= 0x20;// GPIO_ResetBits(GPIOB, GPIO_Pin_0);///通電
  420.                 }
  421.                 else
  422.                 {
  423.                         led_light &= (~0x20);///斷電
  424.                 }
  425.                 break;

  426.         case 6:
  427.                 if(onoff == 1)
  428.                 {
  429.                         led_light |= 0x40;// GPIO_ResetBits(GPIOB, GPIO_Pin_0);///通電
  430.                 }
  431.                 else
  432.                 {
  433.                         led_light &= (~0x40);///斷電
  434.                 }
  435.                 break;

  436.         case 7:
  437.                 if(onoff == 1)
  438.                 {
  439.                         led_light |= 0x80;// GPIO_ResetBits(GPIOB, GPIO_Pin_0);///通電
  440.                 }
  441.                 else
  442.                 {
  443.                         led_light &= (~0x80);///斷電
  444.                 }
  445.                 break;

  446.         case 8:
  447.                 if(onoff == 1)
  448.                 {
  449.                         led_light |= 0xff;// GPIO_ResetBits(GPIOB, GPIO_Pin_0);///通電
  450.                 }
  451.                 else
  452.                 {
  453.                         led_light &= (~0xff);///斷電
  454.                 }
  455.                 break;


  456.         default:
  457.                 break;
  458.         
  459.         }


  460. GPIOB->ODR = (~led_light);////低電平為開2017-03-02


  461. }


  462. //**********************************************************



  463. uint8_t ParallelPort_in(void)
  464. {
  465. uint8_t value = 0x00;

  466.         if ((GPIOA->IDR & (uint8_t)GPIO_Pin_3)!=0)//(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_3));///0
  467.         {
  468.                 value|= 0x01;
  469.         }

  470.         if((GPIOA->IDR & (uint8_t)GPIO_Pin_2)!=0)//(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_2));///1
  471.         {
  472.                 value|= 0x02;
  473.         }

  474.         if((GPIOC->IDR & (uint8_t)GPIO_Pin_6)!=0)//(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_6));///2
  475.         {
  476.                 value|= 0x04;
  477.         }

  478.         if((GPIOC->IDR & (uint8_t)GPIO_Pin_5)!=0)//(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_5));///3
  479.         {
  480.                 value|= 0x08;
  481. ……………………

  482. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼


所有資料51hei提供下載:
818A的八位電容觸摸按鍵方案_PDF_C97370_2017-03-10.7z (13.16 MB, 下載次數(shù): 238)


評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏7 分享淘帖 頂2 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:406596 發(fā)表于 2018-10-12 10:53 | 只看該作者
很有用的資料,謝謝分享,非常感謝,正需要。
回復(fù)

使用道具 舉報

板凳
ID:417411 發(fā)表于 2018-10-29 17:58 | 只看該作者
執(zhí)迷不悟55 發(fā)表于 2018-10-12 10:53
很有用的資料,謝謝分享,非常感謝,正需要。

可以發(fā)一份嗎,沒積分,謝謝。1311257161@qq.com
回復(fù)

使用道具 舉報

地板
ID:434737 發(fā)表于 2018-11-28 09:44 | 只看該作者
不錯的資料
回復(fù)

使用道具 舉報

5#
ID:183372 發(fā)表于 2019-4-9 21:00 | 只看該作者
支持。。。。。。
回復(fù)

使用道具 舉報

6#
ID:223337 發(fā)表于 2019-9-29 10:55 | 只看該作者
謝謝您的分享這段時間正在學(xué)習(xí)單片機電容觸模
回復(fù)

使用道具 舉報

7#
ID:630749 發(fā)表于 2019-10-27 02:32 | 只看該作者
大哥能不能幫給一個,點動6位觸摸 高電平輸出的程序
回復(fù)

使用道具 舉報

8#
ID:529463 發(fā)表于 2019-12-17 00:11 | 只看該作者
支持好的資料
回復(fù)

使用道具 舉報

9#
ID:387478 發(fā)表于 2020-6-14 14:57 | 只看該作者
好想學(xué)習(xí)學(xué)習(xí)
回復(fù)

使用道具 舉報

10#
ID:721377 發(fā)表于 2020-10-30 17:54 | 只看該作者
很有用的資料,謝謝分享,非常感謝,
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧产日产国产精品国产 | 草久久久| 国产精品一区二区三 | 国产一区二区三区久久久久久久久 | 亚洲欧洲成人av每日更新 | 国产99久久精品一区二区永久免费 | 韩国精品在线观看 | 毛片免费在线 | 久久99国产精品久久99果冻传媒 | 国产免费观看久久黄av片涩av | 国产伦精品一区二区三区照片91 | 国产一区二区三区色淫影院 | 日韩欧美国产一区二区三区 | 日韩在线观看中文字幕 | 国产激情一区二区三区 | 成人免费一级视频 | 网站黄色av | 九七午夜剧场福利写真 | 成人av在线播放 | 天天插天天舔 | 欧美性久久 | 丁香婷婷久久久综合精品国产 | 欧美一级在线观看 | 天堂综合网久久 | 成人精品一区二区户外勾搭野战 | 精品九九 | 97超碰人人| 国产黄色小视频在线观看 | 美女视频三区 | 久久久青草婷婷精品综合日韩 | 国产精品99久久免费观看 | 亚洲一区二区在线视频 | 欧美精品v国产精品v日韩精品 | 亚洲精品99999 | 在线欧美亚洲 | 一区二区三区在线 | 亚洲国产一区在线 | www.久 | 精品中文字幕一区二区 | 在线久草 | 中文字幕亚洲视频 |