armfly 发表于 2012-10-18 12:01:58

【安富莱】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]
查看完整版本: 【安富莱】LED-5604 LED数码管显示屏相关资源