吴鉴鹰单片机程序赏析【一】—595驱动16位LED

-回复 -浏览
楼主 2021-01-12 11:26:40
举报 只看此人 收藏本贴 楼主

一、主程序

/*******************************************************

* 程序名称:main.c

* 程序功能:主程序文件

* 程序作者:吴鉴鹰

* 创建时间:2014-3-10

* 修改时间:

* 程序版本:V0.1

******************************************************/

/*

* 包含的头文件

*/

#include "reg51.h"

#include "inc/hc595.h"

#include "inc/delay.h"

#include "intrins.h"



/* 存储待发送的数据 */

code unsigned char ucDataOneTab[16] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};

code unsigned char ucDataTwoTab[16] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01, 0x02, 0x04, 0x08, 0x10, 0x20,0x40,0x80};

//code unsigned char ucDataOneTab[16] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};

//code unsigned char ucDataTwoTab[16] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80, 0x40, 0x20, 0x10, 0x08, 0x04,0x02,0x01};


/*******************************************************

* 程序名称:int main()

* 程序功能:主程序文件

* 程序作者:吴鉴鹰

* 创建时间:2014-3-10

* 修改时间:

* 程序版本:V0.1

******************************************************/

int main()

{

unsigned int i;


while (1)

{

for (i = 0; i < 16; i++ ) //改成16个依次亮i<8改成i<16

{

SendData(ucDataOneTab[i], ucDataTwoTab[i]);

Delay1ms(1000);

}

}


return 0;

}


二、595驱动程序

/*******************************************************

* 程序名称:hc595.c

* 程序功能:595的应用文件

* 程序作者:吴鉴鹰

* 创建时间:2014-3-10

* 修改时间:

* 程序版本:V0.1

******************************************************/

/*

* 包含头文件

*/

#include "inc/hc595.h"

#include "reg51.h"


/*

* 定义引脚

*/

/* 时钟信号线引脚定义 */

sbit HC595CLK = P0^5;

/* 片选信号线引脚定义 */

sbit HC595RCK = P0^6;

/* 数据输入引脚定义 */

sbit HC595DATA = P0^7;



/******************************************************

* 函数名称:SendData

* 函数功能:74HC595数据的发送

* 入口参数:unsigned int uiDataOne, unsigned int uiDataTwo

* 出口参数:void

*******************************************************/

void SendData(unsigned int uiDataOne, unsigned int uiDataTwo)

{

unsigned int i = 0;

/* 将片选信号置为低电平 */

HC595RCK = 0;

/* 输入第一个数据:uiDataOne */

for (i = 0; i < 8; i++)

{

/* 给出脉冲信号,首先将CLK置为0 */

HC595CLK = 0;

if (0 != (uiDataOne & 0x80))

{

HC595DATA = 1;

}

else

{

HC595DATA = 0;

}

/* 给出脉冲信号,首先将CLK置为1 */

HC595CLK = 1;

/* 准备第二个数据 */

uiDataOne = uiDataOne << 1;

}

/* 输入第二个数据:uiDataTwo */

for (i = 0; i < 8; i++)

{

/* 给出脉冲信号,首先将CLK置为0 */

HC595CLK = 0;

if (0 != (uiDataTwo & 0x80))

{

HC595DATA = 1;

}

else

{

HC595DATA = 0;

}

/* 给出脉冲信号,首先将CLK置为1 */

HC595CLK = 1;

/* 准备第二个数据 */

uiDataTwo = uiDataTwo << 1;

}

/* 将片选信号置为高电平 */

HC595RCK = 1;

}


三、延时程序



/*************************************************

* 文件名称:delay.c

* 文件功能:延时函数实现文件

* 文件作者:吴鉴鹰

* 创建时间:2014-3-10

* 修改时间:

* 文件版本:V0.1

*************************************************/

#include "inc/delay.h"


/***********************************************

* 函数名称:Delay1ms

* 函数功能:延时函数

* 入口参数:

* 出口参数:

***********************************************/

void Delay1ms(int i)

{

int j;

for(; i > 0; i--)

{

for(j = 0; j < 110; j++);

}

}

喜欢本文的亲们欢迎点赞

| 单 | 片| 机 | 精 | 讲 | 吴| 鉴 | 鹰 |

微信第一单片机分享 最受欢迎图文公号

微信号:wujianying_danpianji

《2015.12.6》● 技术源于积累,成功来自执着——单片机精讲吴鉴鹰
我要推荐
转发到

友情链接