樂錦 2022-04-15 14:58 采纳率: 100%
浏览 38
已结题

有关于LED矩阵翻页异常的问题

这个本来是想用LED显示0——2翻页的,但是下载到单片机只是停留在0就不动了,麻烦专业人员帮我解决一下,谢谢。(用的是普中的51单片机)

#include "reg51.h"
#include "intrins.h"

typedef unsigned int u16;
typedef unsigned char u8;

sbit SRCLK=P3^6;
sbit RCLK=P3^5;
sbit SER=P3^4;

img


u8 ledwei[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};

u8 flag;
u8 i;

void delay(u16 i)
{
while(i--);
}

void Timer0Init() //定时器0中断
{
TMOD|=0X01;

TH0=0XFC;    
TL0=0X18;    
ET0=1;
EA=1;
TR0=1;    

}

void Hc595SendByte(u8 dat1,u8 dat2)
{
u8 a;

SRCLK = 1;
RCLK = 1;

for(a=0;a<8;a++)    
{
    SER = dat1 >> 7;        
    dat1 <<= 1;

    SRCLK = 0;            
    _nop_();
    _nop_();
    SRCLK = 1;    
}

for(a=0;a<8;a++)         
{
    SER = dat2 >> 7;         
    dat2 <<= 1;

    SRCLK = 0;        
    _nop_();
    _nop_();
    SRCLK = 1;    
}

RCLK = 0;
_nop_();
_nop_();
RCLK = 1;

}

void xian0() //显示0
{
while(1)
{
for(i=0;i<8;i++)
{
Hc595SendByte(ledwei[i],ledduan0[i]);
delay(10);
}
}
}

void xian1() //显示1
{
while(1)
{
for(i=0;i<8;i++)
{
Hc595SendByte(ledwei[i],ledduan1[i]);
delay(10);
}

 }

}

void xian2() //显示2
{
while(1)
{
for(i=0;i<8;i++)
{
Hc595SendByte(ledwei[i],ledduan2[i]);
delay(10);
}
}
}

void main()
{
Timer0Init();
while(1)
{
if(flag==0) xian0();
if(flag==1) xian1();
if(flag==2) xian2();
}
}

void Timer0() interrupt 1
{
static u16 i2;
TH0=0XFC;
TL0=0X18;
i2++;
if(i2==1000)
{
i2=0;
flag++;
if(flag>2)
flag=0;
}
}

  • 写回答

1条回答 默认 最新

  • 智者知已应修善业 2022-04-15 15:59
    关注

    显示用无限循环只能一直执行一个无限循环,最好做法是适时退出无限循环好让其他循环可以执行.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 4月24日
  • 已采纳回答 4月16日
  • 创建了问题 4月15日

悬赏问题

  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 软件测试决策法疑问求解答
  • ¥15 win11 23H2删除推荐的项目,支持注册表等
  • ¥15 matlab 用yalmip搭建模型,cplex求解,线性化处理的方法
  • ¥15 qt6.6.3 基于百度云的语音识别 不会改
  • ¥15 关于#目标检测#的问题:大概就是类似后台自动检测某下架商品的库存,在他监测到该商品上架并且可以购买的瞬间点击立即购买下单
  • ¥15 神经网络怎么把隐含层变量融合到损失函数中?
  • ¥15 lingo18勾选global solver求解使用的算法
  • ¥15 全部备份安卓app数据包括密码,可以复制到另一手机上运行
  • ¥20 测距传感器数据手册i2c