找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1955|回复: 4
收起左侧

Proteus 8代编写可控跑马灯遇到问题,求大神解答!

[复制链接]
ID:702442 发表于 2020-3-4 22:24 | 显示全部楼层 |阅读模式
100黑币
用Keil uVision5编写的C语言代码如下画的原件图在附件里
不懂哪里有问题


#include<regx51.h>
#define uchar unsigned char  
#define uint  unsigned int   
uint code unm[]={0,1,3,5,7,9,15,60,100,200,300,400,500,600,700,800,900,1000,1100,1200,1300,1400,1500};

uchar unm1[]={0xff,0xef,0xc7,0xab,0xef,0xef,0xef,0xff};

uchar m,n,j,y;
uint  l,g;

void delay(uint i)
{
  uchar j;  
  while(i--)
  for(j=0;j<120;j++);  
}                                                

void init()
{
  TMOD = 0x11;   
  TH0 = 0x00;
  TL0 = 0x00;                                                
  TH1 = 0xaa;  
  TL1 = 0xbb;                                                
  EA = 1;  
  ET0 = 1;  
  ET1 = 1;  
  TR0 = 1;
  TR1 = 1;
}


bit ce_anjian ( )
{
  bit key=0;
  P1=0xf3;   
  if(P1!=0xf3)   
      key=1;   
  else
      key=0;   
  return(key);  
}


void ce_jianzhi ( )
{
   uchar i,j,p;
   do                           
   {
      while(ce_anjian()==0);   

      delay(50);
   }while(ce_anjian()==0);
   for(i=0;i<2;i++)                          
   {
      P1=(0xfe<<i)|i;
     for(j=0;j<2;j++)
         {
           p=P1&0x0c;  
           if(p==0x08>>j)
           {
              y=i*2+j+1;  
                  goto D1;  
            }
         }
   }
D1:  delay(50);
   do
   {
      while(ce_anjian()==1);

      delay(50);  
   }while(ce_anjian()==1);
}

void mingjiao()
{
  uchar t;   
  for(t=0;t<50;t++)                                          
  {
    P1_7=0;        
  }
    P1_7=1;
}

void main()
{        
  init();
  n=5;   
  while(1)
  {
    l=unm[n];         
        if(ce_anjian()==1)  
        {
          ce_jianzhi();  
          switch(y)
          {
            case 1: {m=1;j=0x7f;mingjiao();}break;   
            case 2:        {m=2;j=0xfe;mingjiao();}break;  
            case 3:        {n=n+1;if(n==24)n=23;mingjiao();}break;
            case 4:        {n=n-1;if(n==0)n=1;mingjiao();}break;  
        default: break;
          }
        }
  }
}

void t_1()interrupt 3
{
  uchar a,k;  
  TH1 = 0xaa;   
  TL1 = 0xbb;
  switch(m)  
  {
     case 1:  
        {
          a=0x01;  
      for(k=0;k<8;k++)
      {
            P2=a;                                                        
            P3=unm1[k];                                       
        delay(2);               
            a=a<<1;                                                        
            if(a==0)a=0x01;        
            P0=j;
      }
        }break;
         case 2:   
        {
          a=0x80;  
      for(k=0;k<8;k++)
      {
            P2=a;                                                        
            P3=unm1[k];                                       
        delay(2);               
            a=a>>1;                                                        
            if(a==0)a=0x80;        
            P0=j;   
      }
        }
  }        
}

void t_0()interrupt 1
{
  uchar b1,b2,b3,b4,b5,b6,b7,b8;  
  if(++g<l) return;   
  g=0;   
  switch(m)
  {
    case 1:{ j=(j>>1)|0x80;
                 if(j==0xff)j=0x7f;}break;
        case 2:{ j=(j<<1)|0x01;
                 if(j==0xff)j=0xfe;}break;
  }
  b1=unm1[0];
  b2=unm1[1];
  b3=unm1[2];
  b4=unm1[3];
  b5=unm1[4];
  b6=unm1[5];
  b7=unm1[6];
  b8=unm1[7];
  unm1[0]=b2;
  unm1[1]=b3;
  unm1[2]=b4;
  unm1[3]=b5;
  unm1[4]=b6;
  unm1[5]=b7;
  unm1[6]=b8;
  unm1[7]=b1;
}



这是C语言代码


师傅也不懂

师傅也不懂

这是画的图

这是画的图
回复

使用道具 举报

ID:687694 发表于 2020-3-5 15:19 | 显示全部楼层
bit ce_anjian ( )
{
  bit key=0;
  P1=0xf3;
  if(P1!=0xf3)   
      key=1;   
  else
      key=0;
  return(key);
}
没太仔细看,你这段有错误,每次调用函数返回结果key始终是0,且P1被赋值0xf3;
每次进入按键函数,key被定义为0,P1被赋值0xf3; if选择函数表达式结果均为0,即key=0,函数返回0         
                                 
回复

使用道具 举报

ID:342822 发表于 2020-3-5 20:40 | 显示全部楼层
p1_7替换为BUZZ
可以运行

屏幕截图(19).png


屏幕截图(18).png

回复

使用道具 举报

ID:342822 发表于 2020-3-5 21:48 | 显示全部楼层
/* Main.c file generated by New Project wizard
*
* Created:   周四 3月 5 2020
* Processor: AT89C52
* Compiler:  Keil for 8051
*/

#include <reg51.h>
#include <stdio.h>

//#include<regx51.h>
#define uchar unsigned char  
#define uint  unsigned int   
uint code unm[]={0,1,3,5,7,9,15,60,100,200,300,400,500,600,700,800,900,1000,1100,1200,1300,1400,1500};

uchar unm1[]={0xff,0xef,0xc7,0xab,0xef,0xef,0xef,0xff};
sbit buzz=P1^7;    //定义单片机I/O口 P1.7的伪名称叫buzz
uchar m,n,j,y;
uint  l,g;

void delay(uint i)
{
  uchar j;  
  while(i--)
  for(j=0;j<120;j++);  
}                                                

void init()
{
  TMOD = 0x11;   
  TH0 = 0x00;
  TL0 = 0x00;                                                
  TH1 = 0xaa;  
  TL1 = 0xbb;                                                
  EA = 1;  
  ET0 = 1;  
  ET1 = 1;  
  TR0 = 1;
  TR1 = 1;
}


bit ce_anjian ( )
{
  bit key=0;
  P1=0xf3;   
  if(P1!=0xf3)   
      key=1;   
  else
      key=0;   
  return(key);  
}


void ce_jianzhi ( )
{
   uchar i,j,p;
   do                           
   {
      while(ce_anjian()==0);   

      delay(50);
   }while(ce_anjian()==0);
   for(i=0;i<2;i++)                          
   {
      P1=(0xfe<<i)|i;
     for(j=0;j<2;j++)
         {
           p=P1&0x0c;  
           if(p==0x08>>j)
           {
              y=i*2+j+1;  
                  goto D1;  
            }
         }
   }
D1:  delay(50);
   do
   {
      while(ce_anjian()==1);

      delay(50);  
   }while(ce_anjian()==1);
}

void mingjiao()
{
  uchar t;   
  for(t=0;t<50;t++)                                          
  {
    buzz=0;        //P1_7被替换
  }
    buzz=1;         //P1_7被替换
}

void main()
{        
  init();
  n=5;   
  while(1)
  {
    l=unm[n];         
        if(ce_anjian()==1)  
        {
          ce_jianzhi();  
          switch(y)
          {
            case 1: {m=1;j=0x7f;mingjiao();}break;   
            case 2:        {m=2;j=0xfe;mingjiao();}break;  
            case 3:        {n=n+1;if(n==24)n=23;mingjiao();}break;
            case 4:        {n=n-1;if(n==0)n=1;mingjiao();}break;  
        default: break;
          }
        }
  }
}

void t_1()interrupt 3
{
  uchar a,k;  
  TH1 = 0xaa;   
  TL1 = 0xbb;
  switch(m)  
  {
     case 1:  
        {
          a=0x01;  
      for(k=0;k<8;k++)
      {
            P2=a;                                                        
            P3=unm1[k];                                       
        delay(2);               
            a=a<<1;                                                        
            if(a==0)a=0x01;        
            P0=j;
      }
        }break;
         case 2:   
        {
          a=0x80;  
      for(k=0;k<8;k++)
      {
            P2=a;                                                        
            P3=unm1[k];                                       
        delay(2);               
            a=a>>1;                                                        
            if(a==0)a=0x80;        
            P0=j;   
      }
        }
  }        
}

void t_0()interrupt 1
{
  uchar b1,b2,b3,b4,b5,b6,b7,b8;  
  if(++g<l) return;   
  g=0;   
  switch(m)
  {
    case 1:{ j=(j>>1)|0x80;
                 if(j==0xff)j=0x7f;}break;
        case 2:{ j=(j<<1)|0x01;
                 if(j==0xff)j=0xfe;}break;
  }
  b1=unm1[0];
  b2=unm1[1];
  b3=unm1[2];
  b4=unm1[3];
  b5=unm1[4];
  b6=unm1[5];
  b7=unm1[6];
  b8=unm1[7];
  unm1[0]=b2;
  unm1[1]=b3;
  unm1[2]=b4;
  unm1[3]=b5;
  unm1[4]=b6;
  unm1[5]=b7;
  unm1[6]=b8;
  unm1[7]=b1;
}

回复

使用道具 举报

ID:336165 发表于 2020-3-6 17:30 | 显示全部楼层
运行了之后什么样,亮都不亮吗
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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