3片595驱动,怎么方便的驱动某一位? 3字节按位操作
//----
#define PIN_DATA 11
#define PIN_LATCH 12
#define PIN_CLOCK 13
unsigned long Time=0;
long RELARdata = 0;//--3zhijie---初始值每位是0--整数是2字节,长整数是4字节
long pre_data=0;
//------
boolean flag1= false; //--- true
boolean flag2= false;
boolean flag3= false;
boolean flag4= false;
boolean flag5= false;
boolean flag6= false;
boolean flag7= false;
boolean flag8= false;
boolean flag9= false;
boolean flag10= false;
boolean flag11= false;
boolean flag12= false;
void setup()
{
pinMode(PIN_DATA,OUTPUT);
pinMode(PIN_CLOCK,OUTPUT);
pinMode(PIN_LATCH,OUTPUT);
}
void loop()
{
if(flag1==false)
{
RELARdata|=(1<<0);//----将第1位(0位)置1---且不影响其它位的状态
RELARdata&=~(1<<1);//----将第2位(1位)置0---且不影响其它位的状态
}
else
{
RELARdata&=~(1<<0);//----将第1位(0位)置0---且不影响其它位的状态
RELARdata|=(1<<1);//----将第2位(0位)置1---且不影响其它位的状态
}
//-----
if(flag2==false)
{
RELARdata|=(1<<2);//----将第3位(0位)置1---且不影响其它位的状态
RELARdata&=~(1<<3);//----将第4位(1位)置0---且不影响其它位的状态
}
else
{
RELARdata&=~(1<<2);//----将第3位(0位)置0---且不影响其它位的状态
RELARdata|=(1<<3);//----将第4位(0位)置1---且不影响其它位的状态
}
//----
if(flag3==false)
{
RELARdata|=(1<<4);//----将第5位(0位)置1---且不影响其它位的状态
RELARdata&=~(1<<5);//----将第6位(1位)置0---且不影响其它位的状态
}
else
{
RELARdata&=~(1<<4);//----将第5位(0位)置0---且不影响其它位的状态
RELARdata|=(1<<5);//----将第6位(0位)置1---且不影响其它位的状态
}
//----
if(flag4==false)
{
RELARdata|=(1<<6);//----将第7位(0位)置1---且不影响其它位的状态
RELARdata&=~(1<<7);//----将第8位(1位)置0---且不影响其它位的状态
}
else
{
RELARdata&=~(1<<6);//----将第7位(0位)置0---且不影响其它位的状态
RELARdata|=(1<<7);//----将第8位(0位)置1---且不影响其它位的状态
}
//-----
if(flag5==false)
{
RELARdata|=(1<<8);//----将第9位(0位)置1---且不影响其它位的状态
RELARdata&=~(1<<9);//----将第10位(1位)置0---且不影响其它位的状态
}
else
{
RELARdata&=~(1<<8);//----将第9位(0位)置0---且不影响其它位的状态
RELARdata|=(1<<9);//----将第10位(0位)置1---且不影响其它位的状态
}
//-----
if(flag6==false)
{
RELARdata|=(1<<10);//----将第11位(0位)置1---且不影响其它位的状态
RELARdata&=~(1<<11);//----将第12位(1位)置0---且不影响其它位的状态
}
else
{
RELARdata&=~(1<<10);//----将第11位(0位)置0---且不影响其它位的状态
RELARdata|=(1<<11);//----将第12位(0位)置1---且不影响其它位的状态
}
//----
if(flag7==false)
{
RELARdata|=(1<<12);//----将第13位(0位)置1---且不影响其它位的状态
RELARdata&=~(1<<13);//----将第14位(1位)置0---且不影响其它位的状态
}
else
{
RELARdata&=~(1<<12);//----将第13位(0位)置0---且不影响其它位的状态
RELARdata|=(1<<13);//----将第14位(0位)置1---且不影响其它位的状态
}
//---
if(flag8==false)
{
RELARdata|=(1<<14);//----将第15位(0位)置1---且不影响其它位的状态
RELARdata&=~(1<<15);//----将第16位(1位)置0---且不影响其它位的状态
}
else
{
RELARdata&=~(1<<14);//----将第15位(0位)置0---且不影响其它位的状态
RELARdata|=(1<<15);//----将第16位(0位)置1---且不影响其它位的状态
}
//-----
if(flag9==false)
{
RELARdata|=(1<<16);//----将第17位(0位)置1---且不影响其它位的状态
RELARdata&=~(1<<17);//----将第18位(1位)置0---且不影响其它位的状态
}
else
{
RELARdata&=~(1<<16);//----将第17位(0位)置0---且不影响其它位的状态
RELARdata|=(1<<17);//----将第18位(0位)置1---且不影响其它位的状态
}
//----
if(flag10==false)
{
RELARdata|=(1<<18);//----将第19位(0位)置1---且不影响其它位的状态
RELARdata&=~(1<<19);//----将第20位(1位)置0---且不影响其它位的状态
}
else
{
RELARdata&=~(1<<18);//----将第19位(0位)置0---且不影响其它位的状态
RELARdata|=(1<<19);//----将第20位(0位)置1---且不影响其它位的状态
}
//----
if(flag11==false)
{
RELARdata|=(1<<20);//----将第21位(0位)置1---且不影响其它位的状态
RELARdata&=~(1<<21);//----将第22位(1位)置0---且不影响其它位的状态
}
else
{
RELARdata&=~(1<<20);//----将第21位(0位)置0---且不影响其它位的状态
RELARdata|=(1<<21);//----将第22位(0位)置1---且不影响其它位的状态
}
//----
if(flag12==false)
{
RELARdata|=(1<<22);//----将第23位(0位)置1---且不影响其它位的状态
RELARdata&=~(1<<23);//----将第24位(1位)置0---且不影响其它位的状态
}
else
{
RELARdata&=~(1<<22);//----将第23位(0位)置0---且不影响其它位的状态
RELARdata|=(1<<23);//----将第24位(0位)置1---且不影响其它位的状态
}
//----------------------------数值变化,与以前不同时才执行下面的程序
if(pre_data!=RELARdata)
{
digitalWrite(PIN_LATCH,LOW);
shiftOut(PIN_DATA,PIN_CLOCK,MSBFIRST,RELARdata);
digitalWrite(PIN_LATCH,HIGH);
delay(40);//---
pre_data=RELARdata;
}
}
怎么方便的操作3片595的输出端口(Y0~Y7 3组)------思路是按位操作来,但是一片这种思路可以,但是多路就不行 了
页:
[1]