烧录后点阵显示屏总是全亮而不像预想的显示字体。

2019-07-15 16:34发布

求大神帮忙看下是怎么回事
程序没有错 也是单片机教材里面的 烧录后点阵显示屏总是全亮而不像预想的显示字体。显示效果如下图。
//注意使用EM3 V3 时把NE555的跳帽去掉
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char  
sbit SCK=P3^6;
sbit LCK=P3^5;
sbit SDI=P3^4;
//一共有16行,每次刷一行的代码
uchar code NUM_HANG[]={
0x80,0x00,0x40,0x00,0x20,0x00,0x10,0x00,0x08,0x00,0x04,0x00,0x02,0x00,0x01,0x00,
0x00,0x80,0x00,0x40,0x00,0x20,0x00,0x10,0x00,0x08,0x00,0x04,0x00,0x02,0x00,0x01,};
//数字1的字码
uchar code  NUM_ONE[]={
0,0,0,0,8,0,56,0,8,0,8,0,8,0,8,0,
8,0,8,0,8,0,8,0,62,0,0,0,0,0,0,0};
//汉字“普”的字码
uchar code  CH_CHAR_PU[]={
0,0,2,0,34,0,42,0,166,248,98,168,62,168,34,168,
62,168,98,168,166,248,42,0,34,0,2,0,0,0,0,0};
void HC595_Send(uchar dat1,uchar dat0,uchar dat2,uchar dat3);
void main()
{
uchar i,j;
while(1)
{
  for(j=255;j>0;j--)  //一个字显示的次数,刷256次然后刷第二个字。
  {
   for(i=0;i<32;i=i+2) //一共有16行,所以刷16次
   {
    HC595_Send(~NUM_ONE[i],~NUM_ONE[i+1],NUM_HANG[i],NUM_HANG[i+1]);
   }
  }
  HC595_Send(0xff,0xff,0x00,0x00);
  for(j=255;j>0;j--)
  {
   for(i=0;i<32;i=i+2)
   {
    HC595_Send(~CH_CHAR_PU[i],~CH_CHAR_PU[i+1],NUM_HANG[i],NUM_HANG[i+1]);
   }
  }
  HC595_Send(0xff,0xff,0x00,0x00);
}
}
void HC595_Send(uchar dat1,uchar dat0,uchar dat3,uchar dat2)
{
uchar i;
SCK=1;
LCK=1;
for(i=0;i<8;i++)
{
  SDI=dat0&0x01;  //从高位到低位
  dat0>>=1;
  SCK=0;
  _nop_();
  _nop_();
  SCK=1;
  _nop_();
  _nop_();
}
for(i=0;i<8;i++)
{
  SDI=dat1&0x01;  //从高位到低位
  dat1>>=1;
  SCK=0;
  _nop_();
  _nop_();
  SCK=1;
  _nop_();
  _nop_();
}
for(i=0;i<8;i++)
{
  SDI=dat2&0x01;  //从高位到低位
  dat2>>=1;
  SCK=0;
  _nop_();
  _nop_();
  SCK=1;
  _nop_();
  _nop_();
}
for(i=0;i<8;i++)
{
  SDI=dat3&0x01;  //从高位到低位
  dat3>>=1;
  SCK=0;
  _nop_();
  _nop_();
  SCK=1;
  _nop_();
  _nop_();
}
LCK=0; //下面是输出时钟
_nop_();
_nop_();
LCK=1;
_nop_();
_nop_();
}

Screenshot_2015-07-20-10-32-58.png
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。