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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2736|回復: 2
打印 上一主題 下一主題
收起左側

STM32洗衣機模擬程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:654171 發表于 2019-12-2 15:39 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
模擬洗衣機洗滌過程

單片機源程序如下:
  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時鐘
  13. #define LEDn                            4                       //STM32開發板LED數量
  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--); //循環
  31. }
  32. void STM_EVAL_KEY1Init(void)
  33. {
  34.   /*Structure declaration*/
  35.   GPIO_InitTypeDef GPIO_InitStructure;                    //GPIO結構體聲明
  36.   EXTI_InitTypeDef EXTI_InitStructure;                    //外部中斷控制結構體聲明
  37.   NVIC_InitTypeDef NVIC_InitStructure;                    //中斷向量配置結構體聲明

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

  41.   /* Configure KEY pin as input */
  42.         GPIO_InitStructure.GPIO_Pin = KEY1_PIN;                 //設置按鍵引腳
  43.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;            //設置GPIO模式為輸入
  44.   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;        //設置GPIO三態為無
  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);      //按鍵外部中斷線配置

  49.         /* Configure KEY EXTI line */
  50.         EXTI_InitStructure.EXTI_Line = KEY1_EXTI_LINE;                           //設置按鍵的外部中斷線
  51.         EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;                      //設置按鍵為外部中斷
  52.         EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;                   //設置觸發模式為上升沿觸發
  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;                     //設置按鍵中斷控制通道
  58.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;                //設置先占優先級
  59.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;                       //設置響應優先級
  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結構體聲明
  67.   EXTI_InitTypeDef EXTI_InitStructure;                    //外部中斷控制結構體聲明
  68.   NVIC_InitTypeDef NVIC_InitStructure;                    //中斷向量配置結構體聲明

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

  72.   /* Configure KEY pin as input */
  73.         GPIO_InitStructure.GPIO_Pin = KEY2_PIN;                  //設置按鍵引腳
  74.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;             //設置GPIO模式為輸入
  75.   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;         //設置GPIO三態為無
  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);      //按鍵外部中斷線配置

  80.         /* Configure KEY EXTI line */
  81.         EXTI_InitStructure.EXTI_Line = KEY2_EXTI_LINE;                           //設置按鍵的外部中斷線
  82.         EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;                      //設置按鍵為外部中斷
  83.         EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;                   //設置觸發模式為上升沿觸發
  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;                     //設置按鍵中斷控制通道
  88.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;                //設置先占優先級
  89.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;                       //設置響應優先級
  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結構體聲明
  97.   EXTI_InitTypeDef EXTI_InitStructure;                    //外部中斷控制結構體聲明
  98.   NVIC_InitTypeDef NVIC_InitStructure;                    //中斷向量配置結構體聲明

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

  102.   /* Configure KEY pin as input */
  103.         GPIO_InitStructure.GPIO_Pin = KEY3_PIN;                  //設置按鍵引腳
  104.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;             //設置GPIO模式為輸入
  105.   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;         //設置GPIO三態為無
  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);      //按鍵外部中斷線配置

  110.         /* Configure KEY EXTI line */
  111.         EXTI_InitStructure.EXTI_Line = KEY3_EXTI_LINE;                           //設置按鍵的外部中斷線
  112.         EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;                      //設置按鍵為外部中斷
  113.         EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;                   //設置觸發模式為上升沿觸發
  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;                     //設置按鍵中斷控制通道
  118.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;                //設置先占優先級
  119.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;                       //設置響應優先級
  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結構體聲明
  127.   EXTI_InitTypeDef EXTI_InitStructure;                    //外部中斷控制結構體聲明
  128.   NVIC_InitTypeDef NVIC_InitStructure;                    //中斷向量配置結構體聲明

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

  132.   /* Configure KEY pin as input */
  133.         GPIO_InitStructure.GPIO_Pin = KEY4_PIN;                  //設置按鍵引腳
  134.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;             //設置GPIO模式為輸入
  135.   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;         //設置GPIO三態為無
  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);      //按鍵外部中斷線配置

  141.         /* Configure KEY EXTI line */
  142.         EXTI_InitStructure.EXTI_Line = KEY4_EXTI_LINE;                           //設置按鍵的外部中斷線
  143.         EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;                      //設置按鍵為外部中斷
  144.         EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;                   //設置觸發模式為上升沿觸發
  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;                     //設置按鍵中斷控制通道
  149.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;                //設置先占優先級
  150.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;                       //設置響應優先級
  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狀態位
  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();               //點亮LED
  169. }

  170. /*******************************************************************************
  171. * Function Name  : BEEP_STATURE(int s)
  172. * Description    : 蜂鳴器控制
  173. * Input          : s : 蜂鳴器狀態位
  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 )     //判斷中斷是否被觸發
  196.   {        
  197.                 if ( STM_EVAL_KEYGetState(KEY1)==1 )               //讀取按鍵狀態
  198.                 {
  199.                 if(lx<5)
  200.                         lx++;
  201.                 else
  202.                         lx=1;
  203.                         EXTI_ClearITPendingBit(KEY1_EXTI_LINE);                       //中斷線狀態清零        
  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 )     //判斷中斷是否被觸發
  217.   {        
  218.                 if ( STM_EVAL_KEYGetState(KEY2)==1 )               //讀取按鍵狀態
  219.                 {
  220.                         if(lx>0)
  221.                                 lx--;
  222.                         else
  223.                                 lx=4;
  224.                         EXTI_ClearITPendingBit(KEY2_EXTI_LINE);                       //中斷線狀態清零
  225.                 }
  226.         }


  227. }
  228. void EXTI0_IRQHandler(void)
  229. {
  230.         if ( EXTI_GetITStatus(KEY4_EXTI_LINE) != RESET )     //判斷中斷是否被觸發
  231.   {        
  232.                 Delay(0x5000);                                     //延時
  233.                 if ( STM_EVAL_KEYGetState(KEY4)==1 )               //讀取按鍵狀態
  234.                 {
  235.                         STM_EVAL_BeepOn();//打開蜂鳴器
  236.             Delay_ms(350000000);
  237.       STM_EVAL_BeepOff();   //關閉蜂鳴器
  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();//打開蜂鳴器
  248.             Delay_ms(350000000);
  249.       STM_EVAL_BeepOff();   //關閉蜂鳴器
  250.             Delay_ms(350000000);
  251.                         STM_EVAL_BeepOn();//打開蜂鳴器
  252.             Delay_ms(350000000);
  253.       STM_EVAL_BeepOff();   //關閉蜂鳴器
  254.             Delay_ms(350000000);
  255.                         STM_EVAL_BeepOn();//打開蜂鳴器
  256.             Delay_ms(350000000);
  257.       STM_EVAL_BeepOff();   //關閉蜂鳴器
  258.             Delay_ms(350000000);
  259.                         EXTI_ClearITPendingBit(KEY4_EXTI_LINE);                       //中斷線狀態清零        
  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; //設置LED控制引腳
  283.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; //設置引腳為輸出
  284.         GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //設置引腳為推挽模式
  285.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; //設置引腳最大速率為100MHz
  286.         GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; //設置引腳三態類型為無   

  287.         GPIO_Init(GPIO_LED, &GPIO_InitStructure);  //LED燈相關的GPIO口初始化
  288.         GPIO_SetBits(GPIO_LED,LED1_PIN|LED2_PIN|LED3_PIN|LED4_PIN);//關閉所有的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
復制代碼

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

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲人精品午夜 | 欧美日韩在线观看一区二区三区 | 91视频国产一区 | 国产在线观看一区 | 中文字幕在线免费观看 | 国产一区二区三区 | 色爱综合网 | 九九热这里只有精品6 | 国产精品我不卡 | 欧美一级在线 | 午夜小电影 | 精品美女久久久久久免费 | 视频一区在线观看 | 欧美激情免费在线 | 综合精品 | 香蕉久久久 | 欧美一区二区三区在线 | 日韩视频免费在线 | 国产精品久久久久久久免费大片 | 91免费在线视频 | 国产成人综合一区二区三区 | 久久精品国产一区二区电影 | 黄色网址免费看 | 丁香久久 | 久久国产精品一区二区三区 | 天天操网 | 在线a视频 | 国内精品久久久久久久影视简单 | 久久网一区二区 | 欧美视频精品 | 午夜视频一区二区三区 | 亚洲 一区 | 午夜免费视频 | 在线伊人网| 三级视频在线观看 | 麻豆久久久久久久 | 久久小视频 | 国产综合视频 | 日本久久久影视 | 日本一区二区在线视频 | 91精品国产91久久久久久最新 |