小弟最近收了块595,138组成的32*64双 {MOD}点阵屏,可是就是点不亮啊。。第一次接触这个东西,查了很多资料,就是看不懂别人的程序,,惭愧。参考了
https://www.cnblogs.com/menlsh/p/3780980.html这个,大佬们谁给我指点下一步怎么写呢?我现在很疑惑的就是 他上半屏用16个595控制,那我是不是在595传数据的那个函数应该写16个形参啊...然后主函数又该怎么办?真的没什么头绪
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit EN=P0^0;
sbit R1=P0^1;
sbit R2=P0^2;
sbit LA=P2^7;
sbit LB=P2^6;
sbit LC=P2^5;
sbit LD=P2^4;
sbit G1=P2^3;
sbit G2=P2^2;
sbit STB=P2^1;
sbit CLK=P2^0;
int hangnumber,lienumber;
void hangxuan(int hang);
void init();
void hc595GREENXIA(uchar date1,uchar date2,uchar date3,uchar date4);
void hc595GREENSAHNG(uchar date1,uchar date2,uchar date3,uchar date4);
void hc595REDXIA(uchar date1,uchar date2,uchar date3,uchar date4);
void hc595REDSHANG(uchar date1,uchar date2,uchar date3,uchar date4);
void hc595YELLOWXIA(uchar date1,uchar date2,uchar date3,uchar date4);
void hc595YELLOWSHANG(uchar date1,uchar date2,uchar date3,uchar date4);
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void main()
{
init();
while(1)
{
for(hangnumber=1;hangnumber<17;hangnumber++)
{
hangxuan(hangnumber);
hc595YELLOWSHANG(0xfe,0xff,0xff,0xff);
}
STB=0;
STB=1;
}
}
void hangxuan(int hang)
{
switch(hang)
{
case 1:LA=0;LB=0;LC=0;LD=0;break;
case 2:LA=0;LB=0;LC=0;LD=1;break;
case 3:LA=0;LB=0;LC=1;LD=0;break;
case 4:LA=0;LB=0;LC=1;LD=1;break;
case 5:LA=0;LB=1;LC=0;LD=0;break;
case 6:LA=0;LB=1;LC=0;LD=1;break;
case 7:LA=0;LB=1;LC=1;LD=0;break;
case 8:LA=0;LB=1;LC=1;LD=1;break;
case 9:LA=1;LB=0;LC=0;LD=0;break;
case 10:LA=1;LB=0;LC=0;LD=1;break;
case 11:LA=1;LB=0;LC=1;LD=0;break;
case 12:LA=1;LB=0;LC=1;LD=1;break;
case 13:LA=1;LB=1;LC=0;LD=0;break;
case 14:LA=1;LB=1;LC=0;LD=1;break;
case 15:LA=1;LB=1;LC=1;LD=0;break;
case 16:LA=1;LB=1;LC=1;LD=1;break;
default:break;
}
STB=0;
_nop_();
_nop_();
STB=1;
}
void init()
{
EN=1;
R1=0;
R2=0;
G1=0;
G2=0;
STB=0;
CLK=0;
LA=0;
LB=0;
LC=0;
LD=0;
hangnumber=1;
lienumber=1;
}
void hc595YELLOWSHANG(uchar date1,uchar date2,uchar date3,uchar date4) //»Æé«éÏ°ëÆá
{
char i;
for(i=0;i<8;i++)
{
R1=date1>>7;
G1=date1>>7;
date1<<=1;
CLK=0;
_nop_();
_nop_();
CLK=1;
}
for(i=0;i<8;i++)
{
R1=date2>>7;
G1=date2>>7;
date2<<=1;
CLK=0;
_nop_();
_nop_();
CLK=1;
}
for(i=0;i<8;i++)
{
R1=date3>>7;
G1=date3>>7;
date3<<=1;
CLK=0;
_nop_();
_nop_();
CLK=1;
}
for(i=0;i<8;i++)
{
R1=date4>>7;
G1=date4>>7;
date4<<=1;
CLK=0;
_nop_();
_nop_();
CLK=1;
}
STB=0;
_nop_();
_nop_();
STB=1;
}
void hc595YELLOWXIA(uchar date1,uchar date2,uchar date3,uchar date4) //»Æé«Ï°ëÆá
{
char i;
for(i=0;i<8;i++)
{
R2=date1>>7;
G2=date1>>7;
date1<<=1;
CLK=0;
_nop_();
_nop_();
CLK=1;
}
for(i=0;i<8;i++)
{
R2=date2>>7;
G2=date2>>7;
date2<<=1;
CLK=0;
_nop_();
_nop_();
CLK=1;
}
for(i=0;i<8;i++)
{
R2=date3>>7;
G2=date3>>7;
date3<<=1;
CLK=0;
_nop_();
_nop_();
CLK=1;
}
for(i=0;i<8;i++)
{
R2=date4>>7;
G2=date4>>7;
date4<<=1;
CLK=0;
_nop_();
_nop_();
CLK=1;
}
STB=0;
_nop_();
_nop_();
STB=1;
}
void hc595REDSHANG(uchar date1,uchar date2,uchar date3,uchar date4) //oìé«éÏ°ëÆá
{
char i;
for(i=0;i<8;i++)
{
R1=date1>>7;
date1<<=1;
CLK=0;
_nop_();
_nop_();
CLK=1;
}
for(i=0;i<8;i++)
{
R1=date2>>7;
date2<<=1;
CLK=0;
_nop_();
_nop_();
CLK=1;
}
for(i=0;i<8;i++)
{
R1=date3>>7;
date3<<=1;
CLK=0;
_nop_();
_nop_();
CLK=1;
}
for(i=0;i<8;i++)
{
R1=date4>>7;
date4<<=1;
CLK=0;
_nop_();
_nop_();
CLK=1;
}
STB=0;
_nop_();
_nop_();
STB=1;
}
void hc595REDXIA(uchar date1,uchar date2,uchar date3,uchar date4) //oìé«Ï°ëÆá
{
char i;
for(i=0;i<8;i++)
{
R2=date1>>7;
date1<<=1;
CLK=0;
_nop_();
_nop_();
CLK=1;
}
for(i=0;i<8;i++)
{
R2=date2>>7;
date2<<=1;
CLK=0;
_nop_();
_nop_();
CLK=1;
}
for(i=0;i<8;i++)
{
R2=date3>>7;
date3<<=1;
CLK=0;
_nop_();
_nop_();
CLK=1;
}
for(i=0;i<8;i++)
{
R2=date4>>7;
date4<<=1;
CLK=0;
_nop_();
_nop_();
CLK=1;
}
STB=0;
_nop_();
_nop_();
STB=1;
}
void hc595GREENSHANG(uchar date1,uchar date2,uchar date3,uchar date4) //Âìé«éÏ°ëÆá
{
char i;
for(i=0;i<8;i++)
{
G1=date1>>7;
date1<<=1;
CLK=0;
_nop_();
_nop_();
CLK=1;
}
for(i=0;i<8;i++)
{
G1=date2>>7;
date2<<=1;
CLK=0;
_nop_();
_nop_();
CLK=1;
}
for(i=0;i<8;i++)
{
G1=date3>>7;
date3<<=1;
CLK=0;
_nop_();
_nop_();
CLK=1;
}
for(i=0;i<8;i++)
{
G1=date4>>7;
date4<<=1;
CLK=0;
_nop_();
_nop_();
CLK=1;
}
STB=0;
_nop_();
_nop_();
STB=1;
}
void hc595GREENXIA(uchar date1,uchar date2,uchar date3,uchar date4) // Âìé«Ï°ëÆá
{
char i;
for(i=0;i<8;i++)
{
G2=date1>>7;
date1<<=1;
CLK=0;
_nop_();
_nop_();
CLK=1;
}
for(i=0;i<8;i++)
{
G2=date2>>7;
date2<<=1;
CLK=0;
_nop_();
_nop_();
CLK=1;
}
for(i=0;i<8;i++)
{
G2=date3>>7;
date3<<=1;
CLK=0;
_nop_();
_nop_();
CLK=1;
}
for(i=0;i<8;i++)
{
G2=date4>>7;
date4<<=1;
CLK=0;
_nop_();
_nop_();
CLK=1;
}
STB=0;
_nop_();
_nop_();
STB=1;
}
此帖出自
小平头技术问答
一周热门 更多>