如题,做了个595两级级联,结果就悲剧了。不管是行扫描还是列扫描都会出现5958位的分界。搞不清楚是硬件问题还是软件问题。特来求救~~
连接方式就是你懂的方式,16×16单 {MOD}点阵,两片一组级联,分别做行列信号。选了行扫描595输出2003驱动,扫描信号为高。
图片如下:
3.jpg (564.2 KB, 下载次数: 0)
下载附件
2014-10-23 18:29 上传
/*-----------------------------------------------*/
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
void delay5us(void);
void delay_nms(uchar);
void SendByte(uchar);
void Send_2Byte(uchar,uchar);
void SendSeg_Byte(uchar);
void SendSeg_2Byte(uchar,uchar);
sbit h_ser =P0^0;
sbit h_sclk =P0^1;
sbit h_lclk =P0^2;
sbit l_ser =P0^3;
sbit l_sclk =P0^4;
sbit l_lclk =P0^5;
uchar data_tab[32]={0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x7F,0x06,0x18,0x00,0x18,0x18,0x18,0x38,0x18,
0xF8,0x1F,0x18,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x7E,0x00,0x00,0x00,0x00};
uchar scan_tab[32]={0x01,0x00,0x02,0x00,0x04,0x00,0x08,0x00,0x10,0x00,0x20,0x00,0x40,0x00,0x80,0x00,
0x00,0x01,0x00,0x02,0x00,0x04,0x00,0x08,0x00,0x10,0x00,0x20,0x00,0x40,0x00,0x80};
//------------------------------------------------
main()
{
uchar i;
while(1)
{
for(i=0;i<16;i++)
{
Send_2Byte(scan_tab[i*2-1],scan_tab[i*2]); //扫描信号
delay_nms(1);
SendSeg_2Byte(data_tab[i*2-1],data_tab[i*2]); //数据输出
delay_nms(1);
SendSeg_2Byte(0x00,0x00); //关显示
}
}
}
////////////////////////////////////////////////////////////
void SendByte(uchar dat)
{
uchar i;
for(i=0;i<8;i++)
{
h_sclk=0;
h_ser=dat&0x80;
dat<<=1;
h_sclk=1;
}
}
////////////////////////////////////////////////////////////
void Send_2Byte(uchar dat1,uchar dat2)
{
SendByte(dat1);
SendByte(dat2);
h_lclk=0;
_nop_();
h_lclk=1;
}
////////////////////////////////////////////////////////////
void SendSeg_Byte(uchar dat)
{
uchar i;
for(i=0;i<8;i++)
{
l_sclk=0;
l_ser=dat&0x80;
dat<<=1;
l_sclk=1;
}
}
////////////////////////////////////////////////////////////
void SendSeg_2Byte(uchar dat1,uchar dat2)
{
SendSeg_Byte(dat1);
SendSeg_Byte(dat2);
l_lclk=0;
_nop_();
l_lclk=1;
}
////////////////////////////////////////////////////////////
void delay5us(void)
{
_nop_(); //if Keil,require use intrins.h
_nop_(); //if Keil,require use intrins.h
}
////////////////////////////////////////////////////////////
void delay_nms(uchar t)
{
uchar a,b,c;
for(c=t;c>0;c--)
for(b=102;b>0;b--)
for(a=3;a>0;a--);
}
////////////////////////////////////////////////////////////
PS:请无视我的金牌会员,我其实是金牌菜鸟,谢谢!
我试过了每一帧全量一帧,还是老样子,而且背景微量了。隔行亮不理解啥意思,是慢扫描?还是要抽字模成隔行的?
那么你在关显示的时候,怎么输出的是两个0x00呢?
还有关显示怎么放在最后呢?
试试看这样,先关显示,就是传送两个0XFF,然后传送scan_tab,然后再传送显示数据,然后再延时,再循环,看看是什么效果
加个_nop_();
一周热门 更多>