CD4094与hc164有相同的功能.在不希望输出端抖动的情况下,
用cd4094更适合,因为它有个输出使能端.
//此子程序在holtek mcu中验证过.
//----------------------------------------------
//;把一个字节发送到cd4094,串行,然后打开使能。
//;要发送的字节在i中,无出口参数.
//;如果只是发送一个字节,则在此子程序尾关死使能.
//;如果4094 级联多个,则必须连续调用4094后关死使能.
//;-------------------------------------------------------------
void TransByteForCD4094(unsigned char i)
{
unsigned char tem_data,count;
count = 8;
tem_data = i;
do
{
OE_4094 = 0; // enble 4094;
if (tem_data &0x80)
DATA_4094 = 1;
else
DATA_4094 = 0;
CLK_4094 = 1;
_delay(500);
CLK_4094 = 0;
tem_data = tem_data<<1;
count --;
}while(count !=0);
//OE_4094 = 1; // disenble 4094
}
//*****************************************************************
#include #include void TransByteForCd4904(unsigned char data); //**************************************** #define CLK_4094 PORTAbits.RA3 #define DATA_4094 PORTAbits.RA4 #define OE_4094 PORTAbits.RA2 /***************************************** ** 函数名: TransByteForCd4094 ** 输 入:data 要发送到CD4094的数据 ** 输 出: 无 ** 功能描述:把一个字节发送到cd4094,串行,然后打开使能。 必须把要用到的3个口线全部设置成输出状态。 原始程序用在pic18f4550中 ** 全局变量:无 ** 调用模块:无 ** 作 者: leejun@qingdaonews.com ** 日 期:2007/02/10 ** 版本 1.0 ******************************************/ void TransByteForCd4904(unsigned char data) { unsigned char count,i; count = 8; OE_4094 = 0; do { i = data &(0x80); if (i==0) DATA_4094 = 0; else DATA_4094 = 1; data = data <<1; CLK_4094 = 1; //时钟,再上升沿移出; Nop(); Delay10TCYx(100); CLK_4094 = 0; Delay10TCYx(100); count--; }while(count != 0); } /********************** //////////OE_4094 = 1; ***********************/ 因篇幅问题不能全部显示,请点此查看更多更全内容