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 <p18f248.h>
#include <delays.h>
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;
***********************/
文章评论(0条评论)
登录后参与讨论