找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1710|回复: 12
收起左侧

简单交通灯的程序,求大佬帮助

[复制链接]
ID:415837 发表于 2018-10-26 15:19 | 显示全部楼层 |阅读模式
求大佬指点
J9E8]F{`RMGF78)QKI2@SOA.png
WSW[4PWKN(MH`(00[YBM@4Y.png
回复

使用道具 举报

ID:415846 发表于 2018-10-26 15:31 | 显示全部楼层
interrupt关键词写错
回复

使用道具 举报

ID:406596 发表于 2018-10-26 15:38 | 显示全部楼层
你这个查起来很麻烦,首先你先看下你的变量定义有没有漏,再看你的函数有没有声明,还有就是标点有没有错。最后说一点,这种查错的,就算有人帮你查,你这个程序只发这一点,别人也帮你查不了。
回复

使用道具 举报

ID:415866 发表于 2018-10-26 16:11 | 显示全部楼层
回复加黑币吗
回复

使用道具 举报

ID:330198 发表于 2018-10-26 16:45 | 显示全部楼层
你interrupt拼写错误
回复

使用道具 举报

ID:415890 发表于 2018-10-26 17:23 | 显示全部楼层
#include <reg52.h>

sbit LED_R1=P0^0;
sbit LED_Y1=P0^1; //横向路灯
sbit LED_G1=P0^2;

sbit LED_R2=P0^3;
sbit LED_Y2=P0^4;//纵向路灯
sbit LED_G2=P0^5;

void delayms(unsigned int t);

void delay(unsigned char t);

void main()
{
while(1)
{
  unsigned char i;
  LED_G1=0;
  LED_R2=0;

  LED_Y1=1;
  LED_R1=1;

  LED_Y2=1;
  LED_G2=1;

  delayms(500);

  LED_R2=0;

  LED_G1=1;
  LED_Y2=1;
  LED_G2=1;

  for(i=0;i<8;i++)
  {
   delayms(150);
   LED_Y1=!LED_Y1;
  }

  LED_G2=0;
  LED_R1=0;

  LED_Y1=1;
  LED_R2=1;

  LED_Y2=1;
  LED_G1=1;

  delayms(500);

  LED_R1=0;
  LED_Y1=1;
  LED_G1=1;

  LED_R2=1;
  LED_G2=1;
  
  for(i=0;i<8;i++)
  {
   delayms(150);
   LED_Y2=!LED_Y2;
  }


}



}

void delay(unsigned char t)
{
while(t--);
}

void delayms(unsigned int t)
{
while(t--)
{
  delay(245);
  delay(245);
}
}
回复

使用道具 举报

ID:415890 发表于 2018-10-26 17:24 | 显示全部楼层
不知道能不能帮到你
回复

使用道具 举报

ID:415890 发表于 2018-10-26 17:25 | 显示全部楼层
是51的
回复

使用道具 举报

ID:415890 发表于 2018-10-26 17:32 | 显示全部楼层
  1. /*****************************************************
  2.        十字路口交通灯控制 C 程序

  3. ******************************************************/

  4. #define        uchar        unsigned char
  5. #define        uint        unsigned int
  6. #include        <reg52.h>
  7. /*****定义控制位**********************/
  8. sbit    Time_Show_LED2=P2^5;//Time_Show_LED2控制位
  9. sbit    Time_Show_LED1=P2^4;//Time_Show_LED1控制位
  10. sbit        EW_LED2=P2^3;        //EW_LED2控制位
  11. sbit        EW_LED1=P2^2;        //EW_LED1控制位
  12. sbit        SN_LED2=P2^1;        //SN_LED2控制位
  13. sbit        SN_LED1=P2^0;        //SN_LED1控制位
  14. sbit    SN_Yellow=P1^6;//SN黄灯
  15. sbit    EW_Yellow=P1^2;//EW黄灯
  16. sbit    EW_Red=P1^3;//EW红灯
  17. sbit    SN_Red=P1^7;//SN红灯
  18. sbit    EW_ManGreen=P3^0;//EW人行道绿灯
  19. sbit    SN_ManGreen=P3^1;//SN人行道绿灯
  20. sbit    Special_LED=P2^6;//交通正常指示灯
  21. sbit    Busy_LED=P2^7;//交通繁忙指示灯
  22. sbit    Nomor_Button=P3^5;//交通正常按键
  23. sbit    Busy_Btton=P3^6;//交通繁忙按键
  24. sbit    Special_Btton=P3^7;//交通特殊按键  
  25. sbit    Add_Button=P3^3;//时间加
  26. sbit    Reduces_Button=P3^4;//时间减
  27. bit     Flag_SN_Yellow; //SN黄灯标志位
  28. bit     Flag_EW_Yellow;//EW黄灯标志位
  29. char        Time_EW;//东西方向倒计时单元
  30. char        Time_SN;//南北方向倒计时单元
  31. uchar EW=60,SN=40,EWL=19,SNL=19; //程序初始化赋值,正常模式
  32. uchar EW1=60,SN1=40,EWL1=19,SNL1=19;//用于存放修改值的变量
  33. uchar code table[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//1~~~~9段选码
  34. uchar code S[8]={0X28,0X48,0X18,0X48,0X82,0X84,0X81,0X84};//交通信号灯控制代码
  35. /**********************延时子程序************************/
  36. void        Delay(uchar         a)
  37.         {
  38.                 uchar        i;
  39.                 i=a;
  40.                 while(i--){;}
  41.         }
  42. /*****************显示子函数**************************/
  43. void        Display(void)
  44.         {
  45.                 char h,l;
  46.                 h=Time_EW/10;
  47.                 l=Time_EW%10;
  48.               P0=table[l];
  49.                 EW_LED2=1;
  50.                 Delay(2);
  51.                 EW_LED2=0;
  52.             P0=table[h];
  53.                 EW_LED1=1;
  54.                 Delay(2);
  55.                 EW_LED1=0;

  56.                 h=Time_SN/10;
  57.                 l=Time_SN%10;
  58.                 P0=table[l];
  59.                 SN_LED2=1;
  60.                 Delay(2);
  61.                 SN_LED2=0;
  62.             P0=table[h];
  63.                 SN_LED1=1;
  64.                 Delay(2);
  65.                 SN_LED1=0;
  66.                

  67.                 h= EW1/10;
  68.                 l= EW1%10;
  69.                 P0=table[l];
  70.                 Time_Show_LED1=1;
  71.                 Delay(2);
  72.         Time_Show_LED1=0;
  73.                 P0=table[h];
  74.                 Time_Show_LED2=1;
  75.                 Delay(2);
  76.             Time_Show_LED2=0;
  77. }
  78. /**********************外部0中断服务程序************************/

  79. void        EXINT0(void)interrupt 0 using 1
  80.         {
  81.                 EX0=0; //关中断

  82. if(Add_Button==0) //时间加
  83.        {
  84.             EW1+=5;
  85.             SN1+=5;
  86.               if(EW1>=100)
  87.                            {
  88.                              EW1=99;
  89.                              SN1=79;
  90.                }
  91.             }
  92. if(Reduces_Button==0) //时间减
  93.        {
  94.             EW1-=5;
  95.             SN1-=5;
  96.             if(EW1<=40)
  97.               {
  98.                              EW1=40;
  99.                  SN1=20;
  100.                }
  101.                                
  102.                     }

  103. if(Nomor_Button==0)//测试按键是否按下,按下为正常状态
  104.         {
  105.             EW1=60;
  106.             SN1=40;
  107.                         EWL1=19;
  108.                         SNL1=19;
  109.                         Busy_LED=0;//关繁忙信号灯
  110.                         Special_LED =0;//关特殊信号灯
  111.             }
  112. if(Busy_Btton==0) //测试按键是否按下,按下为繁忙状态
  113.         {
  114.                     EW1=45;
  115.             SN1=30;
  116.                         EWL1=14;
  117.                         SNL1=14;
  118.                         Special_LED=0;//关特殊信号灯
  119.                         Busy_LED=1;//开繁忙信号灯
  120.                
  121.         }
  122. if(Special_Btton==0)//测试按键是否按下,按下为特殊状态
  123.         {
  124.                     EW1=75;
  125.             SN1=55;
  126.                         EWL1=19;
  127.                         SNL1=19;
  128.                         Busy_LED=0;//关繁忙信号灯
  129.                     Special_LED =1;//开特殊信号灯
  130.                   
  131.             }                                       
  132.                 EX0=1;//开中断
  133.         }
  134. /**********************T0中断服务程序*******************/
  135.         void timer0(void)interrupt 1 using 1
  136. {
  137.         static uchar count;
  138.         TH0=(65536-50000)/256;
  139.         TL0=(65536-50000)%256;
  140.         count++;
  141.        
  142.         if(count==10)
  143.         {
  144.           if(Flag_SN_Yellow==1) //测试南北黄灯标志位
  145.           {SN_Yellow=~SN_Yellow;}
  146.           if(Flag_EW_Yellow==1)  //测试东西黄灯标志位
  147.           {EW_Yellow=~EW_Yellow;}
  148.         }
  149.         if(count==20)
  150.         {
  151.         Time_EW--;
  152.         Time_SN--;
  153.         if(Flag_SN_Yellow==1)//测试南北黄灯标志位
  154.             {SN_Yellow=~SN_Yellow;}
  155.         if(Flag_EW_Yellow==1)//测试东西黄灯标志位
  156.             {EW_Yellow=~EW_Yellow;}
  157.         count=0;
  158.         }
  159.        
  160. }
  161. /*********************主程序开始**********************/
  162. void        main(void)

  163. {
  164.         Busy_LED=0;
  165.         Special_LED=0;
  166.         IT0=1;        //INT0负跳变触发       
  167.     TMOD=0x01;//定时器工作于方式1
  168.         TH0=(65536-50000)/256;//定时器赋初值
  169.         TL0=(65536-50000)%256;
  170.         EA=1; //CPU开中断总允许
  171.         ET0=1;//开定时中断
  172.         EX0=1;//开外部INTO中断
  173.     TR0=1;//启动定时

  174.      while(1)

  175. {                                /*******S0状态**********/
  176.                                 EW_ManGreen=0;        //EW人行道禁止
  177.                     SN_ManGreen=1;//SN人行道通行
  178.                 Flag_EW_Yellow=0;           //EW关黄灯显示信号
  179.                                 Time_EW=EW;       
  180.                                 Time_SN=SN;               
  181.                                 while(Time_SN>=5)
  182.                             {P1=S[0];         //SN通行,EW红灯
  183.                          Display();}
  184.                                 /*******S1状态**********/
  185.                             P1=0x00;
  186.                                 while(Time_SN>=0)
  187.                            {Flag_SN_Yellow=1;         //SN开黄灯信号位
  188.                             EW_Red=1;      //SN黄灯亮,等待左拐信号,EW红灯
  189.                          
  190.                              Display();
  191.                                 }
  192.                                 /*******S2状态**********/
  193.                             Flag_SN_Yellow=0; //SN关黄灯显示信号
  194.                                 Time_SN=SNL;
  195.                                 while(Time_SN>=5)
  196.                                 {P1=S[2];//SN左拐绿灯亮,EW红灯
  197.                                  Display();}

  198.                           /*******S3状态**********/
  199.                                 P1=0x00;
  200.                                 while(Time_SN>=0)
  201.                            {Flag_SN_Yellow=1;        //SN开黄灯信号位
  202.                             EW_Red=1;      //SN黄灯亮,等待停止信号,EW红灯
  203.                                   
  204.                             Display();}


  205.                            /***********赋值**********/
  206.                                 EW=EW1;
  207.                                 SN=SN1;
  208.                                 EWL=EWL1;
  209.                                 SNL=SNL1;


  210.                                 /*******S4状态**********/
  211.                                 EW_ManGreen=~EW_ManGreen;//EW人行道通行
  212.                     SN_ManGreen=~SN_ManGreen;//SN人行道禁止
  213.                                 Flag_SN_Yellow=0;  //SN关黄灯显示信号
  214.                                 Time_EW=SN;
  215.                                 Time_SN=EW;
  216.                             while(Time_EW>=5)
  217.                             {P1=S[4];         //EW通行,SN红灯
  218.                                  Display();}
  219.                                 /*******S5状态**********/
  220.                                 P1=0X00;
  221.                                 while(Time_EW>=0)
  222.                            {Flag_EW_Yellow=1;//EW开黄灯信号位
  223.                             SN_Red=1;//EW黄灯亮,等待左拐信号,SN红灯       
  224.                             Display();}
  225.                                 /*******S6状态**********/
  226.                                 Flag_EW_Yellow=0;            //EW关黄灯显示信号
  227.                                 Time_EW=EWL;
  228.                                 while(Time_EW>=5)
  229.                                 {P1=S[6];//EW左拐绿灯亮,SN红灯
  230.                                  Display();}

  231.                                 /*******S7状态**********/
  232.                                 P1=0X00;
  233.                                 while(Time_EW>=0)
  234.                            {Flag_EW_Yellow=1; //EN开黄灯信号位
  235.                             SN_Red=1;//EW黄灯亮,等待停止信号,SN红灯       
  236.                             Display();}
  237.                        
  238.                                     /***********赋值**********/
  239.                             EW=EW1;
  240.                                 SN=SN1;
  241.                                 EWL=EWL1;
  242.                                 SNL=SNL1;
  243.                         }

  244.         }
复制代码
回复

使用道具 举报

ID:415837 发表于 2018-10-31 12:11 | 显示全部楼层
13522424188 发表于 2018-10-26 17:23
#include

sbit LED_R1=P0^0;

谢谢,多谢大佬
回复

使用道具 举报

ID:415837 发表于 2018-10-31 12:11 | 显示全部楼层
guibaishu 发表于 2018-10-26 15:31
interrupt关键词写错

谢谢,谢谢,背后发现了
回复

使用道具 举报

ID:418452 发表于 2018-10-31 12:29 | 显示全部楼层

#include <reg52.h>

sbit LED_R1=P0^0;
sbit LED_Y1=P0^1; //横向路灯
sbit LED_G1=P0^2;

sbit LED_R2=P0^3;
sbit LED_Y2=P0^4;//纵向路灯
sbit LED_G2=P0^5;

void delayms(unsigned int t);

void delay(unsigned char t);

void main()
{
while(1)
{
  unsigned char i;
  LED_G1=0;
  LED_R2=0;

  LED_Y1=1;
  LED_R1=1;

  LED_Y2=1;
  LED_G2=1;

  delayms(500);

  LED_R2=0;

  LED_G1=1;
  LED_Y2=1;
  LED_G2=1;

  for(i=0;i<8;i++)
  {
   delayms(150);
   LED_Y1=!LED_Y1;
  }

  LED_G2=0;
  LED_R1=0;

  LED_Y1=1;
  LED_R2=1;

  LED_Y2=1;
  LED_G1=1;

  delayms(500);

  LED_R1=0;
  LED_Y1=1;
  LED_G1=1;

  LED_R2=1;
  LED_G2=1;
  
  for(i=0;i<8;i++)
  {
   delayms(150);
   LED_Y2=!LED_Y2;
  }


}



}

void delay(unsigned char t)
{
while(t--);
}

void delayms(unsigned int t)
{
while(t--)
{
  delay(245);
  delay(245);
}
}
回复

使用道具 举报

ID:410571 发表于 2018-10-31 17:12 | 显示全部楼层
#include <reg52.h>

sbit LED_R1=P0^0;
sbit LED_Y1=P0^1; //横向路灯
sbit LED_G1=P0^2;

sbit LED_R2=P0^3;
sbit LED_Y2=P0^4;//纵向路灯
sbit LED_G2=P0^5;

void delayms(unsigned int t);

void delay(unsigned char t);

void main()
{
while(1)
{
  unsigned char i;
  LED_G1=0;
  LED_R2=0;

  LED_Y1=1;
  LED_R1=1;

  LED_Y2=1;
  LED_G2=1;

  delayms(500);

  LED_R2=0;

  LED_G1=1;
  LED_Y2=1;
  LED_G2=1;

  for(i=0;i<8;i++)
  {
   delayms(150);
   LED_Y1=!LED_Y1;
  }

  LED_G2=0;
  LED_R1=0;

  LED_Y1=1;
  LED_R2=1;

  LED_Y2=1;
  LED_G1=1;

  delayms(500);

  LED_R1=0;
  LED_Y1=1;
  LED_G1=1;

  LED_R2=1;
  LED_G2=1;
  
  for(i=0;i<8;i++)
  {
   delayms(150);
   LED_Y2=!LED_Y2;
  }


}



}

void delay(unsigned char t)
{
while(t--);
}

void delayms(unsigned int t)
{
while(t--)
{
  delay(245);
  delay(245);
}
}
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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