标题: 手工焊接的单片机的红绿灯系统制作资料 [打印本页]

作者: 陆漆鸟    时间: 2017-7-18 11:58
标题: 手工焊接的单片机的红绿灯系统制作资料
这是我做的一个基于51单片机的红绿灯系统自己手工焊接

内附硬件图
分别有两个按钮控制正道和侧道交通灯的情况
一个按钮处理突发情况的情况,即全部灯变为红灯



单片机源程序如下:
  1. #include"reg52.h"
  2. //脚定义
  3. sbit Adaoyouche=P3^2;        //将Adaoyouche定义为P3_2脚
  4. sbit Bdaoyouche=P3^3;
  5. sbit jinji=P3^4;

  6. //函数声明
  7. void display(int miao);        //显示子函数声明
  8. void time_init();                        //定时器使能子函数声明
  9. void delay(unsigned int t);  //延时子函数声明
  10. void dingshi();                            //定时子函数声明
  11. void deng();                          //亮灯模式控制子函数声明
  12. //变量定义
  13. int i=1,l=0,tt=0;  //定义全局变量
  14. unsigned char table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //显示数字0-9

  15. main()
  16. {
  17.          time_init();  //定时器使能
  18.          Adaoyouche=1;
  19.          Bdaoyouche=1;
  20.          jinji=1;
  21.          while(1)
  22.          {
  23.                  display(i);                 //显示i
  24.                  if(Adaoyouche==0)  //按键功能
  25.                  {         
  26.                      l=0;  //A车道绿灯模式
  27.                          i=1;         //当i=0,tt=0时进入模式选择
  28.                          tt=0;
  29.                  }
  30.                  if(Bdaoyouche==0)
  31.                  {         
  32.                      l=2;        //B车道绿灯模式
  33.                          i=1;
  34.                          tt=0;
  35.                  }
  36.                  if(jinji==0)
  37.                  {         
  38.                      l=4; //紧急双红灯模式
  39.                          i=1;
  40.                          tt=0;
  41.                  }
  42.                  deng(); //亮灯模式控制
  43.                  delay(300); //短暂延时
  44.      }
  45. }
  46. //定时器使能子函数
  47. void time_init()
  48. {
  49.     tt=0;
  50.     TMOD=0X01;                //设置定时器1为模式一,即16位计算模式
  51.         TH0=(65536-50000)/256;        //给计数寄存器赋值,50毫秒时间
  52.         TL0=(65536-50000)%256;
  53.         EA=1;                //开启总中断
  54.         ET0=1;                //开启定时器0中断
  55.         TR0=1;                //启动定时器
  56. }
  57. //中断函数,关键字"interrupt" , 这是C语言的中断函数表示法,1表时定地器0
  58. void dingshi() interrupt 1
  59. {
  60.     TH0=(65536-50000)/256;        //重新给计数寄存器赋值,50毫秒时间
  61.         TL0=(65536-50000)%256;
  62.         tt--;                                   //  每50毫秒tt就减1,tt从20减到0为1秒
  63. }
  64. //显示子函数
  65. void display(int miao)
  66. {
  67.     P0=0xff;   //P0数据清0,数码管为0亮1灭。
  68.         P1=0xaa;   //开启十位
  69.         P0=table[miao/10];//显示十位
  70.         delay(500);           //短暂延时
  71.         P0=0xff;
  72.         P1=0x55;  //开启个位
  73.         P0=table[miao%10];//显示个位
  74.          
  75. }
  76. //亮灯模式控制子函数
  77. void deng()
  78. {
  79.      if(tt==0)// 每50毫秒tt就减1,tt从20减到0为1秒,当tt=0时i就减1,i为倒数时间。
  80.          {
  81.                 i=i-1;
  82.                 if(i==0)//当i=0时判断下一步要亮的灯
  83.                 {
  84.                          switch(l)
  85.                      {
  86.                                  case 0: //l=0,A道绿灯50秒
  87.                                         i=50;
  88.                                     P2=0x78;  //灯为0亮1灭。A道红黄绿灯分别接了P2的4、3、2脚,B道红黄绿灯分别接了P2的7、6、5脚。0x78为0111 1000
  89.                                         break;
  90.                                  case 1:   //l=1,A道黄灯10秒
  91.                                         i=10;
  92.                                     P2=0x74;
  93.                                         break;
  94.                                 case 2:         //l=2,B道黄灯25秒
  95.                                         i=25;
  96.                                         P2=0xcc;
  97.                                         break;
  98.                                 case 3:                 //l=3,B道黄灯5秒
  99.                                         i=5;
  100.                                         P2=0xac;
  101.                                         break;
  102.                                 case 4:                   //l=4,A,B两道红灯99秒
  103.                                         i=99;
  104. ……………………

  105. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
红绿灯.zip (902.41 KB, 下载次数: 10)








欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1