深圳市瑞申电子有限公司

深圳市瑞申电子有限公司是一家10年专业大功率电感生产加工厂商,主要以大功率,大电流、扁平线圈电感、平面变压器设计、生产、销售工厂。设计、绕线、组装、检测、包装、出货等全制程的工艺流程!拥有完整、科学的质量管理体系。专业技术团队10人,我们的诚信、实力和产品质量获得业界的认可。欢迎各界朋友莅临参观、指导和业务洽谈。 ...

关于LED点阵显示汉字的问题

时间:2021-08-02 06:19:17 点击:
论坛首问!!!求助大神!!!
本人使用16x16点阵操作,使其显示汉字“普”,接下来我将会发段完整的程序,这两段完整的程序区别只在于主函数有无while(1)循环,我发现两个程序结果一样。
但是,本人认为第二段程序由于没有while(1)循环,结果应该是在LED显示屏上只有“普”字闪一下,而非一直亮着灯,求解!!!

程序一:

#include
#include
void delay(int i)
{
while(i--);
}
sbit SRCLK=P3^6;
sbit RCLK=P3^5;
sbit SER=P3^4;
unsigned char ledwei[]={
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};
unsigned char code ledduan1[]={
0x40,0x44,0x54,0x64,0x45,0x7E,0x44,0x44,0x44,0x7E,0x45,0x64,0x54,0x44,0x40,0x00,
0x00,0x00,0x00,0xFF,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0xFF,0x00,0x00,0x00,0x00,};

void Hc595SendByte(char dat1,char dat2,char dat3,char dat4)
{
int i;
for(i=0;i<8;++i)
{
  SER=dat1>>7;
  dat1=dat1<<1;
  SRCLK=0;
  _nop_();
  _nop_();
  SRCLK=1;
}
for(i=0;i<8;++i)
{
  SER=dat2>>7;
  dat2=dat2<<1;
  SRCLK=0;
  _nop_();
  _nop_();
  SRCLK=1;
}
for(i=0;i<8;++i)
{
  SER=dat3>>7;
  dat3=dat3<<1;
  SRCLK=0;
  _nop_();
  _nop_();
  SRCLK=1;
}
for(i=0;i<8;++i)
{   
  SER=dat4>>7;
  dat4=dat4<<1;
  SRCLK=0;
  _nop_();
  _nop_();
  SRCLK=1;
}
RCLK=0;
_nop_();
_nop_();
RCLK=1;

}
void main()
{
int i;
while(1)
{
  for(i=0;i<16;i++)
  {
    Hc595SendByte(~ledwei[i+16],~ledwei[i],ledduan1[i+16],ledduan1[i]);
    delay(10);
  }
}   
}


程序二:

#include
#include
void delay(int i)
{
while(i--);
}
sbit SRCLK=P3^6;
sbit RCLK=P3^5;
sbit SER=P3^4;
unsigned char ledwei[]={
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};
unsigned char code ledduan1[]={
0x40,0x44,0x54,0x64,0x45,0x7E,0x44,0x44,0x44,0x7E,0x45,0x64,0x54,0x44,0x40,0x00,
0x00,0x00,0x00,0xFF,0x49,0x49,0x49,0x49,0x49,0x49,0x49,0xFF,0x00,0x00,0x00,0x00,};

void Hc595SendByte(char dat1,char dat2,char dat3,char dat4)
{
int i;
for(i=0;i<8;++i)
{
  SER=dat1>>7;
  dat1=dat1<<1;
  SRCLK=0;
  _nop_();
  _nop_();
  SRCLK=1;
}
for(i=0;i<8;++i)
{
  SER=dat2>>7;
  dat2=dat2<<1;
  SRCLK=0;
  _nop_();
  _nop_();
  SRCLK=1;
}
for(i=0;i<8;++i)
{
  SER=dat3>>7;
  dat3=dat3<<1;
  SRCLK=0;
  _nop_();
  _nop_();
  SRCLK=1;
}
for(i=0;i<8;++i)
{   
  SER=dat4>>7;
  dat4=dat4<<1;
  SRCLK=0;
  _nop_();
  _nop_();
  SRCLK=1;
}
RCLK=0;
_nop_();
_nop_();
RCLK=1;

}
void main()
{
int i;
for(i=0;i<16;i++)
{
  Hc595SendByte(~ledwei[i+16],~ledwei[i],ledduan1[i+16],ledduan1[i]);
  delay(10);
}
   

}


力尽山拔 发表于 2017-2-9 08:10
不不不。。。两个程序都是一直亮着
我是说我预测中程序二的效果是闪一下,实际上程序二的效果是一直亮着

自己顶一下


我觉得我应该介绍一下这个程序
通过四个74HC595芯片来控制16x16点阵的四个管脚
函数Hc595SendByte()里面的程序没有问题,该函数的作用是运用串转并的原理将四个十六进制数导入到16x16点阵的四个端口。
数组ledwei充当位选的作用


你这16X16的点阵是什么样的接口啊?最好贴出原理图
粗看你感觉你这16X16点阵就是横着16个接口竖着16个接口,难道是串行转并行之后没有锁存,所以第一个才只闪一下?


谢谢楼上的意见,原理图已贴,确实是横着16个接口竖着16个接口


gniquhs 发表于 2017-2-8 20:47
你这16X16的点阵是什么样的接口啊?最好贴出原理图
粗看你感觉你这16X16点阵就是横着16个接口竖着16个接口,难道是串行转并行之后没有锁存,所以第一个才只闪一下?

力尽山拔 发表于 2017-2-8 21:16
可能我没有表达清楚
我预测的效果是程序一一直亮着,程序二只闪一下
but  实际上是两个程序的效果一样

图示是ON公司74HC595的框架结构,左边一列是移位输出,中间一列D触发器是锁存,12脚的锁存管教应该有个时序的变化(刚看了一下,应该是在串行输出结束之后从低电平变高电平)
如此串行转并行之后的数据就能锁住不变,而不是一闪而逝

要改程序的话,你试下在你每个for(1-8)的大括号之后都加上下面代码
  RCLK=0;
  _nop_();
  _nop_();
  RCLK=1;


这个好资料呀  感谢分享  


gniquhs 发表于 2017-2-8 21:59
图示是ON公司74HC595的框架结构,左边一列是移位输出,中间一列D触发器是锁存,12脚的锁存管教应该有个时序的变化(刚看了一下,应该是在串行输出结束之后从低电平变高电平)
如此串行转并行之后的数据就能锁住不变,而不是一闪而逝

gniquhs 发表于 2017-2-8 21:31
跟我想的差不多
不过你有注意到74HC595的12脚是锁存脚吗?
这个脚你不用是不会锁存数据的,所以只是闪一下

楼主记得选择最佳答案啊


elecfansLily 发表于 2017-2-9 16:44
楼主记得选择最佳答案啊

感觉好强大的样子。


你现在的程序可以实现显示移动的汉字吗?


高通中外文字库IC,支持全世界170多国家的语言,全国唯一字库IC原厂,可加Q2850929208黄工索取资料

大功率电感厂家 |大电流电感工厂

  • 如何建立一个一次性防盗报警系统
    如何建立一个一次性防盗报警系统该报警的目的是健全的警报器只有一次。那就是 - 当报警被激活 - 健全的警笛会在预设的时间长度。然后,它会关闭并保持关闭。警报将不会重新启动。基本的报警有一个独立可调出
  • MSP430进入lpm4后,MCU会偶尔丢失i/o中断
    430进入LMP4 ,通过外部的RTC来唤醒,偶尔会出现无法唤醒, 如果再次出发mcu 可以正常唤醒并运行,可以确定RTC是有输出信号来唤醒MCU的,貌似mcu没有响应边沿中断, (边沿设置、
  • (连载08)并联式开关电源的工作原理
    1-4-1.并联式开关电源的工作原理 图1-11-a是并联式开关电源的最简单工作原理图,图1-11-b是并联式开关电源输出电压的波形。 图1-11-a中Ui是开关电源的工作电压,L是储能电感,K是
  • 大功率电感