求大神帮忙看下是怎么回事
程序没有错 也是单片机教材里面的 烧录后点阵显示屏总是全亮而不像预想的显示字体。显示效果如下图。
//注意使用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 (1.64 MB, 下载次数: 0) 下载附件 保存到相册
10 小时前 上传
|