找回密码
 立即注册

QQ登录

只需一步,快速开始

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

基于stm32的简易红绿灯语句

[复制链接]
跳转到指定楼层
楼主
ID:450868 发表于 2018-12-20 16:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. //按键key1 设置红灯时间
  2. 按键key2 设置绿灯时间
  3. 按键key3设置黄灯时间
  4. #include
  5. #include "sys.h"

  6. #include "delay.h"
  7. #include "usart.h"
  8. #include "stdlib.h"

  9. static int G=0,R=0,Y=0; //设置绿,红,黄灯时间变量

  10. #include "lcd.h"
  11. #include "key.h"
  12. #include "time.h"

  13. //----------- 按键函数----------
  14. void scan_key1()
  15. {
  16. static u8 i,j;
  17. if(key1==0)
  18. {
  19. if(i==0)
  20. {
  21. j++;
  22. if(j>3)
  23. {
  24. i=1;j=0;
  25. R++;
  26. if(R>20)R=0;
  27. printf("key1 is inputed ");
  28. }
  29. }
  30. }
  31. else
  32. {
  33. i=j=0;
  34. }
  35. }

  36. void scan_key2()
  37. {
  38. static u8 i,j;
  39. if(key2==0)
  40. {
  41. if(i==0)
  42. {
  43. j++;
  44. if(j>3)
  45. {
  46. i=1;j=0;
  47. G++;
  48. if(G>20)G=0;
  49. printf("key2 is inputed. ");
  50. }
  51. }
  52. }
  53. else
  54. {
  55. i=j=0;
  56. }
  57. }

  58. void scan_key3()
  59. {
  60. static u8 i,j;
  61. if(key3==1)
  62. {
  63. if(i==0)
  64. {
  65. j++;
  66. if(j>3)
  67. {
  68. i=1;j=0;
  69. Y++;
  70. if(Y>20)Y=0;
  71. printf("key3 is inputed. ");
  72. }
  73. }
  74. }
  75. else
  76. {
  77. i=j=0;
  78. }
  79. }


  80. //各指示灯显示秒数函数
  81. void LED_RED(u8 k)
  82. {
  83. LCD_ShowNum(120,55,k,2,16);
  84. }
  85. void LED_YELLOW(u8 k)
  86. {
  87. LCD_ShowNum(120,145,k,2,16);
  88. }
  89. void LED_GREEN(u8 k)
  90. {
  91. LCD_ShowNum(120,235,k,2,16);
  92. }


  93. //-----定时设置函数-------
  94. void LED_SET_GREEN(u8 k)
  95. {
  96. LCD_ShowNum(160,235,k,2,16);

  97. }
  98. void LED_SET_YELLOW(u8 k)
  99. {
  100. LCD_ShowNum(160,145,k,2,16);
  101. }
  102. void LED_SET_RED(u8 k)
  103. {
  104. LCD_ShowNum(160,55,k,2,16);
  105. }

  106. //-----定时器中断函数---扫描按键和显示设定值用----
  107. void TIM3_IRQHandler(void)
  108. {
  109. if(TIM3->SR&0x0001)
  110. {

  111. scan_key1();
  112. scan_key2();
  113. scan_key3();
  114. LED_SET_RED(R);
  115. LED_SET_GREEN(G);
  116. LED_SET_YELLOW(Y);
  117. }
  118. TIM3->SR=~(1<<0);
  119. }

  120. //------主函数-----------
  121. int main(void)
  122. {
  123. u16 code; //TFT驱动芯片代号
  124. int i;
  125. Stm32_Clock_Init(9);
  126. delay_init(72);
  127. uart_init(72,9600);
  128. printf("uart is ok. ");
  129. Timer_init(300,7199); //定时器初始化 设定溢出时间是 30ms
  130. printf("time_init is ok. ");
  131. LCD_Init(); //TFT-LCD初始化
  132. printf("lcd_init is ok.");
  133. key_init(); //按键I/O口设置初始化
  134. printf("key_init is ok.");
  135. JTAG_Set(JTAG_SWD_DISABLE); //关闭JTAG调试器
  136. code=LCD_ReadReg(0x0000);
  137. delay_ms(500);
  138. printf("deiver code is %ld",code); //读取驱动芯片型号是发送到串口
  139. LCD_Fill(30,200,100,270,BLACK);
  140. LCD_Fill(30,110,100,180,BLACK);
  141. LCD_Fill(30,20,100,90,BLACK);
  142. LCD_ShowString(110,15,"Show");
  143. LCD_ShowString(110,30,"Time");
  144. LCD_ShowString(160,15,"Set ");
  145. LCD_ShowString(160,30,"Time");
  146. LED_GREEN(0);
  147. LED_YELLOW(0);
  148. LED_RED(0);
  149. while(1)
  150. {
  151. for(i=G;i>=0;i--) //绿灯控制
  152. {
  153. LED_GREEN(i);
  154. LCD_Fill(30,200,100,270,GREEN);
  155. delay_ms(1000);
  156. LCD_Fill(30,200,100,270,BLACK);
  157. delay_ms(1000);
  158. }
  159. for(i=Y;i>=0;i--) //黄灯控制
  160. {
  161. LED_YELLOW(i);
  162. LCD_Fill(30,110,100,180,YELLOW);
  163. delay_ms(1000);
  164. LCD_Fill(30,110,100,180,BLACK);
  165. delay_ms(1000);
  166. }
  167. for(i=R;i>=0;i--) //红灯控制
  168. {
  169. LED_RED(i);
  170. LCD_Fill(30,20,100,90,RED);
  171. delay_ms(1000);
  172. LCD_Fill(30,20,100,90,BLACK);
  173. delay_ms(1000);
  174. }
  175. }
  176. }

  177. //-------各类库函数省略---------



复制代码

stm32简易红绿灯设计
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1 发表于 2018-12-20 21:58 | 只看该作者
补全原理图或者详细说明一下电路连接即可获得100+黑币
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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