找回密码
 立即注册

QQ登录

只需一步,快速开始

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

用6个LED灯模拟交通灯的功能,使用延时函数来延时。

[复制链接]
跳转到指定楼层
楼主
ID:574374 发表于 2020-1-9 10:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. #include "reg52.h"                //??????????

  2. typedef unsigned int u16;
  3. typedef unsigned char u8;



  4. sbit LEDS1 = P1^0;
  5. sbit LEDS2 = P1^1;
  6. sbit LEDS3 = P1^2;
  7. sbit LEDS4 = P1^3;


  8. sbit red=P2^7;
  9. sbit yellow=P2^6;
  10. sbit green=P2^5;

  11. u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
  12.                                         0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//显示0~F的值

  13. u8 ssec,sec;
  14. u8 DisplayData[2];

  15. void delay(u16 i)
  16. {
  17. while(i--);
  18. }

  19. void Timer0Init()  //??????
  20. {
  21. TMOD|=0x01;
  22. TH0=0xdf;
  23. TL0=0xf0;  //10ms
  24. ET0=1;
  25. EA=1;
  26. TR0=1;
  27. }

  28. void DigDisplay()
  29. {
  30. u8 i;
  31. for(i=0;i<2;i++)
  32. {
  33. switch(i)
  34. {
  35. case(0):
  36.                 LEDS1=0;
  37.                 LEDS2=0;
  38.                 LEDS3=0;
  39. break;
  40. case(1):
  41.                 LEDS1=1;
  42.                 LEDS2=0;
  43.                 LEDS3=0;
  44. break;
  45. }
  46. P0=DisplayData[i];
  47. delay(100);
  48. P0=0x00;
  49. }
  50. }

  51. void Timer0() interrupt 1
  52. {
  53. TH0=0xd8;
  54. TL0=0xf0;
  55. ssec++;
  56. if(ssec>=100)
  57. {
  58. ssec=0;
  59. sec++;
  60. if(sec>=0&&sec<=10) //????,?????10s
  61. {
  62. red=0;
  63. yellow=1;
  64. green=1;
  65. }
  66. if(sec>=11&&sec<=15) //????,?????5s
  67. {
  68. red=1;
  69. yellow=~yellow;
  70. green=1;
  71. }
  72. if(sec>=16&&sec<=25) //????,?????10s
  73. {
  74. red=1;
  75. yellow=1;
  76. green=0;
  77. }
  78. if(sec>25)                         //sec?0,????
  79. {
  80. red=0;
  81. yellow=1;
  82. green=1;
  83. sec=0;
  84. }
  85. }}

  86. void datapros()
  87. {
  88. if(sec>=0&&sec<=10)
  89. {
  90. DisplayData[0]=smgduan[(10-sec)%10];        //?????
  91. DisplayData[1]=smgduan[(10-sec)/10];
  92. }
  93. if(sec>=11&&sec<=15)
  94. {
  95.   DisplayData[0]=smgduan[(15-sec)%10];         //?????
  96. DisplayData[1]=smgduan[(15-sec)/10];
  97. }
  98. if(sec>=16&&sec<=25)
  99. {
  100.   DisplayData[0]=smgduan[(25-sec)%10];  //?????
  101. DisplayData[1]=smgduan[(25-sec)/10];
  102. }
  103. }

  104. void main()
  105. {
  106. Timer0Init();
  107. while(1)
  108. {
  109. datapros();
  110. DigDisplay();
  111. }
  112. }
复制代码


用6个LED灯模拟交通灯的功能,使用延时函数来延时。.zip

24.49 KB, 下载次数: 4, 下载积分: 黑币 -5

用6个LED灯模拟交通灯的功能,使用延时函数来延时。

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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