【安富莱】LED-5604 LED数码管显示屏相关资源
购买本产品,请访问安富莱电子官方淘宝店: http://item.taobao.com/item.htm?spm=2013.1.0.111.bcee01&id=20475732595购买本产品,请访问安富莱电子官方淘宝店: http://item.taobao.com/item.htm?spm=2013.1.0.111.bcee01&id=20475732595
型号:LED5604 (四位)产品名称:LED数码管显示屏
产品规格:供电电压 : 3-5V
供电电流 : 3.3V供电全亮时70mA; 5V供电全亮时150mA工作温度 :-40 ~ 85℃ (工业级)
内部数码管 :4个红色高亮,尺寸 0.5“外壳尺寸 :宽79mm x 高43mm x 深21.5mm
推荐面板开孔尺寸 :宽76mm x 高39.2mm
推荐用户的板子使用KF2510-5P插座, 线序为:VCC、CLK、SDI、GND、LCK
产品优势:1、静态显示,显示稳定。内置4片74HC595,无需CPU动态扫描,可以让单片机做其它的事情
2、只需要占用CPU的3个普通IO (输出口)即可驱动,无论级联多少个显示屏,均只需占用3个IO。3、兼容3.3V和5V系统。可以给显示模块提供3.3V或5V电源。
4、控制IO口输入端有缓冲器,IO口集成上拉电阻,抗干扰性能好(特别是连接线较长时)5、完美解决单片机上电复位期间的乱显问题(通过硬件方式)。保证单片机复位期间,LED数码管无显示。
6、级联输出口带限流保护。即使你将输入口和级联输出口搞反,也不会损坏显示模块。
产品靓照:
http://img02.taobaocdn.com/imgextra/i2/299314119/T2dAaCXj8bXXXXXXXX_!!299314119.jpg
http://img02.taobaocdn.com/imgextra/i2/299314119/T2R.GKXeVbXXXXXXXX_!!299314119.jpghttp://img02.taobaocdn.com/imgextra/i2/299314119/T22VOOXnFaXXXXXXXX_!!299314119.jpg
http://img04.taobaocdn.com/imgextra/i4/299314119/T21FiWXltXXXXXXXXX_!!299314119.jpghttp://img03.taobaocdn.com/imgextra/i3/299314119/T2Tk9NXgxXXXXXXXXX_!!299314119.jpg
http://img04.taobaocdn.com/tps/i4/T10B2IXb4cXXcHmcPq-85-85.gif 应用程序编程示例:
请到我们公司的论坛 bbs.armfly.com 下载驱动文件bsp_LED595.c 和 .h 文件,可以移植到任意单片机。LED595_DispStr(0, "1.234"); /* 第1个显示屏显示 1.234 */
LED595_DispStr(1, "8.8.8.8."); /* 第2个显示屏全部笔画点亮 */LED595_DispStr(3, " "); /*第4个显示屏显示空格,等于不显示 */
LED595_DispStr(7, "-0.23"); /*第8个显示屏显示 -0.23 */
例程下载地址: http://www.armbbs.cn/forum.php?mod=viewthread&tid=329STM8-006_4位LED数码管(74HC595静态)显示例程
下载该例程后,请解压rar文件,核心驱动代码在: bsp_led595.c 和 bsp_led595.h 两个文件。
bsp_led595.h 文件内容如下:
#ifndef _BSP_LED595_H
#define _BSP_LED595_H
void LED595_InitHard(void);
void LED595_DispOn(void);
void LED595_DispOff(void);
void LED595_DispClr(void);
void LED595_DispTestOn(void);
void LED595_DispStr(uint8_t _ucSN, char *_ucaBuf);#endif
bsp_led595.c 文件内容如下:/*
*********************************************************************************************************
*
* 模块名称 : LED数码管(74HC595驱动,静态显示)驱动模块
* 文件名称 : bsp_led595.c
* 版 本 : V1.0
* 说 明 : 驱动74HC595静态驱动的四位LED数码管; 支持级联操作。
* 修改记录 :
* 版本号日期 作者 说明
* v1.0 2012-10-12 armflyST固件库版本 V2.1.0
*
* Copyright (C), 2012-2013, 安富莱电子www.armfly.com
*
*********************************************************************************************************
*/
#include "stm8s.h"
#include <stdio.h>
#include <string.h>#include "bsp_led595.h"
#define LED_COUNT_PER_MODULE 4 /* 每个LED模块包含的数码管个数 */
#define MODULE_COUNT 2 /* LED模块的个数,支持级连 *//*
1.安富莱LED5604型 4位LED数码管模块 接线定义 (只需要5根杜邦线连接)
【LED模块排针】 【开发板接口】
VCC ----------- 3.3V
SCK ----------- PC5/SPI_SCK
SDI ----------- PC6/SPI_MOSI
GND ----------- 无需软件控制
LCK ----------- PA3
*/
#define SCK_PORT GPIOC
#define SCK_PIN GPIO_PIN_5
#define SDI_PORT GPIOC
#define SDI_PIN GPIO_PIN_6#define LCK_PORT GPIOA
#define LCK_PIN GPIO_PIN_3
#if 0 /* 使用固件库函数,一次翻转约 1.167us */
#define SCK_1() GPIO_WriteHigh(SCK_PORT, SCK_PIN)
#define SCK_0() GPIO_WriteLow(SCK_PORT, SCK_PIN) #define SDI_1() GPIO_WriteHigh(SDI_PORT, SDI_PIN)
#define SDI_0() GPIO_WriteLow(SDI_PORT, SDI_PIN)
#define LCK_1() GPIO_WriteHigh(SCK_PORT, LCK_PIN)
#define LCK_0() GPIO_WriteLow(SCK_PORT, LCK_PIN)
#else /* 直接操作寄存器,一次翻转约 125ns; 一个完整的SCK 实测 1.56us */
#define SCK_1() SCK_PORT->ODR |= SCK_PIN
#define SCK_0() SCK_PORT->ODR &= (uint8_t)(~SCK_PIN); #define SDI_1() SDI_PORT->ODR |= SDI_PIN
#define SDI_0() SDI_PORT->ODR &= (uint8_t)(~SDI_PIN);
#define LCK_1() LCK_PORT->ODR |= LCK_PIN
#define LCK_0() LCK_PORT->ODR &= (uint8_t)(~LCK_PIN);
#endif/*
共阳数码管0-3和的16进制代码
从ASCII字符空格开始 ‘ ’
*/
#define CHAR_SUB 0xDF /* '-' 的显示代码 */
#define CHAR_F 0x87 /* 'F' */
#define CHAR_A 0x06 /* 'A' */
#define CHAR_n 0xD6 /* 'n' */
#define CHAR_S 0x8A /* 'S' */
#define CHAR_E 0x83 /* 'E' */
#define CHAR_O 0x22 /* 'O' */
#define CHAR_o 0xD2 /* 'o' */
#define CHAR_SPACE 0xFF /* 不显示 */
#define CHAR_P 0x07 /* 不显示 */
#define CHAR_TEST_ON 0x00 /* 全点亮的代码 */
#define DOT_MASK 0xFD /* 小数点MASK *//*
; 数码管笔画定义:
; AAAAAA
; F B
; F B
; F B
; GGGGGG
; E C
; E C
; E C
; DDDDDDdp
; 74HC595数据位对应关系 (0表示点亮,1表示灭); d6d6d6d6
; d5 d7
; d5 d7
; d5 d7
; d4d4d4d4
; d3 d1
; d3 d1
; d3 d1
; d2d2d2d2d0
;------------------------------
*/
#define DOT_FLAG 0xFE/*
【ASCII区】
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
*/
const uint8_t g_CharCode[] =
{
0xFF, // 空格 = 0x20
0xFF, // !
0xFF, // "
0xFF, // #
0xFF, // $
0xFF, // %
0xFF, // &
0xFF, // '
0xFF, // (
0xFF, // )
0xFF, // *
0xFF, // +
0xFF, // ,
0xEF, // - 1110 1111
0xFF, // . 1111 1110
0xFF, // /
/*
; d6d6d6d6
; d5 d7
; d5 d7
; d5 d7
; d4d4d4d4
; d3 d1
; d3 d1
; d3 d1
; d2d2d2d2d0
*/
0x11, // 0 0001 0001
0x7D, // 1 0111 1101
0x23, // 2 0010 0011
0x29, // 3 0010 1001
0x4D, // 4 0100 1101
0x89, // 5 1000 1001
0x81, // 6 1000 0001
0x3D, // 7 0011 1101
0x01, // 8 0000 0001
0x09, // 9 0000 1001 0xFF, // :
0xFF, // ;
0xFF, // <
0xFF, // =
0xFF, // >
0xFF, // ?
0xFF, // @
0x06, // A
0xC2, // B
0xA3, // C
0x52, // D
0x83, // E
0x87, // F
0x0A, // G
0x46, // H
0xE7, // I
0x7A, // J
0xC7, // K
0xE3, // L
0x26, // M
0xD6, // N
0xD2, // O
0x07, // P
0xD2, // Q
0xD7, // R
0x8A, // S
0xDE, // T
0x62, // U
0xF2, // V
0xF2, // W
0x46, // X
0x4E, // Y
0x13, // Z 0xFF, // [:
0xFF, // \:
0xFF, // ]:
0xFF, // ^:
0xFB, // _:
0xEF, // `:
0x06, // a
0xc2, // b
0xd3, // c
0x52, // d
0x83, // e
0x87, // f
0x0a, // g
0x46, // h
0xe7, // i
0x7a, // j
0xc7, // k
0xe3, // l
0x26, // m
0xd6, // n
0xd2, // o
0x07, // p
0xd2, // q
0xd7, // r
0x8a, // s
0xde, // t
0x62, // u
0xf2, // v
0xf2, // w
0x46, // x
0x4E, // y
0x13, // z
};static uint8_t s_ucLedBuf; /* 定义LED数码管显示缓冲区 */
static void LED595_ConfigGPIO(void);
static void LED595_LockOutData(void);
static void LED595_Delay(void);
static void LED595_RefeshDisp(void);/*
*********************************************************************************************************
* 函 数 名: LED595_InitHard
* 功能说明: 初始化led数码管模块
* 形 参:无
* 返 回 值: 无
*********************************************************************************************************
*/
void LED595_InitHard(void)
{
LED595_ConfigGPIO();
LED595_DispClr();
}
/*
*********************************************************************************************************
* 函 数 名: LED595_DispOff
* 功能说明: 暂时关闭全部显示(可用于闪烁)
* 形 参: 无
* 返 回 值: 无
*********************************************************************************************************
*/
void LED595_DispOff(void)
{
LCK_1(); /* LCK = 1 时, 全部不显示 */
}/*
*********************************************************************************************************
* 函 数 名: LED595_DispOn
* 功能说明: 恢复全部显示(可用于闪烁)
* 形 参: 无
* 返 回 值: 无
*********************************************************************************************************
*/
void LED595_DispOn(void)
{
LED595_LockOutData();
}
/*
*********************************************************************************************************
* 函 数 名: LED595_DispClr
* 功能说明: 清屏
* 形 参:无
* 返 回 值: 无
*********************************************************************************************************
*/
void LED595_DispClr(void)
{
memset(s_ucLedBuf, CHAR_SPACE, LED_COUNT_PER_MODULE * MODULE_COUNT); /* 先清楚显示缓冲区,显示空白 */
LED595_RefeshDisp(); /* 刷新LED数码管 */
}/*
*********************************************************************************************************
* 函 数 名: LED595_DispTestOn
* 功能说明: 显示全8带小数点
* 形 参:无
* 返 回 值: 无
*********************************************************************************************************
*/
void LED595_DispTestOn(void)
{
memset(s_ucLedBuf, CHAR_TEST_ON, LED_COUNT_PER_MODULE * MODULE_COUNT);/* 先清楚显示缓冲区,显示空白 */
LED595_RefeshDisp(); /* 刷新LED数码管 */
}
/*
*********************************************************************************************************
* 函 数 名: LED595_DispStr
* 功能说明: 控制4位LED数码管显示字符串. (支持插入小数点)
* 形 参: _ucSN: 数码管模块的编号,0表示1个,1表示第2个级联的
* _ucaBuf : 字符串,以0结束。 支持字符串中插入小数点。 比如 “1.23”
* 返 回 值: 无
*********************************************************************************************************
*/
void LED595_DispStr(uint8_t _ucSN, char *_ucaBuf)
{
uint8_t ucLen;
uint8_t i;
uint8_t offset; offset = _ucSN * LED_COUNT_PER_MODULE; /* 计算偏移地址 */
ucLen = 0;
/* 未作数据有效性判断 */
for (i = 0; i < 32; i++)
{
/* 首位小数点 */
if ((i == 0) && (_ucaBuf == '.'))
{
s_ucLedBuf = DOT_FLAG;
ucLen++;
}
else
{
if (_ucaBuf == '.')
{
s_ucLedBuf = (g_CharCode - ' '] & DOT_FLAG);
ucLen++;
i++;
if (ucLen >= LED_COUNT_PER_MODULE)
{
break;
}
}
else
{
s_ucLedBuf =g_CharCode - ' '];
ucLen++;
if (ucLen >= LED_COUNT_PER_MODULE)
{
break;
}
}
}
}
for (i = ucLen; i < LED_COUNT_PER_MODULE; i++)
{
s_ucLedBuf = CHAR_SPACE;
ucLen++;
} LED595_RefeshDisp(); /* 刷新LED数码管 */
}
/*
*********************************************************************************************************
* 函 数 名: LED595_ConfigGPIO
* 功能说明: 配置数码管模块的控制口线
* 形 参:无
* 返 回 值: 无
*********************************************************************************************************
*/
static void LED595_ConfigGPIO(void)
{
/* 初始化OLED接口,配置为推挽输出 */
GPIO_Init(LCK_PORT, (GPIO_Pin_TypeDef)LCK_PIN, GPIO_MODE_OUT_PP_HIGH_FAST);
GPIO_Init(SDI_PORT, (GPIO_Pin_TypeDef)SDI_PIN, GPIO_MODE_OUT_PP_HIGH_FAST);
GPIO_Init(SCK_PORT, (GPIO_Pin_TypeDef)SCK_PIN, GPIO_MODE_OUT_PP_HIGH_FAST);
}/*
*********************************************************************************************************
* 函 数 名: LED_Delay
* 功能说明: 时序延迟。如果太快了,LED数码管可能乱码。
* 形 参:无
* 返 回 值: 无
*********************************************************************************************************
*/
static void LED595_Delay(void)
{
//uint8_t i;
//for (i = 0; i < 32; i++);
// 实际测试,无需延迟也很正常
}
/*
*********************************************************************************************************
* 函 数 名: LED595_LockOutData
* 功能说明: 发送1个输出锁存脉冲
* 形 参:无
* 返 回 值: 无
*********************************************************************************************************
*/
static void LED595_LockOutData(void)
{
LCK_0();
LCK_1();
LCK_0();
}/*
*********************************************************************************************************
* 函 数 名: LED595_RefeshDisp
* 功能说明: 将全局显示缓冲区的显示数据刷新到LED数码管
* 形 参:无
* 返 回 值: 无
*********************************************************************************************************
*/
static void LED595_RefeshDisp(void)
{
uint8_t i;
uint8_t k;
uint8_t dd;
for (k = LED_COUNT_PER_MODULE * MODULE_COUNT; k > 0 ; k--)
{
dd = s_ucLedBuf;
for (i = 0; i < 8; i++)
{
if (dd & 0x80)
{
SDI_1();
}
else
{
SDI_0();
} LED595_Delay();
SCK_0(); ;
LED595_Delay();
SCK_1();
dd <<= 1;
}
}
LED595_LockOutData();
}
/***************************** 安富莱电子www.armfly.com(END OF FILE) *********************************/
页:
[1]