微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 第17节:两片联级74HC595驱动16个LED灯的基本驱动程序

第17节:两片联级74HC595驱动16个LED灯的基本驱动程序

时间:11-22 来源:互联网 点击:

<1;

}

hc595_st_dr=0; //ST引脚把两个寄存器的数据更新输出到74HC595的输出引脚上并且锁存起来

delay_short(15);

hc595_st_dr=1;

delay_short(15);

hc595_sh_dr=0; //拉低,抗干扰就增强

hc595_st_dr=0;

hc595_ds_dr=0;

}

void led_flicker() ////第三区 LED闪烁应用程序

{

switch(ucLedStep)

{

case 0:

if(uiTimeCnt>=const_time_level) //时间到

{

uiTimeCnt=0; //时间计数器清零

hc595_drive(0x55,0x55);

ucLedStep=1; //切换到下一个步骤

}

break;

case 1:

if(uiTimeCnt>=const_time_level) //时间到

{

uiTimeCnt=0; //时间计数器清零

hc595_drive(0xaa,0xaa);

ucLedStep=0; //返回到上一个步骤

}

break;

}

}

void T0_time() interrupt 1

{

TF0=0; //清除中断标志

TR0=0; //关中断

if(uiTimeCnt<0xffff) //设定这个条件,防止uiTimeCnt超范围。

{

uiTimeCnt++; //累加定时中断的次数,

}

TH0=0xf8; //重装初始值(65535-2000)=63535=0xf82f

TL0=0x2f;

TR0=1; //开中断

}

void delay_short(unsigned int uiDelayShort)

{

unsigned int i;

for(i=0;i

{

; //一个分号相当于执行一条空语句

}

}

void delay_long(unsigned int uiDelayLong)

{

unsigned int i;

unsigned int j;

for(i=0;i

{

for(j=0;j<500;j++) //内嵌循环的空指令数量

{

; //一个分号相当于执行一条空语句

}

}

}

void initial_myself() //第一区 初始化单片机

{

TMOD=0x01; //设置定时器0为工作方式1

TH0=0xf8; //重装初始值(65535-2000)=63535=0xf82f

TL0=0x2f;

}

void initial_peripheral() //第二区 初始化外围

{

EA=1; //开总中断

ET0=1; //允许定时中断

TR0=1; //启动定时中断

}

总结陈词:

这节讲了74HC595的驱动程序,它是一次控制16个LED同时亮灭的,在实际中应用不太方便,如果我们想要像单片机IO口直接控制LED那样方便,我们该怎么编写程序呢?欲知详情,请听下回分解-----把74HC595驱动程序翻译成类似单片机IO口直接驱动的方式。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top