找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2030|回复: 0
收起左侧

十字路口路灯模拟stm32源码

[复制链接]
ID:301517 发表于 2018-4-24 18:59 | 显示全部楼层 |阅读模式
十字路口路灯模拟

stm32单片机源程序如下:
  1. /* Includes ------------------------------------------------------------------*/
  2. #include "stm32f10x.h"

  3. GPIO_InitTypeDef GPIO_InitStructure;                                                                  

  4. #define KEY_0         GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_0)

  5. #define KEY_1         GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1)  

  6. #define KEY_2         GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_2)

  7. #define LED_EW_R_ON         GPIO_SetBits(GPIOA, GPIO_Pin_3);  
  8. #define LED_EW_R_OFF         GPIO_ResetBits(GPIOA, GPIO_Pin_3);

  9. #define LED_EW_G_ON         GPIO_SetBits(GPIOA, GPIO_Pin_4);  
  10. #define LED_EW_G_OFF        GPIO_ResetBits(GPIOA, GPIO_Pin_4);

  11. #define LED_EW_Y_ON         GPIO_SetBits(GPIOA, GPIO_Pin_5);  
  12. #define LED_EW_Y_OFF         GPIO_ResetBits(GPIOA, GPIO_Pin_5);  

  13. #define LED_NS_R_ON         GPIO_SetBits(GPIOC, GPIO_Pin_6);  
  14. #define LED_NS_R_OFF         GPIO_ResetBits(GPIOC, GPIO_Pin_6);

  15. #define LED_NS_G_ON         GPIO_SetBits(GPIOC, GPIO_Pin_7);  
  16. #define LED_NS_G_OFF        GPIO_ResetBits(GPIOC, GPIO_Pin_7);

  17. #define LED_NS_Y_ON         GPIO_SetBits(GPIOC, GPIO_Pin_8);  
  18. #define LED_NS_Y_OFF         GPIO_ResetBits(GPIOC, GPIO_Pin_8);

  19. char number=0,type=1; //闪烁次数,操作类型变量

  20. void RCC_Configuration(void);
  21. void LED_Config(void);
  22. void Delay(int x);
  23. void Traffic(void);
  24. void fShowLight1(void);
  25. void fShowLight2(void);
  26. void fShowLight3(void);
  27. void offLights(void);

  28. /****************************************************************************
  29. * 名    称:void LED_Config(void)
  30. * 功    能:LED 控制初始化函数
  31. * 入口参数:无
  32. * 出口参数:无
  33. * 说    明:
  34. * 调用方法:无
  35. ****************************************************************************/
  36. void LED_Config(void){
  37.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC , ENABLE);       

  38.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5;
  39.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  40.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;       
  41.   GPIO_Init(GPIOA, &GPIO_InitStructure);                                         

  42.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_0|GPIO_Pin_2;
  43.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
  44.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;       
  45.   GPIO_Init(GPIOB, &GPIO_InitStructure);

  46.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8;
  47.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  48.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;       
  49.   GPIO_Init(GPIOC, &GPIO_InitStructure);
  50. }

  51. /****************************************************************************
  52. * 名    称:int main(void)
  53. * 功    能:主函数
  54. * 入口参数:无
  55. * 出口参数:无
  56. * 说    明:
  57. * 调用方法:无
  58. ****************************************************************************/
  59. int main(void)
  60. {
  61.   RCC_Configuration();                                   //系统时钟配置
  62.   LED_Config();                                                        //LED控制配置
  63.   while (1)
  64.   {
  65.           if(KEY_0&&!KEY_1&&!KEY_2){
  66.                  Traffic();
  67.         }  
  68.         else if(KEY_1&&!KEY_0&&!KEY_2){
  69.                  fShowLight1();
  70.         }  
  71.         else if(KEY_2&&!KEY_0&&!KEY_1){
  72.                  fShowLight3();
  73.         }
  74.         else{
  75.                  offLights();
  76.         }
  77.   }
  78. }

  79. /****************************************************************************
  80. * 名    称:void RCC_Configuration(void)
  81. * 功    能:系统时钟配置为72MHZ
  82. * 入口参数:无
  83. * 出口参数:无
  84. * 说    明:
  85. * 调用方法:无
  86. ****************************************************************************/
  87. void RCC_Configuration(void)
  88. {   
  89.   SystemInit();
  90. }

  91. /****************************************************************************
  92. * 名    称:void Delay(int x)
  93. * 功    能:延时函数
  94. * 入口参数:无
  95. * 出口参数:无
  96. * 说    明:
  97. * 调用方法:无
  98. ****************************************************************************/
  99. void Delay(int x)
  100. {
  101.         char i;
  102.         while(x--) for(i=0;i<120;i++);
  103. }
  104. /****************************************************************************
  105. * 名    称:void Traffic(void)
  106. * 功    能:交通灯切换函数
  107. * 入口参数:无
  108. * 出口参数:无
  109. * 说    明:
  110. * 调用方法:无
  111. ****************************************************************************/
  112. void Traffic(void)
  113. {
  114.         switch(type)
  115.         {
  116.         case 1: //东西向绿灯与南北向红灯亮
  117.                 LED_EW_R_OFF;LED_EW_Y_OFF;LED_EW_G_ON;
  118.                 LED_NS_R_ON;LED_NS_Y_OFF;LED_NS_G_OFF;
  119.                 Delay(200);
  120.                 type=2;
  121.                 break;
  122.         case 2: //东西向黄灯闪烁,绿灯关闭
  123.                 LED_EW_Y_ON;LED_EW_G_OFF;
  124.                 Delay(10);
  125.                 LED_EW_Y_OFF;LED_EW_G_OFF;
  126.                 Delay(10);
  127.                 if(++number!=3) return; //闪烁3次
  128.                 number=0;
  129.                 type=3;
  130.                 break;
  131.         case 3: //东西向红灯,南北向绿灯亮
  132.                 LED_EW_R_ON;LED_EW_Y_OFF;LED_EW_G_OFF;
  133.                 LED_NS_R_OFF;LED_NS_Y_OFF;LED_NS_G_ON;
  134.                 Delay(200);
  135.                 type=4;
  136.                 break;
  137.         case 4: //南北向黄灯闪烁3次
  138.                 LED_NS_Y_ON;LED_NS_G_OFF;
  139.                 Delay(10);
  140.                 LED_NS_Y_OFF;LED_NS_G_OFF;
  141.                 Delay(10);               
  142.                 if(++number!=3) return;
  143.                 number=0;
  144.                 type=1;
  145.         }
  146. }
  147. /****************************************************************************
  148. * 名    称:void fShowLight1(void)
  149. * 功    能:六灯走马效果
  150. * 入口参数:无
  151. * 出口参数:无
  152. * 说    明:
  153. * 调用方法:无
  154. ****************************************************************************/
  155. void fShowLight1(void)
  156. {
  157.         LED_EW_R_ON;LED_EW_G_OFF;LED_EW_Y_OFF;
  158.         LED_NS_R_OFF;LED_NS_G_OFF;LED_NS_Y_ON;
  159.         Delay(200);
  160.         LED_EW_R_ON;LED_EW_G_ON;LED_EW_Y_OFF;
  161.         LED_NS_R_OFF;LED_NS_G_OFF;LED_NS_Y_OFF;
  162.         Delay(200);
  163.         LED_EW_R_OFF;LED_EW_G_ON;LED_EW_Y_ON;
  164.         LED_NS_R_OFF;LED_NS_G_OFF;LED_NS_Y_OFF;
  165.         Delay(200);
  166.         LED_EW_R_OFF;LED_EW_G_OFF;LED_EW_Y_ON;
  167.         LED_NS_R_ON;LED_NS_G_OFF;LED_NS_Y_OFF;
  168.         Delay(200);
  169.         LED_EW_R_OFF;LED_EW_G_OFF;LED_EW_Y_OFF;
  170.         LED_NS_R_ON;LED_NS_G_ON;LED_NS_Y_OFF;
  171.         Delay(200);
  172.         LED_EW_R_OFF;LED_EW_G_OFF;LED_EW_Y_OFF;
  173.         LED_NS_R_OFF;LED_NS_G_ON;LED_NS_Y_ON;
  174.         Delay(200);
  175. }
  176. /****************************************************************************
  177. * 名    称:void fShowLight2(void)
  178. * 功    能:六灯闪烁效果
  179. * 入口参数:无
  180. * 出口参数:无
  181. * 说    明:
  182. * 调用方法:无
  183. ****************************************************************************/
  184. void fShowLight2(void)
  185. {
  186.         LED_EW_R_ON;LED_EW_G_OFF;LED_EW_Y_OFF;
  187.         LED_NS_R_ON;LED_NS_G_OFF;LED_NS_Y_OFF;
  188.         Delay(200);
  189.         LED_EW_R_OFF;LED_EW_G_ON;LED_EW_Y_OFF;
  190.         LED_NS_R_OFF;LED_NS_G_ON;LED_NS_Y_OFF;
  191.         Delay(200);
  192.         LED_EW_R_OFF;LED_EW_G_OFF;LED_EW_Y_ON;
  193.         LED_NS_R_OFF;LED_NS_G_OFF;LED_NS_Y_ON;
  194.         Delay(200);
  195. }
  196. /****************************************************************************
  197. * 名    称:void fShowLight3(void)
  198. * 功    能:六灯反复流水效果
  199. * 入口参数:无
  200. * 出口参数:无
  201. * 说    明:
  202. * 调用方法:无
  203. ****************************************************************************/
  204. void fShowLight3(void)
  205. {
  206.         LED_EW_R_ON;LED_EW_G_OFF;LED_EW_Y_OFF;
  207.         LED_NS_R_OFF;LED_NS_G_OFF;LED_NS_Y_OFF;
  208.         Delay(200);
  209.         LED_EW_R_OFF;LED_EW_G_ON;LED_EW_Y_OFF;
  210.         LED_NS_R_OFF;LED_NS_G_OFF;LED_NS_Y_OFF;
  211.         Delay(200);
  212.         LED_EW_R_OFF;LED_EW_G_OFF;LED_EW_Y_ON;
  213.         LED_NS_R_OFF;LED_NS_G_OFF;LED_NS_Y_OFF;
  214.         Delay(200);
  215.         LED_EW_R_OFF;LED_EW_G_OFF;LED_EW_Y_OFF;
  216.         LED_NS_R_ON;LED_NS_G_OFF;LED_NS_Y_OFF;
  217.         Delay(200);
  218.         LED_EW_R_OFF;LED_EW_G_OFF;LED_EW_Y_OFF;
  219.         LED_NS_R_OFF;LED_NS_G_ON;LED_NS_Y_OFF;
  220.         Delay(200);
  221.         LED_EW_R_OFF;LED_EW_G_OFF;LED_EW_Y_OFF;
  222.         LED_NS_R_OFF;LED_NS_G_OFF;LED_NS_Y_ON;
  223.         Delay(200);
  224.         LED_EW_R_OFF;LED_EW_G_OFF;LED_EW_Y_OFF;
  225.         LED_NS_R_OFF;LED_NS_G_ON;LED_NS_Y_OFF;
  226.         Delay(200);
  227.         LED_EW_R_OFF;LED_EW_G_OFF;LED_EW_Y_OFF;
  228.         LED_NS_R_ON;LED_NS_G_OFF;LED_NS_Y_OFF;
  229.         Delay(200);
  230.         LED_EW_R_OFF;LED_EW_G_OFF;LED_EW_Y_ON;
  231.         LED_NS_R_OFF;LED_NS_G_OFF;LED_NS_Y_OFF;
  232.         Delay(200);
  233.         LED_EW_R_OFF;LED_EW_G_ON;LED_EW_Y_OFF;
  234.         LED_NS_R_OFF;LED_NS_G_OFF;LED_NS_Y_OFF;
  235.         Delay(200);
  236. }
  237. /****************************************************************************
  238. * 名    称:void offLights(void)
  239. * 功    能:关灯
  240. * 入口参数:无
  241. * 出口参数:无
  242. * 说    明:
  243. * 调用方法:无
  244. ****************************************************************************/
  245. void offLights(void){
  246.         LED_EW_R_OFF;LED_EW_G_OFF;LED_EW_Y_OFF;
  247.         LED_NS_R_OFF;LED_NS_G_OFF;LED_NS_Y_OFF;
  248. }
  249. /******************* (C) COPYRIGHT 2011 奋斗STM32 *****END OF FILE****/
复制代码

所有资料51hei提供下载:
GPIO2.rar (278.27 KB, 下载次数: 8)


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表