51单片机+10片 74hc595 控制16*64点阵屏显示
目前线路走向是第一片595依次级联到第8片595再从第8片595级联到第9片-第10片第9片与第10片分别控制8片4953来驱动点阵的行,前面8片595分别控制16片点阵...
目前线路走向是第一片595依次级联到第8片595 再从第8片595级联到第9片-第10片 第9片与第10片分别控制8片4953来驱动点阵的行,前面8片595分别控制16片点阵的列.
595的第11,12,13,14脚分别并联引入到单片机来控制。
搞不懂怎么控制行,控制列的程序。 请老师指点下。比如 控制16片点阵的亮与灭。
问题有遗漏。 补充一下。第一片595的14脚是直接进单片机控制的。 与其他595的14脚没有并联、。行高电平,列低电平。 展开
595的第11,12,13,14脚分别并联引入到单片机来控制。
搞不懂怎么控制行,控制列的程序。 请老师指点下。比如 控制16片点阵的亮与灭。
问题有遗漏。 补充一下。第一片595的14脚是直接进单片机控制的。 与其他595的14脚没有并联、。行高电平,列低电平。 展开
1个回答
展开全部
#include<reg52.h>
sbit HC595_DS = P2^0;
sbit HC595_STCP = P2^1;
sbit HC595_SHCP = P2^2;
sbit HC595_OE = P2^3;
void HC595_WriteByte(unsigned char value)
{
unsigned char i;
for(i=0;i<8;i++)
{
HC595_SHCP = 0;
HC595_DC = value&(0x80>>i);
HC595_SHCP = 1;
}
}
void Lattice_WriteData(unsigned char *buffer,unsigned char value,value1)
{
while(*buffer)//列扫描
{
HC595_WriteByte(*buffer++);
}
HC595_WriteByte(value);//行数据低八位
HC595_WriteByte(value1);//行数据高八位
HC595_STCP = 0;
HC595_STCP = 1;
}
unsigned char buffer[8]={0x01,0,0,0,0,0,0,0};//64列
void main()
{
HC595_OE = 0;
HC595_OE = 1;
//假设行低电平有效,列高电平有效,显示效果为第一行,第一列坐标为(0,0)的像素点亮,其他均不亮
Lattice_WriteData(buffer,0xfe,0xff);
while(1)
{
}
}
//如有问题,可再咨询
sbit HC595_DS = P2^0;
sbit HC595_STCP = P2^1;
sbit HC595_SHCP = P2^2;
sbit HC595_OE = P2^3;
void HC595_WriteByte(unsigned char value)
{
unsigned char i;
for(i=0;i<8;i++)
{
HC595_SHCP = 0;
HC595_DC = value&(0x80>>i);
HC595_SHCP = 1;
}
}
void Lattice_WriteData(unsigned char *buffer,unsigned char value,value1)
{
while(*buffer)//列扫描
{
HC595_WriteByte(*buffer++);
}
HC595_WriteByte(value);//行数据低八位
HC595_WriteByte(value1);//行数据高八位
HC595_STCP = 0;
HC595_STCP = 1;
}
unsigned char buffer[8]={0x01,0,0,0,0,0,0,0};//64列
void main()
{
HC595_OE = 0;
HC595_OE = 1;
//假设行低电平有效,列高电平有效,显示效果为第一行,第一列坐标为(0,0)的像素点亮,其他均不亮
Lattice_WriteData(buffer,0xfe,0xff);
while(1)
{
}
}
//如有问题,可再咨询
更多追问追答
追问
你好! 老师. 我编译了你发的代码。点阵还是不亮!
追答
第一片595不也是控制列的麽,把数组里面的0x01改成0xfe,其它7个改成0xff'
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询