找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机交通灯程及Proteus仿真文件 按键控制东西南北禁止通行等4种模式

[复制链接]
跳转到指定楼层
楼主
“基础篇综合测试”项目1说明
功能要求:
1、仿真开始:东西(马路)与南北(人行道)的所有红、黄、绿灯熄灭,两位数码管不显示。
2、K1按下松手:东西南北禁止通行
               东西( 马路 )-- 红灯 -- 常亮
               南北(人行道)-- 红灯 -- 常亮
3、K2按下松手:东西南北谨慎通行
               东西( 马路 )-- 黄灯 -- 亮0.5秒、灭0.5秒循环闪烁
               南北(人行道)-- 黄灯 -- 亮0.5秒、灭0.5秒循环闪烁
               要求使用定时器T0完成定时功能
4、K3按下松手:东西(马路)通行,南北(人行道)禁止通行
               东西( 马路 )-- 绿灯 -- 常亮
               南北(人行道)-- 红灯 -- 常亮
5、K4按下松手:南北(人行道)有行人请求通行
               东西( 马路 )--   红  灯  亮  11  秒   -- 绿灯常亮
               南北(人行道)-- 绿灯亮8秒--黄灯亮3秒 -- 红灯常亮
               要求使用定时器T1完成定时功能
6、在功能要求5的基础上,使用两位数码管,显示南北(人行道)通行倒计时,即按键K4按下松手,两位数码管显示11、10、09、08、.......、03、02、01、00。
    注:仿真电路不允许修改,所有按键均采用外部中断0来检测识别。



仿真电路如下所示:


单片机源程序如下:
  1. #include  <reg52.h>
  2. #include  <intrins.h>
  3. #define  uchar  unsigned char
  4. #define  uint  unsigned int

  5. unsigned char code table[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};

  6. uchar key_mode=0;
  7. uint t,s,shi,ge,i;

  8. uchar RXD_time=11;

  9. sbit  H_RED=P1^0;         
  10. sbit  H_GREEN=P1^1;         
  11. sbit  H_YELLOW=P1^2;

  12. sbit  L_RED=P1^4;         
  13. sbit  L_GREEN=P1^5;         
  14. sbit  L_YELLOW=P1^6;  


  15. sbit  k1=P2^0;         
  16. sbit  k2=P2^1;   
  17. sbit  k3=P2^2;  
  18. sbit  k4=P2^3;   

  19. sbit  LED_com1=P2^6;        
  20. sbit  LED_com2=P2^7;
  21. //sbit  DX=P0;

  22. void delay_LED(unsigned int i)
  23. {
  24.    
  25.    unsigned int j;
  26.    
  27.    for(j=0;j<i;j++);
  28.    
  29. }


  30. void  int0()  interrupt  0     
  31. {
  32.         
  33.     if (k1==0)
  34.         {delay_LED(1000);
  35.         if(k1==0){                       
  36.          key_mode=1; }
  37.          while(!k1);
  38.          }
  39.                                                                                                
  40.         if (k2==0)
  41.         {delay_LED(1000);
  42.         if(k2==0){                  
  43.          key_mode=2;}
  44.          while(!k2)
  45.          ;}
  46.                                                                                                    
  47.         if (k3==0)
  48.         { delay_LED(1000);
  49.         if(k3==0){                  
  50.           key_mode=3; }
  51.            while(!k3);
  52.            }                        

  53.         if (k4==0)
  54.         {delay_LED(1000);
  55.         if(k4==0){               
  56.            key_mode=4; }
  57.            while(!k4);
  58.            }                 
  59.    }
  60. void display();

  61. void jinxing()
  62. {
  63.         if(key_mode==1)
  64.    {
  65.    H_RED=1;L_RED=1;}
  66.   
  67.                 }

  68. void dxnbshenxing()
  69. {  
  70.         if(key_mode==2)
  71.         {        //P1=0;
  72.                 TR0=1;
  73.                 H_RED=0;L_RED=0;
  74.         //H_RED=1;L_RED=1;        
  75.         if(i==5)                                 
  76.         {
  77.           H_YELLOW=~H_YELLOW;
  78.           L_YELLOW=~L_YELLOW;
  79.           i=0;
  80.         }

  81.                 }


  82.          }

  83. void kkk3()
  84. {
  85.         if(key_mode==3)
  86.         {        TR0=0;
  87.                 //P1=0;
  88.                 L_GREEN=1;
  89.                 H_RED=1;
  90.                  H_YELLOW=0;
  91.           L_YELLOW=0;
  92.                 }
  93.                      }

  94. void  KKK4()
  95. {
  96.     if (key_mode==4)
  97.         {        
  98.         TR0=0;
  99.                 TR1=1;
  100.         if(s<11){L_RED=1;
  101.                 L_GREEN=0;
  102.                 H_RED=0; }
  103.                 if(s<=8) {H_GREEN=1;}
  104.                 if(s>8){H_GREEN=0;}
  105.                 if(s<=3) {H_YELLOW=1;}
  106.                 if(s>3) {H_YELLOW=0;}
  107.                 if(s>=11)
  108.                 {
  109.                 L_GREEN=1;
  110.                  L_RED=0;
  111.                  H_RED=1;
  112.                  if(RXD_time ==0)
  113.                  {TR1=0;
  114.                     }
  115.                  }
  116.                                 }
  117.                                 }

  118. void display()
  119. {
  120.     if(key_mode==4)
  121.         {          shi=RXD_time/10;
  122.           ge=RXD_time%10;
  123.                  // int k=0;
  124.                   //for(k=0;k<2;k++)
  125.                           
  126.                     LED_com1=0;P0=table[shi];delay_LED(100);LED_com1=1;        delay_LED(100);               
  127.                         LED_com2=0;P0=table[ge];delay_LED(100);LED_com2=1;delay_LED(100);  
  128.                         
  129.                                                                                                                                                                         
  130.                          }                           
  131.                         
  132.                   
  133.                                                 }

  134.                
  135.                
  136.                
  137.                
  138. /////////////////////////////////////////////////////////////////
  139. //定时器T0服务函数                                                                                          ///
  140. //作用:黄灯0.5秒闪烁                                         ///
  141. /////////////////////////////////////////////////////////////////
  142. void  T0_int()  interrupt  1      
  143. {
  144.     //uint i;  
  145.            TH0=0X18  ;
  146.         TL0=0XFC  ;
  147.         i++;
  148.         

  149. }

  150. /////////////////////////////////////////////////////////////////
  151. //定时器T1服务函数                                                                                          ///
  152. //作用:南北(人行道)倒计时定时                              ///
  153. /////////////////////////////////////////////////////////////////
  154. void  T1_int()  interrupt  3     
  155. {
  156.     uint i;
  157.          TH1=0X18  ;
  158.         TL1=0XFC  ;
  159.         i++;
  160.               if(i==10)
  161.         { s++;
  162.            RXD_time --;
  163.              i=0;
  164.                  }
  165. }
  166.                                                                                                 
  167. void  main(void)
  168. {
  169.         IT0=1   ;               
  170.         EX0=1  ;        

  171.         TMOD=0X11   ;   
  172.          
  173.         TL0 = 0xFC;               
  174.         TH0 = 0x18;               
  175.         TF0 = 1;        
  176.         //TR0 = 1;        
  177.         ET0=1   ;           


  178.         TL1 = 0xFC;        
  179.         TH1 = 0x18;
  180.         TF1 = 1;        
  181.         //TR1 = 1;
  182.         ET1=1;
  183.                
  184.         EA=1;
  185.         P1=0x00;


  186. while(1){        jinxing();
  187.         dxnbshenxing();
  188.         kkk3();
  189.          KKK4();
  190.          display();
  191.            }


  192. }               
  193.                   
复制代码

所有资料51hei附件下载:
基础篇综合测试 项目1yzf.zip (204.81 KB, 下载次数: 48)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

沙发
ID:262 发表于 2022-12-13 03:30 | 只看该作者
好资料,51黑有你更精彩!!!
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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