找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机交通灯实验中添加LED屏幕后失效

[复制链接]
跳转到指定楼层
楼主
原代码,能实现动态数码管和LED交通灯的动态显示。
为增加LED显示停和行,增加了LED代码模块,但增加后数码管和LED交通灯均不亮,LED乱码
请问是哪里出问题了。
运行结果正常。


修改后代码,红色部分,程序无报错,但数码管和LED灯都不亮,LED点阵乱码
#include "reg52.h"
#include "intrins.h"
typedef unsigned int u16;
typedef unsigned char u8;
#define led P0
#define light P1
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
sbit GREEN00=P0^0;
sbit RED00=P0^1;
sbit GREEN10=P0^2;
sbit YELLOW10=P0^3;
sbit RED10=P0^4;
sbit GREEN11=P0^5;
sbit YELLOW11=P0^6;
sbit RED11=P0^7;
sbit GREEN01=P3^0;
sbit RED01=P3^1;
sbit SER=P2^7;
sbit SRCLK=P2^6;
sbit RCLK1=P2^5;

u8 code smg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

u8 code duan2[]={0x80,0x60,0xF8,0x07,0x00,0x04,0x74,0x54,0x55,0x56,0x54,0x54,0x74,0x04,0x00,0x00,
0x00,0x00,0xFF,0x00,0x03,0x01,0x05,0x45,0x85,0x7D,0x05,0x05,0x05,0x01,0x03,0x00,};        //?
u8 code duan1[]={0x00,0x10,0x88,0xC4,0x33,0x00,0x40,0x42,0x42,0x42,0xC2,0x42,0x42,0x42,0x40,0x00,
0x02,0x01,0x00,0xFF,0x00,0x00,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00,};        //??
u8 code wei[32]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,};



u8 Second=0;
u8 DisplayData[8];

void delay(u16 t);
void inter0();
void Display();

void LEDDZ(u8 dat1,u8 dat2,u8 dat3,u8 dat4);
void DZdisplay1();
void DZdisplay2();


void LEDDZ(u8 dat1,u8 dat2,u8 dat3,u8 dat4)
{ u8 a;
  for(a=0;a<8;a++)
  { SER=dat1>>7;      
    dat1=dat1<<1;
SRCLK=0;
_nop_();
SRCLK=1;
}
  for(a=0;a<8;a++)
  { SER=dat2>>7;
    dat2=dat2<<1;
SRCLK=0;
_nop_();
SRCLK=1;
}
  for(a=0;a<8;a++)
  { SER=dat3>>7;
    dat3=dat3<<1;
SRCLK=0;
_nop_();
SRCLK=1;
}
  for(a=0;a<8;a++)
  { SER=dat4>>7;
    dat4=dat4<<1;
SRCLK=0;
_nop_();
SRCLK=1;
}
  RCLK1=0;
  _nop_();
  RCLK1=1;
  }  


void DZdisplay1()
{ u8 i;
   while(1)
   { for(i=0;i<16;i++)     
      {LEDDZ(~wei[i+16],~wei[ i],duan1[i+16],duan1[ i]);
    delay(10);}     
     }
  }

void DZdisplay2()
{ u8 i;
   while(1)
   { for(i=0;i<16;i++)     
      {LEDDZ(~wei[i+16],~wei[ i],duan2[i+16],duan2[ i]);
    delay(10);}   
     }
  }
[ i][ i][ i]

void delay(u16 t)
{while(t--);}
void inter0()
{TMOD=0X01;
  TH0=0XFC;
  TL0=0X18;
  EA=1;
  ET0=1;
  TR0=1;
  }
void Display()
{ u8 i;
   light=0x00;
   for(i=0;i<8;i++)
   { switch(i)
     {case(0):LSA=0;LSB=0;LSC=0;break;
   case(1):LSA=1;LSB=0;LSC=0;break;
   case(2):LSA=0;LSB=1;LSC=0;break;
   case(3):LSA=1;LSB=1;LSC=0;break;
   case(4):LSA=0;LSB=0;LSC=1;break;
   case(5):LSA=1;LSB=0;LSC=1;break;
   case(6):LSA=0;LSB=1;LSC=1;break;
   case(7):LSA=1;LSB=1;LSC=1;break;
    }
  light=DisplayData[ i];
  delay(100);
  light=0x00;
  }
  }

void main()
{ inter0();
   while(1)
   {if(Second==70)
     {
    Second=0;
    }
if(Second<31)
  {
    DisplayData[0]=0x00;
    DisplayData[1]=0x00;
    DisplayData[2]=smg[(30-Second)%100/10];
    DisplayData[3]=smg[(30-Second)%10];
    DisplayData[4]=0x00;
    DisplayData[5]=0x00;
    DisplayData[6]=DisplayData[2];
    DisplayData[7]=DisplayData[3];
    Display();
    DZdisplay2();
    led=0xff;
    GREEN01=1;
    RED01=1;
    GREEN00=0;
    GREEN10=0;
    RED11=0;
    RED01=0;
    }
else if(Second<36)
  {
    DisplayData[0]=0x00;
    DisplayData[1]=0x00;
    DisplayData[2]=smg[(36-Second)%100/10];
    DisplayData[3]=smg[(36-Second)%10];
    DisplayData[4]=0x00;
    DisplayData[5]=0x00;
    DisplayData[6]=DisplayData[2];
    DisplayData[7]=DisplayData[3];
    Display();
    led=0xff;
    GREEN01=1;
    RED01=1;
    RED00=0;
    YELLOW10=0;
    RED11=0;
    RED01=0;
    }
else if(Second<66)
  {
    DisplayData[0]=0x00;
    DisplayData[1]=0x00;
    DisplayData[2]=smg[(66-Second)%100/10];
    DisplayData[3]=smg[(66-Second)%10];
    DisplayData[4]=0x00;
    DisplayData[5]=0x00;
    DisplayData[6]=DisplayData[2];
    DisplayData[7]=DisplayData[3];
    Display();
    DZdisplay1();
    led=0xff;
    GREEN01=1;
    RED01=1;
    RED00=0;
    RED10=0;
    GREEN11=0;
    GREEN01=0;
    }
else
  {
    DisplayData[0]=0x00;
    DisplayData[1]=0x00;
    DisplayData[2]=smg[(71-Second)%100/10];
    DisplayData[3]=smg[(71-Second)%10];
    DisplayData[4]=0x00;
    DisplayData[5]=0x00;
    DisplayData[6]=DisplayData[2];
    DisplayData[7]=DisplayData[3];
    Display();
    led=0xff;
    GREEN01=1;
    RED01=1;
    RED00=0;
    RED10=0;
    YELLOW11=0;
    RED01=0;
    }
    }
   }
void inter0in() interrupt 1
{ static u16 i;
   TH0=0XFC;
   TL0=0X18;
   i++;
   if(i==1000)
   {i=0;
    Second++;
}
   }


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

使用道具 举报

沙发
ID:584814 发表于 2020-4-10 22:16 | 只看该作者
你查一下实验板的电路图,极有可能是I/O口占用。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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