从网上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 编辑 ]
暂无评论,赶紧抢沙发吧