找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1792|回复: 3
收起左侧

proteus里程序不跑,大佬帮忙看一下

[复制链接]
ID:647772 发表于 2019-12-18 02:00 | 显示全部楼层 |阅读模式
#include  <reg51.h>
#include  <intrins.h>
#define  uchar  unsigned char
#define  uint  unsigned int

unsigned char code table[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}
uchar key_mode=0;
uchar RXD_time=11;
sbit  H_RED=P1^0;
sbit  H_GREEN=P1^1;   
sbit  H_YELLOW=P1^2;  
sbit  L_RED=P1^4;   
sbit  L_GREEN=P1^5;
sbit  L_YELLOW=P1^6;

sbit  k1=P2^0;   
sbit  k2=P2^1;  
sbit  k3=P2^2;   
sbit  k4=P2^3;   
sbit  LED_com1=P2^6;
sbit  LED_com2=P2^7;

void delay_LED(unsigned int i)
{
   unsigned int j;
   for(j=0;j<i;j++)
}
void display(uchar RXD_time)   
{
    uchar shi,ge;
     shi=RXD_time/10;
      ge=RXD_time%10;
    LED_com1=1;
    LED_com2=1;
   
    LED_com1=0;
    P0=table[shi];
    LED_com2=1;
    delay_LED(20);
   
    LED_com1=1;
    P0=table[ge];
    LED_com2=0;
    delay_LED(20);
   
   
   
}
void  int0()  interrupt  0     
    if (k1==0) key_mode=1;      
                                 
if (k2==0) key_mode=2;   
                          
      
        
if (k3==0) key_mode=3;         
                           

if (k4==0) key_mode=4;  
}
void  T0_int()  interrupt  1     
{
    uchar i;  
  
    TH0=0x3C ;
TL0=0xB0;
i++;
if(i==10)      
{
    i=0;

    L_YELLOW=~L_YELLOW;
  H_YELLOW=~H_YELLOW;
  


}
}
void  T1_int()  interrupt  3  
{
    uchar i;

   
    TH1=0x3C;
TL1=0xB0  ;
i++;

if(i==220)
{
   i=0;

     RXD_time--;
   

}
}


           
void  main(void)
{
IT0=1;
EX0=1  ;
TMOD=0x11 ;  

TH0=0x3C  ;  
TL0=0xB0 ;
ET0=1 ;   
  
TH1=0x3C  ;  
TL1=0xB0 ;
ET1=1 ;   
    EA=1    ;   
P1=1 ;   

while(1)   
{
           
   
      if(key_mode==1)
    {   
     L_RED=0;
    H_RED=0;

  }

    if (key_mode==2)
   {
      
      TR0=1;


   }
   
      
    if (key_mode==3)
   {
        
      H_GREEN=0;
   L_RED=0;


   }
   
   
     
         
   if (key_mode==4)
   {
   
     L_RED=0;
   delay_LED(11000);
   L_GREEN=0;
   H_GREEN=0;
    delay_LED(8000);
   H_YELLOW=0;
   delay_LED(3000);
   H_RED=0;
   TR1=1;
  }
  while(1);




     
   
}
}
回复

使用道具 举报

ID:332444 发表于 2019-12-18 10:09 | 显示全部楼层
while(1);这个何用?上仿真图看看是虾米
回复

使用道具 举报

ID:396245 发表于 2019-12-18 11:17 | 显示全部楼层
xianfajushi 发表于 2019-12-18 10:09
while(1);这个何用?上仿真图看看是虾米

很明显,不是不跑,是跑完一遍就被死循环了。
回复

使用道具 举报

ID:667393 发表于 2019-12-18 15:11 | 显示全部楼层
先说解决方案,去掉后面一个while(1);
解释:前一个 while(1){......}可以根据if后面不同的条件选择,并循环。但是   if (key_mode==4)也结束判断之后,你的程序进入了第二个  while(1);  之后,程序只在这里循环,而不是前一个大的while语句中循环。你的程序框架如下所示:
while(1)
{
if (key_mode==1) { };
if (key_mode==2) { };
if (key_mode==3) { };
if (key_mode==4) { };
while(1)
{  空  };


};
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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