如何对74hc595进行c语言编程

2024-12-26 12:30:34
推荐回答(1个)
回答1:

#include //51芯片管脚定义头文件
#include //内部包含延时函数 _nop_();

#define uchar unsigned char
#define uint unsigned int

sbit Ds=P1^5; //串行数据输入
sbit SHcp=P1^6; //移位时钟脉冲
sbit STcp=P1^7; //输出锁存器控制脉冲
sbit OE=P1^1; //数码管片选
sbit CS_1302=P1^4; //ds1302片选

uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,
0x77,0x7c,0x39,0x5e,0x79,0x71}; //数码管编码(0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F)

uchar num;

void delay(uint );
void display();

/*******************************************************
* *
* 延时函数 *
* *
*******************************************************/
void delay(uint dt)
{
uint i;
uchar bt;
for(i=0;i for(bt=0;bt<200;bt++);
}

void WR_595(uchar a )
{
uchar b;
OE=0;
for(b=0;b<=7;b++)
{
Ds=a&0x80; //取最高位

a<<=1; /*左移位*/
SHcp=0; /*产生上生沿*/

SHcp=1;
delay(100);
//OE=1;
}

}
/*-------------------------------------------------------------------------------
打开锁存,更新74595输出子程序
---------------------------------------------------------------------------------*/
void Out_595(void)
{
STcp=0;
_nop_();
_nop_();
STcp=1; /*上升沿锁存数据*/

}

void display(void)
{ for(;num<16;num++)
{WR_595(table[num]);//显示数码管的数字
WR_595(0xfe);//显示数码管序号
Out_595();

}
}

void main()
{
while(1)
{ //WR_595(0xfe);
//Out_595();
display();
if(num>=16)
num=0;

}
}

这是点亮数码管的程序 你可以试试看