找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1672|回复: 1
打印 上一主题 下一主题
收起左侧

stm32的交通信号灯控制系统程序

[复制链接]
跳转到指定楼层
楼主
ID:786204 发表于 2020-6-21 23:30 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
  1. #include "Trifficlight.h"
  2. #include "led.h"
  3. extern volatile u32 time;        //s计时
  4. extern int key;        //键值
  5. void Delay(__IO u32 nCount);         //简单的延时函数


  6. void control1(void)
  7. {

  8. if(time<=30)//主干道
  9.         {
  10.          B_red(ON);B_yellow(OFF);B_green_l(OFF);B_green_s(OFF);B_green_r(OFF);
  11.          C_red(OFF);C_yellow(OFF);C_green_l(OFF);C_green_s(ON);C_green_r(OFF);
  12.         }
  13. else if(time<=55)
  14.         {
  15.          B_red(ON);B_yellow(OFF);B_green_l(OFF);B_green_s(OFF);B_green_r(OFF);
  16.          C_red(OFF);C_yellow(OFF);C_green_l(ON);C_green_s(OFF);C_green_r(ON);
  17.         }
  18. else if(time<=60)
  19.         {
  20.          B_red(ON);B_yellow(OFF);B_green_l(OFF);B_green_s(OFF);B_green_r(OFF);
  21.          C_red(OFF);C_yellow(ON);C_green_l(OFF);C_green_s(OFF);C_green_r(OFF);

  22.          if(time%2)        {C_yellow(ON);}
  23.          else          {C_yellow(OFF);}
  24.                                                                                                
  25.         }
  26. else if(time<=90)
  27.         {
  28.         B_red(OFF);B_yellow(OFF);B_green_l(OFF);B_green_s(ON);B_green_r(OFF);
  29.         C_red(ON);C_yellow(OFF);C_green_l(OFF);C_green_s(OFF);C_green_r(OFF);
  30.         }
  31. else if(time<=115)
  32.         {
  33.         B_red(OFF);B_yellow(OFF);B_green_l(ON);B_green_s(OFF);B_green_r(ON);
  34.         C_red(ON);C_yellow(OFF);C_green_l(OFF);C_green_s(OFF);C_green_r(OFF);
  35.         }
  36. else
  37.         {
  38.         B_red(OFF);B_yellow(ON);B_green_l(OFF);B_green_s(OFF);B_green_r(OFF);
  39.         C_red(ON);C_yellow(OFF);C_green_l(OFF);C_green_s(OFF);C_green_r(OFF);

  40.         if(time%2)        {B_yellow(ON);}
  41.         else                  {B_yellow(OFF);}

  42.         }


  43. if(time<=30)   //人行道
  44. {
  45. Br_green(ON); Br_red(OFF);
  46. }
  47. else
  48. {
  49. Br_green(OFF); Br_red(ON);
  50. }


  51. if(time<=60)
  52. {
  53. Cr_green(OFF); Cr_red(ON);
  54. }
  55. else if(time<=90)
  56. {
  57. Cr_green(ON); Cr_red(OFF);
  58. }
  59. else
  60. {
  61. Cr_green(OFF); Cr_red(ON);
  62. }



  63. if(time<=30)//主干道
  64.         {
  65.          LEDC( ON ); LEDB( ON );LEDA( OFF );//选择第二个数码管
  66.          LED_DUANMA((60-time)/10);
  67.          Delay(0x000FEF);
  68.          LEDC( ON ); LEDB( ON );LEDA( ON );        //选择第一个数码管
  69.          LED_DUANMA((60-time)%10);                        //b方向
  70.          Delay(0x000FEF);
  71.          LEDC( OFF ); LEDB( ON );LEDA( ON );        //选择第五个数码管
  72.          LED_DUANMA((30-time)/10);
  73.          Delay(0x000FEF);
  74.            LEDC( OFF ); LEDB( ON );LEDA( OFF );   //选择第六个数码管                
  75.          LED_DUANMA((30-time)%10);                         //c方向
  76.          Delay(0x000FEF);  
  77.         }
  78. else if(time<=55)
  79.         {
  80.          LEDC( ON ); LEDB( ON );LEDA( OFF );//选择第二个数码管
  81.          LED_DUANMA((60-time)/10);
  82.          Delay(0x000FEF);
  83.          LEDC( ON ); LEDB( ON );LEDA( ON );        //选择第一个数码管
  84.          LED_DUANMA((60-time)%10);                        //b方向
  85.          Delay(0x000FEF);
  86.           
  87.          LEDC( OFF ); LEDB( ON );LEDA( ON );        //选择第五个数码管       
  88.          LED_DUANMA((55-time)/10);
  89.          Delay(0x000FEF);
  90.          LEDC( OFF ); LEDB( ON );LEDA( OFF );   //选择第六个数码管
  91.          LED_DUANMA((55-time)%10);                         //c方向
  92.          Delay(0x000FEF);         
  93.         }
  94. else if(time<=60)
  95.         {
  96.          LEDC( ON ); LEDB( ON );LEDA( OFF );//选择第二个数码管
  97.          LED_DUANMA((60-time)/10);
  98.          Delay(0x000FEF);
  99.          LEDC( ON ); LEDB( ON );LEDA( ON );        //选择第一个数码管
  100.          LED_DUANMA((60-time)%10);                        //b方向
  101.          Delay(0x000FEF);
  102.           
  103.          LEDC( OFF ); LEDB( ON );LEDA( ON );        //选择第五个数码管         
  104.          LED_DUANMA((60-time)/10);
  105.          Delay(0x000FEF);       
  106.          LEDC( OFF ); LEDB( ON );LEDA( OFF );   //选择第六个数码管       
  107.          LED_DUANMA((60-time)%10);                         //c方向
  108.          Delay(0x000FEF);       
  109.         }
  110. else if(time<=90)
  111.         {
  112.          LEDC( ON ); LEDB( ON );LEDA( OFF );//选择第二个数码管       
  113.          LED_DUANMA((90-time)/10);
  114.          Delay(0x000FEF);
  115.          LEDC( ON ); LEDB( ON );LEDA( ON );        //选择第一个数码管
  116.          LED_DUANMA((90-time)%10);                        //b方向
  117.          Delay(0x000FEF);
  118.           
  119.          LEDC( OFF ); LEDB( ON );LEDA( ON );        //选择第五个数码管
  120.          LED_DUANMA((120-time)/10);
  121.          Delay(0x000FEF);
  122.          LEDC( OFF ); LEDB( ON );LEDA( OFF );   //选择第六个数码管
  123.          LED_DUANMA((120-time)%10);                         //c方向
  124.          Delay(0x000FEF);       
  125.         }
  126. else if(time<=115)
  127.            {
  128.             LEDC( ON ); LEDB( ON );LEDA( OFF );//选择第二个数码管
  129.          LED_DUANMA((115-time)/10);
  130.          Delay(0x000FEF);
  131.          LEDC( ON ); LEDB( ON );LEDA( ON );        //选择第一个数码管
  132.          LED_DUANMA((115-time)%10);                        //b方向
  133.          Delay(0x000FEF);
  134.           
  135.          LEDC( OFF ); LEDB( ON );LEDA( ON );        //选择第五个数码管         
  136.          LED_DUANMA((120-time)/10);
  137.          Delay(0x000FEF);
  138.          LEDC( OFF ); LEDB( ON );LEDA( OFF );   //选择第六个数码管         
  139.          LED_DUANMA((120-time)%10);                         //c方向
  140.          Delay(0x000FEF);
  141.            }
  142. else
  143.         {
  144.         LEDC( ON ); LEDB( ON );LEDA( OFF );//选择第二个数码管
  145.         LED_DUANMA((120-time)/10);
  146.         Delay(0x000FEF);
  147.         LEDC( ON ); LEDB( ON );LEDA( ON );        //选择第一个数码管
  148.         LED_DUANMA((120-time)%10);                        //b方向
  149.         Delay(0x000FEF);
  150.     LEDC( OFF ); LEDB( ON );LEDA( ON );        //选择第五个数码管
  151.         LED_DUANMA((120-time)/10);
  152.         Delay(0x000FEF);
  153.         LEDC( OFF ); LEDB( ON );LEDA( OFF );   //选择第六个数码管          
  154.         LED_DUANMA((120-time)%10);                         //c方向
  155.         Delay(0x000FEF);
  156.         }



  157. if(time<=30)   //人行道
  158. {
  159. LEDC( OFF ); LEDB( OFF );LEDA( ON );//选择第七个数码管
  160. LED_DUANMA((30-time)/10);
  161. Delay(0x000FEF);
  162. LEDC( OFF ); LEDB( OFF );LEDA( OFF );        //选择第八个数码管
  163. LED_DUANMA((30-time)%10);                        //b方向
  164. Delay(0x000FEF);
  165. }
  166. else
  167. {
  168. LEDC( OFF ); LEDB( OFF );LEDA( ON );//选择第七个数码管
  169. LED_DUANMA((120-time)/10);
  170. Delay(0x000FEF);
  171. LEDC( OFF ); LEDB( OFF );LEDA( OFF );        //选择第八个数码管
  172. LED_DUANMA((120-time)%10);                        //b方向
  173. Delay(0x000FEF);
  174. }

  175.         if(time<=60)
  176.         {
  177.         LEDC( ON ); LEDB( OFF );LEDA( ON );//选择第四个数码管
  178.         LED_DUANMA((60-time)/10);
  179.         Delay(0x000FEF);
  180.         LEDC( ON ); LEDB( OFF );LEDA( OFF );        //选择第三个数码管
  181.         LED_DUANMA((60-time)%10);                        //c方向
  182.         Delay(0x000FEF);
  183.         }

  184. else if(time<=90)
  185. {
  186. LEDC( ON ); LEDB( OFF );LEDA( ON );//选择第四个数码管
  187. LED_DUANMA((90-time)/10);
  188. Delay(0x000FEF);
  189. LEDC( ON ); LEDB( OFF );LEDA( OFF );        //选择第三个数码管
  190. LED_DUANMA((90-time)%10);                        //c方向
  191. Delay(0x000FEF);
  192. }
  193. else
  194. {
  195. LEDC( ON ); LEDB( OFF );LEDA( ON );//选择第四个数码管
  196. LED_DUANMA((180-time)/10);
  197. Delay(0x000FEF);
  198. LEDC( ON ); LEDB( OFF );LEDA( OFF );        //选择第三个数码管
  199. LED_DUANMA((180-time)%10);                        //c方向
  200. Delay(0x000FEF);
  201. }
  202. }

  203. void control2(void)
  204. {
  205. if(time>15)
  206.         {
  207.          time=1;
  208.          key=0;
  209.         }
  210. LEDC( ON ); LEDB( ON );LEDA( OFF );        //选择第2个数码管
  211. LED_DUANMA((15-time)/10);
  212. Delay(0x000FEF);
  213. LEDC( ON ); LEDB( ON );LEDA( ON );        //选择第1个数码管
  214. LED_DUANMA((15-time)%10);
  215. Delay(0x000FEF);

  216. LEDC( ON ); LEDB(OFF );LEDA( OFF );        //选择第4个数码管  
  217. LED_DUANMA((15-time)%10);
  218. Delay(0x000FEF);
  219. LEDC( ON ); LEDB( OFF );LEDA( ON );        //选择第3个数码管
  220. LED_DUANMA((15-time)/10);

  221. Delay(0x000FEF);
  222. LEDC( OFF ); LEDB( ON );LEDA( ON );        //选择第5个数码管
  223. LED_DUANMA((15-time)/10);
  224. Delay(0x000FEF);
  225. LEDC( OFF ); LEDB( ON );LEDA( OFF );        //选择第6个数码管  
  226. LED_DUANMA((15-time)%10);
  227. Delay(0x000FEF);


  228. LEDC( OFF ); LEDB( OFF );LEDA( OFF );        //选择第8个数码管
  229. LED_DUANMA((15-time)%10);
  230. Delay(0x000FEF);
  231. LEDC( OFF ); LEDB( OFF );LEDA( ON );        //选择第7个数码管
  232. LED_DUANMA((15-time)/10);
  233. Delay(0x000FEF);


  234. B_red(ON);B_yellow(OFF);B_green_l(OFF);B_green_s(OFF);B_green_r(OFF);
  235. C_red(OFF);C_yellow(OFF);C_green_l(ON);C_green_s(ON);C_green_r(ON);

  236. Br_green(OFF); Br_red(ON);
  237. Cr_green(OFF); Cr_red(ON);

  238. }

  239. void control3(void)
  240. {
  241. if(time>15)
  242.         {
  243.          time=1;
  244.          key=0;
  245.         }
  246. LEDC( ON ); LEDB( ON );LEDA( OFF );        //选择第2个数码管
  247. LED_DUANMA((15-time)/10);
  248. Delay(0x000FEF);
  249. LEDC( ON ); LEDB( ON );LEDA( ON );        //选择第1个数码管
  250. LED_DUANMA((15-time)%10);
  251. Delay(0x000FEF);

  252. LEDC( ON ); LEDB(OFF );LEDA( OFF );        //选择第4个数码管  
  253. LED_DUANMA((15-time)%10);
  254. Delay(0x000FEF);
  255. LEDC( ON ); LEDB( OFF );LEDA( ON );        //选择第3个数码管
  256. LED_DUANMA((15-time)/10);

  257. Delay(0x000FEF);
  258. LEDC( OFF ); LEDB( ON );LEDA( ON );        //选择第5个数码管
  259. LED_DUANMA((15-time)/10);
  260. Delay(0x000FEF);
  261. LEDC( OFF ); LEDB( ON );LEDA( OFF );        //选择第6个数码管  
  262. LED_DUANMA((15-time)%10);
  263. Delay(0x000FEF);


  264. LEDC( OFF ); LEDB( OFF );LEDA( OFF );        //选择第8个数码管
  265. LED_DUANMA((15-time)%10);
  266. Delay(0x000FEF);
  267. LEDC( OFF ); LEDB( OFF );LEDA( ON );        //选择第7个数码管
  268. LED_DUANMA((15-time)/10);
  269. Delay(0x000FEF);


  270. B_red(OFF);B_yellow(OFF);B_green_l(ON);B_green_s(ON);B_green_r(ON);
  271. C_red(ON);C_yellow(OFF);C_green_l(OFF);C_green_s(OFF);C_green_r(OFF);

  272. Br_green(OFF); Br_red(ON);
  273. Cr_green(OFF); Cr_red(ON);

  274. }
  275. void control4(void)
  276. {
  277.   LEDC( ON ); LEDB( ON );LEDA( ON );        //选择第1个数码管
  278.   LEDC( ON ); LEDB( ON );LEDA( OFF );        //选择第2个数码管
  279.   LEDC( ON ); LEDB( OFF );LEDA( ON );        //选择第3个数码管
  280.   LEDC( ON ); LEDB(OFF );LEDA( OFF );        //选择第4个数码管  
  281.   LEDC( OFF ); LEDB( ON );LEDA( ON );        //选择第5个数码管
  282.   LEDC( OFF ); LEDB( ON );LEDA( OFF );        //选择第6个数码管  
  283.   LEDC( OFF ); LEDB( OFF );LEDA( ON );        //选择第7个数码管
  284.   LEDC( OFF ); LEDB( OFF );LEDA( OFF );        //选择第8个数码管
  285.   LED1(OFF);LED2(ON);LED3(ON); LED4(ON);LED5(OFF);LED6(OFF);LED7(ON);LED8(ON);
  286. B_green_l(OFF);B_green_s(OFF);B_green_r(OFF);B_yellow(OFF);
  287. C_green_l(OFF);C_green_s(OFF);C_green_r(OFF);C_yellow(OFF);
  288. Br_green(OFF);
  289. Cr_green(OFF);
  290. if(time%2)        {Cr_green(ON);  Br_green(ON);B_red(ON);C_red(ON); }
  291. else             {Cr_green(OFF);Br_green(OFF);B_red(OFF);C_red(OFF);}
  292. }

  293. void control()
  294. {
  295.         if(!key)
  296.         control1();
  297.         else if(key==1)
  298.         control2();
  299.         else if(key==2)
  300.         control3();
  301.         else if(key==3)       
  302.         control4();               
  303. }

  304. void Delay(__IO u32 nCount)         //简单的延时函数
  305. {
  306.         for(; nCount != 0; nCount--);
  307. }
复制代码


交通灯.7z

186.17 KB, 下载次数: 12, 下载积分: 黑币 -5

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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