[讨论] 从网上Down的程序疑问,求解

eric.liu   2010-1-9 11:18 楼主
从网上Down的程序疑问,求解

CD4094驱动程序
CD4094用的比较广...可以用在静态显示...串口转并口...驱动数码管LED...
程序...
#include
#include

#define uint  unsigned int
#define uchar unsigned char

/*
sbit K1   =  P3^4;
sbit K2   =  P3^5;
sbit K3   =  P2^4;
sbit K4   =  P2^5;
*/

sbit STR  =  P2^0;//定义CD4094各端口;
sbit DATA =  P2^1;
sbit CLK  =  P2^2;


//code unsigned char C51BOX2[3] _at_ 0x43;

void Out_4094(uchar data1);//CD4094写数据子函数;
void Delay(uint a);     //
延时子函数;

         //主程序开始;
void main()
{
  uchar i;       //
无限循环
;
  while(1)
  {
    for(i=0;i<255;i++)    //
CD4094端口的LED不断从0-255显示
;    不用写LED的数组编码吗?

     {
       Delay(10000);    //
延时
;
    Out_4094(i);     //
调用显示子函数;
调用 Out_4094(1) 就能显示1了吗?

    Delay(10000);    //
延时;
  }
  }
  //while(1);
}

void Out_4094(uchar data1) //CD4094子函数;
data1
是寄存器吗?

{
  uchar i;       //
定义子函数;
  STR="0";       //
保持然来的状态不变
;
  for(i=0;i<8;i++)     //
写八位数据进
CD4094;
  {
   if(data1&0x01)     //
判断并发串行数据;
为什么要跟0X01相与?是最低位的意思吗?

    {
   DATA="1";      //
发高电平
;
}
else
{
   DATA="0";      //
发低电平
;
}
    CLK="0";       //
形成上升延脉冲
;
_nop_();
_nop_();      //
延时
;
_nop_();
CLK=1;
data1>>=1;      //
数据移位,送下一位数据
;
   }
   STR="1";       //
数据送完;更新显示
;
}

void Delay(uint a)     //延时子函数;
{
  uint b;
  for(b=0;b }



[ 本帖最后由 eric.liu 于 2010-1-9 11:20 编辑 ]

回复评论

暂无评论,赶紧抢沙发吧
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复