找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

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

STM32洗衣機(jī)模擬程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:654171 發(fā)表于 2019-12-2 15:39 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
模擬洗衣機(jī)洗滌過(guò)程

單片機(jī)源程序如下:
  1. #include "stm32f2xx.h"
  2. #include "stm322xg_eval.h"
  3. #include "stm32f2xx_exti.h"
  4. #include "stm32f2xx_gpio.h"
  5. #include "stm322xg_eval_lcd.h"
  6. #include "stm32f2xx_it.h"
  7. #include "misc.h"
  8. #include "Printf.h"
  9. #include <stdio.h>
  10. #include "stm32f2xx_rcc.h"
  11. #include "LedSegment.h"

  12. #define RCC_GPIO_LED                    RCC_AHB1Periph_GPIOF    //LED使用的GPIO時(shí)鐘
  13. #define LEDn                            4                       //STM32開(kāi)發(fā)板LED數(shù)量
  14. #define GPIO_LED                        GPIOF                   //LED燈使用的GPIO組

  15. #define LED1_PIN                         GPIO_Pin_7             //LED1使用的GPIO管腳
  16. #define LED2_PIN                         GPIO_Pin_8                                      //LED2使用的GPIO管腳
  17. #define LED3_PIN                         GPIO_Pin_9                                //LED3使用的GPIO管腳
  18. #define LED4_PIN                         GPIO_Pin_10                                    //LED4使用的GPIO管腳

  19. GPIO_InitTypeDef GPIO_InitStructure;

  20. void Turn_On_LED(u8 LED_NUM);
  21. void Delay(uint32_t nCount);

  22. int i=0,j=0;
  23. int flag=0;
  24. u8 lx=0;
  25. u8 ly=0;
  26. u8 time=0;
  27. u32 unm=0;

  28. void Delay(uint32_t nCount)
  29. {
  30.   for(; nCount != 0; nCount--); //循環(huán)
  31. }
  32. void STM_EVAL_KEY1Init(void)
  33. {
  34.   /*Structure declaration*/
  35.   GPIO_InitTypeDef GPIO_InitStructure;                    //GPIO結(jié)構(gòu)體聲明
  36.   EXTI_InitTypeDef EXTI_InitStructure;                    //外部中斷控制結(jié)構(gòu)體聲明
  37.   NVIC_InitTypeDef NVIC_InitStructure;                    //中斷向量配置結(jié)構(gòu)體聲明

  38.   /* Enable the KEY Clock */
  39.   RCC_AHB1PeriphClockCmd(KEY1_GPIO_CLK, ENABLE);           //使能按鍵時(shí)鐘
  40.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);   //使能APB2外設(shè)時(shí)鐘

  41.   /* Configure KEY pin as input */
  42.         GPIO_InitStructure.GPIO_Pin = KEY1_PIN;                 //設(shè)置按鍵引腳
  43.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;            //設(shè)置GPIO模式為輸入
  44.   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;        //設(shè)置GPIO三態(tài)為無(wú)
  45.         
  46.   GPIO_Init(KEY1_GPIO_PORT, &GPIO_InitStructure);         //按鍵初始化

  47.         /* Connect KEY EXTI Line to KEY GPIO Pin */
  48.         SYSCFG_EXTILineConfig(KEY1_EXTI_PORT_SOURCE, KEY1_EXTI_PIN_SOURCE);      //按鍵外部中斷線(xiàn)配置

  49.         /* Configure KEY EXTI line */
  50.         EXTI_InitStructure.EXTI_Line = KEY1_EXTI_LINE;                           //設(shè)置按鍵的外部中斷線(xiàn)
  51.         EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;                      //設(shè)置按鍵為外部中斷
  52.         EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;                   //設(shè)置觸發(fā)模式為上升沿觸發(fā)
  53.         EXTI_InitStructure.EXTI_LineCmd = ENABLE;                                //使能中斷
  54.         EXTI_Init(&EXTI_InitStructure);                                          //外部中斷初始化
  55.   
  56.         /* Enable and set KEY EXTI Interrupt to the lowest priority */
  57.         NVIC_InitStructure.NVIC_IRQChannel = KEY1_EXTI_IRQn;                     //設(shè)置按鍵中斷控制通道
  58.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;                //設(shè)置先占優(yōu)先級(jí)
  59.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;                       //設(shè)置響應(yīng)優(yōu)先級(jí)
  60.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                          //使能中斷向量

  61.         NVIC_Init(&NVIC_InitStructure);                                          //中斷向量初始化
  62. }

  63. void STM_EVAL_KEY2Init(void)
  64. {
  65.   /*Structure declaration*/
  66.   GPIO_InitTypeDef GPIO_InitStructure;                    //GPIO結(jié)構(gòu)體聲明
  67.   EXTI_InitTypeDef EXTI_InitStructure;                    //外部中斷控制結(jié)構(gòu)體聲明
  68.   NVIC_InitTypeDef NVIC_InitStructure;                    //中斷向量配置結(jié)構(gòu)體聲明

  69.   /* Enable the KEY Clock */
  70.   RCC_AHB1PeriphClockCmd(KEY2_GPIO_CLK, ENABLE);           //使能按鍵時(shí)鐘
  71.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);   //使能APB2外設(shè)時(shí)鐘

  72.   /* Configure KEY pin as input */
  73.         GPIO_InitStructure.GPIO_Pin = KEY2_PIN;                  //設(shè)置按鍵引腳
  74.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;             //設(shè)置GPIO模式為輸入
  75.   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;         //設(shè)置GPIO三態(tài)為無(wú)
  76.         
  77.   GPIO_Init(KEY2_GPIO_PORT, &GPIO_InitStructure);          //按鍵初始化

  78.         /* Connect KEY EXTI Line to KEY GPIO Pin */
  79.         SYSCFG_EXTILineConfig(KEY2_EXTI_PORT_SOURCE, KEY2_EXTI_PIN_SOURCE);      //按鍵外部中斷線(xiàn)配置

  80.         /* Configure KEY EXTI line */
  81.         EXTI_InitStructure.EXTI_Line = KEY2_EXTI_LINE;                           //設(shè)置按鍵的外部中斷線(xiàn)
  82.         EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;                      //設(shè)置按鍵為外部中斷
  83.         EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;                   //設(shè)置觸發(fā)模式為上升沿觸發(fā)
  84.         EXTI_InitStructure.EXTI_LineCmd = ENABLE;                                //使能中斷
  85.         EXTI_Init(&EXTI_InitStructure);                                          //外部中斷初始化

  86.         /* Enable and set KEY EXTI Interrupt to the lowest priority */
  87.         NVIC_InitStructure.NVIC_IRQChannel = KEY2_EXTI_IRQn;                     //設(shè)置按鍵中斷控制通道
  88.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;                //設(shè)置先占優(yōu)先級(jí)
  89.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;                       //設(shè)置響應(yīng)優(yōu)先級(jí)
  90.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                          //使能中斷向量

  91.         NVIC_Init(&NVIC_InitStructure);                                          //中斷向量初始化
  92. }


  93. void STM_EVAL_KEY3Init(void)
  94. {
  95.   /*Structure declaration*/
  96.   GPIO_InitTypeDef GPIO_InitStructure;                    //GPIO結(jié)構(gòu)體聲明
  97.   EXTI_InitTypeDef EXTI_InitStructure;                    //外部中斷控制結(jié)構(gòu)體聲明
  98.   NVIC_InitTypeDef NVIC_InitStructure;                    //中斷向量配置結(jié)構(gòu)體聲明

  99.   /* Enable the KEY Clock */
  100.   RCC_AHB1PeriphClockCmd(KEY3_GPIO_CLK, ENABLE);           //使能按鍵時(shí)鐘
  101.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);   //使能APB2外設(shè)時(shí)鐘

  102.   /* Configure KEY pin as input */
  103.         GPIO_InitStructure.GPIO_Pin = KEY3_PIN;                  //設(shè)置按鍵引腳
  104.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;             //設(shè)置GPIO模式為輸入
  105.   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;         //設(shè)置GPIO三態(tài)為無(wú)
  106.         
  107.   GPIO_Init(KEY3_GPIO_PORT, &GPIO_InitStructure);          //按鍵初始化

  108.         /* Connect KEY EXTI Line to KEY GPIO Pin */
  109.         SYSCFG_EXTILineConfig(KEY3_EXTI_PORT_SOURCE, KEY3_EXTI_PIN_SOURCE);      //按鍵外部中斷線(xiàn)配置

  110.         /* Configure KEY EXTI line */
  111.         EXTI_InitStructure.EXTI_Line = KEY3_EXTI_LINE;                           //設(shè)置按鍵的外部中斷線(xiàn)
  112.         EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;                      //設(shè)置按鍵為外部中斷
  113.         EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;                   //設(shè)置觸發(fā)模式為上升沿觸發(fā)
  114.         EXTI_InitStructure.EXTI_LineCmd = ENABLE;                                //使能中斷
  115.         EXTI_Init(&EXTI_InitStructure);                                          //外部中斷初始化

  116.         /* Enable and set KEY EXTI Interrupt to the lowest priority */
  117.         NVIC_InitStructure.NVIC_IRQChannel = KEY3_EXTI_IRQn;                     //設(shè)置按鍵中斷控制通道
  118.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;                //設(shè)置先占優(yōu)先級(jí)
  119.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;                       //設(shè)置響應(yīng)優(yōu)先級(jí)
  120.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                          //使能中斷向量

  121.         NVIC_Init(&NVIC_InitStructure);                                          //中斷向量初始化
  122. }
  123. void STM_EVAL_KEY4Init(void)
  124. {
  125.   /*Structure declaration*/
  126.   GPIO_InitTypeDef GPIO_InitStructure;                    //GPIO結(jié)構(gòu)體聲明
  127.   EXTI_InitTypeDef EXTI_InitStructure;                    //外部中斷控制結(jié)構(gòu)體聲明
  128.   NVIC_InitTypeDef NVIC_InitStructure;                    //中斷向量配置結(jié)構(gòu)體聲明

  129.   /* Enable the KEY Clock */
  130.   RCC_AHB1PeriphClockCmd(KEY4_GPIO_CLK, ENABLE);           //使能按鍵時(shí)鐘
  131.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);   //使能APB2外設(shè)時(shí)鐘

  132.   /* Configure KEY pin as input */
  133.         GPIO_InitStructure.GPIO_Pin = KEY4_PIN;                  //設(shè)置按鍵引腳
  134.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;             //設(shè)置GPIO模式為輸入
  135.   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;         //設(shè)置GPIO三態(tài)為無(wú)
  136.         
  137.   GPIO_Init(KEY4_GPIO_PORT, &GPIO_InitStructure);          //按鍵初始化
  138.         
  139.         /* Connect KEY EXTI Line to KEY GPIO Pin */
  140.         SYSCFG_EXTILineConfig(KEY4_EXTI_PORT_SOURCE, KEY4_EXTI_PIN_SOURCE);      //按鍵外部中斷線(xiàn)配置

  141.         /* Configure KEY EXTI line */
  142.         EXTI_InitStructure.EXTI_Line = KEY4_EXTI_LINE;                           //設(shè)置按鍵的外部中斷線(xiàn)
  143.         EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;                      //設(shè)置按鍵為外部中斷
  144.         EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;                   //設(shè)置觸發(fā)模式為上升沿觸發(fā)
  145.         EXTI_InitStructure.EXTI_LineCmd = ENABLE;                                //使能中斷
  146.         EXTI_Init(&EXTI_InitStructure);                                          //外部中斷初始化

  147.         /* Enable and set KEY EXTI Interrupt to the lowest priority */
  148.         NVIC_InitStructure.NVIC_IRQChannel = KEY4_EXTI_IRQn;                     //設(shè)置按鍵中斷控制通道
  149.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;                //設(shè)置先占優(yōu)先級(jí)
  150.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;                       //設(shè)置響應(yīng)優(yōu)先級(jí)
  151.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                          //使能中斷向量

  152.         NVIC_Init(&NVIC_InitStructure);                                          //中斷向量初始化
  153. }
  154. /*******************************************************************************
  155. * Function Name  : LED_STATURE(int s)
  156. * Description    : LED控制
  157. * Input          : s : LED狀態(tài)位
  158. * Output         : None
  159. * Return         : None
  160. *******************************************************************************/
  161. void LED_STATURE(int s)
  162. {
  163.   if(s==0)     
  164.         {
  165.                 STM_EVAL_LEDOffAll();                     //熄滅LED
  166. }
  167.         else
  168.     STM_EVAL_LEDOnAll();               //點(diǎn)亮LED
  169. }

  170. /*******************************************************************************
  171. * Function Name  : BEEP_STATURE(int s)
  172. * Description    : 蜂鳴器控制
  173. * Input          : s : 蜂鳴器狀態(tài)位
  174. * Output         : None
  175. * Return         : None
  176. *******************************************************************************/
  177. void BEEP_STATURE(int s)
  178. {
  179.   if(s==0)     
  180.         {
  181.                 STM_EVAL_BeepOff();              //蜂鳴器不響
  182.   }
  183.         else
  184.                 STM_EVAL_BeepOn();               //蜂鳴器響
  185. }

  186. /*******************************************************************************
  187. * Function Name  : EXTI9_5_IRQHandler(void)
  188. * Description    : 外部中斷處理
  189. * Input          : NONE
  190. * Output         : None
  191. * Return         : None
  192. *******************************************************************************/
  193. void EXTI9_5_IRQHandler(void)
  194. {
  195.         if ( EXTI_GetITStatus(KEY1_EXTI_LINE) != RESET )     //判斷中斷是否被觸發(fā)
  196.   {        
  197.                 if ( STM_EVAL_KEYGetState(KEY1)==1 )               //讀取按鍵狀態(tài)
  198.                 {
  199.                 if(lx<5)
  200.                         lx++;
  201.                 else
  202.                         lx=1;
  203.                         EXTI_ClearITPendingBit(KEY1_EXTI_LINE);                       //中斷線(xiàn)狀態(tài)清零        
  204.           }
  205.         }
  206. }
  207. /*******************************************************************************
  208. * Function Name  : EXTI15_10_IRQHandler(void)
  209. * Description    : 外部中斷處理
  210. * Input          : NONE
  211. * Output         : None
  212. * Return         : None
  213. *******************************************************************************/
  214. void EXTI15_10_IRQHandler(void)
  215. {
  216.         if ( EXTI_GetITStatus(KEY2_EXTI_LINE) != RESET )     //判斷中斷是否被觸發(fā)
  217.   {        
  218.                 if ( STM_EVAL_KEYGetState(KEY2)==1 )               //讀取按鍵狀態(tài)
  219.                 {
  220.                         if(lx>0)
  221.                                 lx--;
  222.                         else
  223.                                 lx=4;
  224.                         EXTI_ClearITPendingBit(KEY2_EXTI_LINE);                       //中斷線(xiàn)狀態(tài)清零
  225.                 }
  226.         }


  227. }
  228. void EXTI0_IRQHandler(void)
  229. {
  230.         if ( EXTI_GetITStatus(KEY4_EXTI_LINE) != RESET )     //判斷中斷是否被觸發(fā)
  231.   {        
  232.                 Delay(0x5000);                                     //延時(shí)
  233.                 if ( STM_EVAL_KEYGetState(KEY4)==1 )               //讀取按鍵狀態(tài)
  234.                 {
  235.                         STM_EVAL_BeepOn();//打開(kāi)蜂鳴器
  236.             Delay_ms(350000000);
  237.       STM_EVAL_BeepOff();   //關(guān)閉蜂鳴器
  238.             Delay_ms(350000000);
  239.                         time=lx*ly;
  240.                         
  241.                         for(i=lx*3;i>0;i--)
  242.                         {
  243.                                 for(j=ly;j>0;j--)
  244.                                 {
  245.                                         Delay_ms(1000);
  246.                                 }
  247.                         STM_EVAL_BeepOn();//打開(kāi)蜂鳴器
  248.             Delay_ms(350000000);
  249.       STM_EVAL_BeepOff();   //關(guān)閉蜂鳴器
  250.             Delay_ms(350000000);
  251.                         STM_EVAL_BeepOn();//打開(kāi)蜂鳴器
  252.             Delay_ms(350000000);
  253.       STM_EVAL_BeepOff();   //關(guān)閉蜂鳴器
  254.             Delay_ms(350000000);
  255.                         STM_EVAL_BeepOn();//打開(kāi)蜂鳴器
  256.             Delay_ms(350000000);
  257.       STM_EVAL_BeepOff();   //關(guān)閉蜂鳴器
  258.             Delay_ms(350000000);
  259.                         EXTI_ClearITPendingBit(KEY4_EXTI_LINE);                       //中斷線(xiàn)狀態(tài)清零        
  260.                         }
  261.                 }
  262.         }
  263. }
  264. int main(void)
  265. {
  266.   uint8_t x, y;
  267.         char disp_str[20];
  268.   
  269.         STM_EVAL_BeepInit(); //蜂鳴器初始化
  270.         
  271.         /* 串口初始化 */
  272.   Printf_Init();

  273.         /* 液晶屏初始化 */
  274.         STM322xG_LCD_Init();
  275.         LCD_Clear(Blue);
  276.         LCD_SetColors(White, Blue);
  277.         LCD_DisplayStringLine(LCD_LINE_0, "  STM32-LedSegment");
  278.         LCD_DisplayWelcomeStr(LCD_LINE_9);
  279.         
  280.         RCC_AHB1PeriphClockCmd(RCC_GPIO_LED, ENABLE);


  281.         /*配置LED燈使用的GPIO管腳模式*/
  282.         GPIO_InitStructure.GPIO_Pin = LED1_PIN|LED2_PIN|LED3_PIN|LED4_PIN; //設(shè)置LED控制引腳
  283.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; //設(shè)置引腳為輸出
  284.         GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //設(shè)置引腳為推挽模式
  285.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; //設(shè)置引腳最大速率為100MHz
  286.         GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; //設(shè)置引腳三態(tài)類(lèi)型為無(wú)   

  287.         GPIO_Init(GPIO_LED, &GPIO_InitStructure);  //LED燈相關(guān)的GPIO口初始化
  288.         GPIO_SetBits(GPIO_LED,LED1_PIN|LED2_PIN|LED3_PIN|LED4_PIN);//關(guān)閉所有的LED指示燈
  289.   //SPI1初始化
  290.   SPI1_INIT();
  291.   

  292.   /* Initialize KEYS available on STM32F2XX_EVAL board ************************/
  293.   STM_EVAL_LEDInitAll();                  //LED初始化
  294.         STM_EVAL_LEDOffAll();                   //熄滅LED1~LED4
  295.         
  296.         STM_EVAL_BeepInit();
  297.         STM_EVAL_BeepOff();
  298.         
  299.         /*按鍵KEY1~KEY4初始化*/
  300.         STM_EVAL_KEY1Init();
  301.         STM_EVAL_KEY2Init();
  302.         STM_EVAL_KEY3Init();
  303.         STM_EVAL_KEY4Init();
  304.         
  305.   while(1)
  306.         {
  307.                         switch(lx)
  308.                         {
  309.                                 case 1:
  310.                                  GPIO_ResetBits(GPIO_LED,LED1_PIN);
  311.                                  GPIO_SetBits(GPIO_LED,LED2_PIN|LED3_PIN|LED4_PIN);
  312.                                  break;
  313.                                 case 2:
  314.                                  GPIO_ResetBits(GPIO_LED,LED2_PIN);
  315.                                  GPIO_SetBits(GPIO_LED,LED1_PIN|LED3_PIN|LED4_PIN);
  316.                                  break;
  317.                           case 3:
  318.                                  GPIO_ResetBits(GPIO_LED,LED3_PIN);
  319.                                  GPIO_SetBits(GPIO_LED,LED1_PIN|LED2_PIN|LED4_PIN);
  320.                                  break;
  321.                                 case 4:
  322.                                  GPIO_ResetBits(GPIO_LED,LED4_PIN);
  323.                                  GPIO_SetBits(GPIO_LED,LED1_PIN|LED2_PIN|LED3_PIN);
  324.                                  break;
  325.                   }
  326.          
  327. }
  328. }

  329. #ifdef  USE_FULL_ASSERT
  330. void assert_failed(uint8_t* file, uint32_t line)
  331. {
  332.   while (1)
  333.   {
  334.   }
  335. }
  336. #endif
復(fù)制代碼

Keil代碼下載:
LedSegment.7z (53.09 KB, 下載次數(shù): 27)

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

使用道具 舉報(bào)

沙發(fā)
ID:1 發(fā)表于 2019-12-4 17:31 | 只看該作者
本帖需要重新編輯補(bǔ)全電路原理圖,源碼,詳細(xì)說(shuō)明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
回復(fù)

使用道具 舉報(bào)

板凳
ID:1086433 發(fā)表于 2023-6-29 01:41 | 只看該作者
想要看看原理圖長(zhǎng)什么樣子
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表