极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 8063|回复: 0

3片595驱动,怎么方便的驱动某一位? 3字节按位操作

[复制链接]
发表于 2014-11-24 20:55:26 | 显示全部楼层 |阅读模式

  1. //----
  2. #define PIN_DATA 11
  3. #define PIN_LATCH 12
  4. #define PIN_CLOCK 13
  5. unsigned long Time=0;
  6. long RELARdata = 0;//--3zhijie---初始值每位是0--整数是2字节,长整数是4字节
  7. long pre_data=0;
  8. //------
  9. boolean flag1= false; //--- true
  10. boolean flag2= false;
  11. boolean flag3= false;
  12. boolean flag4= false;
  13. boolean flag5= false;
  14. boolean flag6= false;
  15. boolean flag7= false;
  16. boolean flag8= false;
  17. boolean flag9= false;
  18. boolean flag10= false;
  19. boolean flag11= false;
  20. boolean flag12= false;


  21. void setup()
  22. {
  23.   pinMode(PIN_DATA,OUTPUT);
  24.   pinMode(PIN_CLOCK,OUTPUT);
  25.   pinMode(PIN_LATCH,OUTPUT);
  26. }
  27. void loop()
  28. {
  29.   
  30.   if(flag1==false)
  31.   {
  32.     RELARdata|=(1<<0);//----将第1位(0位)置1---且不影响其它位的状态
  33.     RELARdata&=~(1<<1);//----将第2位(1位)置0---且不影响其它位的状态
  34.   }
  35.   else
  36.   {
  37.     RELARdata&=~(1<<0);//----将第1位(0位)置0---且不影响其它位的状态
  38.     RELARdata|=(1<<1);//----将第2位(0位)置1---且不影响其它位的状态
  39.   }
  40.   //-----
  41.   if(flag2==false)
  42.   {
  43.     RELARdata|=(1<<2);//----将第3位(0位)置1---且不影响其它位的状态
  44.     RELARdata&=~(1<<3);//----将第4位(1位)置0---且不影响其它位的状态
  45.   }
  46.   else
  47.   {
  48.     RELARdata&=~(1<<2);//----将第3位(0位)置0---且不影响其它位的状态
  49.     RELARdata|=(1<<3);//----将第4位(0位)置1---且不影响其它位的状态
  50.   }
  51.   //----
  52.   if(flag3==false)
  53.   {
  54.     RELARdata|=(1<<4);//----将第5位(0位)置1---且不影响其它位的状态
  55.     RELARdata&=~(1<<5);//----将第6位(1位)置0---且不影响其它位的状态
  56.   }
  57.   else
  58.   {
  59.     RELARdata&=~(1<<4);//----将第5位(0位)置0---且不影响其它位的状态
  60.     RELARdata|=(1<<5);//----将第6位(0位)置1---且不影响其它位的状态
  61.   }
  62.   //----
  63.   if(flag4==false)
  64.   {
  65.     RELARdata|=(1<<6);//----将第7位(0位)置1---且不影响其它位的状态
  66.     RELARdata&=~(1<<7);//----将第8位(1位)置0---且不影响其它位的状态
  67.   }
  68.   else
  69.   {
  70.     RELARdata&=~(1<<6);//----将第7位(0位)置0---且不影响其它位的状态
  71.     RELARdata|=(1<<7);//----将第8位(0位)置1---且不影响其它位的状态
  72.   }
  73.   //-----
  74.   if(flag5==false)
  75.   {
  76.     RELARdata|=(1<<8);//----将第9位(0位)置1---且不影响其它位的状态
  77.     RELARdata&=~(1<<9);//----将第10位(1位)置0---且不影响其它位的状态
  78.   }
  79.   else
  80.   {
  81.     RELARdata&=~(1<<8);//----将第9位(0位)置0---且不影响其它位的状态
  82.     RELARdata|=(1<<9);//----将第10位(0位)置1---且不影响其它位的状态
  83.   }
  84.   //-----
  85.   if(flag6==false)
  86.   {
  87.     RELARdata|=(1<<10);//----将第11位(0位)置1---且不影响其它位的状态
  88.     RELARdata&=~(1<<11);//----将第12位(1位)置0---且不影响其它位的状态
  89.   }
  90.   else
  91.   {
  92.     RELARdata&=~(1<<10);//----将第11位(0位)置0---且不影响其它位的状态
  93.     RELARdata|=(1<<11);//----将第12位(0位)置1---且不影响其它位的状态
  94.   }
  95.   //----
  96.   if(flag7==false)
  97.   {
  98.     RELARdata|=(1<<12);//----将第13位(0位)置1---且不影响其它位的状态
  99.     RELARdata&=~(1<<13);//----将第14位(1位)置0---且不影响其它位的状态
  100.   }
  101.   else
  102.   {
  103.     RELARdata&=~(1<<12);//----将第13位(0位)置0---且不影响其它位的状态
  104.     RELARdata|=(1<<13);//----将第14位(0位)置1---且不影响其它位的状态
  105.   }
  106.   //---
  107.   if(flag8==false)
  108.   {
  109.     RELARdata|=(1<<14);//----将第15位(0位)置1---且不影响其它位的状态
  110.     RELARdata&=~(1<<15);//----将第16位(1位)置0---且不影响其它位的状态
  111.   }
  112.   else
  113.   {
  114.     RELARdata&=~(1<<14);//----将第15位(0位)置0---且不影响其它位的状态
  115.     RELARdata|=(1<<15);//----将第16位(0位)置1---且不影响其它位的状态
  116.   }
  117.   //-----
  118.   if(flag9==false)
  119.   {
  120.     RELARdata|=(1<<16);//----将第17位(0位)置1---且不影响其它位的状态
  121.     RELARdata&=~(1<<17);//----将第18位(1位)置0---且不影响其它位的状态
  122.   }
  123.   else
  124.   {
  125.     RELARdata&=~(1<<16);//----将第17位(0位)置0---且不影响其它位的状态
  126.     RELARdata|=(1<<17);//----将第18位(0位)置1---且不影响其它位的状态
  127.   }
  128.   //----
  129.   if(flag10==false)
  130.   {
  131.     RELARdata|=(1<<18);//----将第19位(0位)置1---且不影响其它位的状态
  132.     RELARdata&=~(1<<19);//----将第20位(1位)置0---且不影响其它位的状态
  133.   }
  134.   else
  135.   {
  136.     RELARdata&=~(1<<18);//----将第19位(0位)置0---且不影响其它位的状态
  137.     RELARdata|=(1<<19);//----将第20位(0位)置1---且不影响其它位的状态
  138.   }
  139.   //----
  140.   if(flag11==false)
  141.   {
  142.     RELARdata|=(1<<20);//----将第21位(0位)置1---且不影响其它位的状态
  143.     RELARdata&=~(1<<21);//----将第22位(1位)置0---且不影响其它位的状态
  144.   }
  145.   else
  146.   {
  147.     RELARdata&=~(1<<20);//----将第21位(0位)置0---且不影响其它位的状态
  148.     RELARdata|=(1<<21);//----将第22位(0位)置1---且不影响其它位的状态
  149.   }
  150.   //----
  151.   if(flag12==false)
  152.   {
  153.     RELARdata|=(1<<22);//----将第23位(0位)置1---且不影响其它位的状态
  154.     RELARdata&=~(1<<23);//----将第24位(1位)置0---且不影响其它位的状态
  155.   }
  156.   else
  157.   {
  158.     RELARdata&=~(1<<22);//----将第23位(0位)置0---且不影响其它位的状态
  159.     RELARdata|=(1<<23);//----将第24位(0位)置1---且不影响其它位的状态
  160.   }

  161.   //----------------------------数值变化,与以前不同时才执行下面的程序
  162.   if(pre_data!=RELARdata)
  163.   {
  164.     digitalWrite(PIN_LATCH,LOW);
  165.     shiftOut(PIN_DATA,PIN_CLOCK,MSBFIRST,RELARdata);
  166.     digitalWrite(PIN_LATCH,HIGH);
  167.     delay(40);//---
  168.     pre_data=RELARdata;
  169.   }
  170. }
复制代码

怎么方便的操作3片595的输出端口(Y0~Y7 3组)------思路是按位操作来,但是一片这种思路可以,但是多路就不行 了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-3-29 19:58 , Processed in 0.042545 second(s), 17 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表