前言:
之前我们学习了解了
LK32T102单片机 操作GPIO实现 主按钮、矩阵按键 和 蜂鸣器
,今天我们来学习一下
LK32T102 单片机的显示部分:
数码管
;
我们常用的数码管 根据
公共端接 地/正极
分为:
共阴数码管
和
共阳数码管
,根据显示位数可分为:
一位数码管
、
两位数码管
、
四位数码管
和
八位数码管
,我今天为 大家介绍的是
一位共阴数码管 和 四位共阴数码管
。
一、一位共阴数码管
1. 一位数共阴码管引脚图
2. 一位共阴数码管 原理图
这里的一位数码管我采用的是 CD4511芯片控制 段选,因为这里是一位数码管,所以我们也就没必要对 位选 进行控制。然后我们 CD4511芯片 是通过4个输入IO口 来控制段选,
芯片图详解如下图所示:
(1)CD4511 芯片
3. 代码部分
<DS2.h>
#ifndef _DS2_H_
#define _DS2_H_
#include <SC32F5832.h>
#include <DevInit.h>
void smg_4511_Init(void); // 一位数码管-管脚 初始化
void smg_4511_display(u8 key); // 一位数码管 显示函数
#endif
<DS2.c>
#include <SC32F5832.h>
#include <DevInit.h>
#include <DS2.h>
#define A0_0 PA_OUT_LOW(0)
#define A0_1 PA_OUT_HIGH(0)
#define A1_0 PA_OUT_LOW(1)
#define A1_1 PA_OUT_HIGH(1)
#define A2_0 PA_OUT_LOW(2)
#define A2_1 PA_OUT_HIGH(2)
#define A3_0 PA_OUT_LOW(3)
#define A3_1 PA_OUT_HIGH(3)
//--- 一位数码管-管脚 初始化 ---//
void smg_4511_Init()
{
GPIO_AF_SEL(DIGITAL,PA,0,0) , PA_OUT_ENABLE(0);
GPIO_AF_SEL(DIGITAL,PA,1,0) , PA_OUT_ENABLE(1);
GPIO_AF_SEL(DIGITAL,PA,2,0) , PA_OUT_ENABLE(2);
GPIO_AF_SEL(DIGITAL,PA,3,0) , PA_OUT_ENABLE(3); // 初始化:数字模式、第0种功能、输出使能
}
//--- 一位数码管 显示函数 ---//
void smg_4511_display(u8 key)
{
switch(key)
{
case 0: A3_0, A2_0, A1_0, A0_0; break; // 0
case 1: A3_0, A2_0, A1_0, A0_1; break; // 1
case 2: A3_0, A2_0, A1_1, A0_0; break; // 2
case 3: A3_0, A2_0, A1_1, A0_1; break; // 3
case 4: A3_0, A2_1, A1_0, A0_0; break; // 4
case 5: A3_0, A2_1, A1_0, A0_1; break; // 5
case 6: A3_0, A2_1, A1_1, A0_0; break; // 6
case 7: A3_0, A2_1, A1_1, A0_1; break; // 7
case 8: A3_1, A2_0, A1_0, A0_0; break; // 8
case 9: A3_1, A2_0, A1_0, A0_1; break; // 9
case 10: A3_1, A2_1, A1_1, A0_1; break; // 消隐:不显示
}
}
这里为将
4个IO口初始化
,并且封装了一个
一位共阴数码管显示函数
,
需要显示什么数值直接将
函数中的 key
替换成
你要显示的数值
;
二、四位共阴数码管
1. 四位共阴数码管引脚图
2. 四位共阴数码管 原理图
四位数码管显示我们这里采用的是 74SLS138 芯片来实现位选、74HC245芯片来实现段选,这里我用采用了 11个 IO口(3个IO口用来控制位选(1-4),8个IO口用来控制段选(a-dp)),
芯片图详解如下图所示:
(1)74LS138 芯片
(2)74HC245 芯片
3. 代码部分
<DS2.h>
#ifndef _DS2_h_
#define _DS2_h_
#include <SC32F5832.h>
#include <DevInit.h>
void shumaguan_Init(void); // 4位共阴数码管 初始化
void smg_displays(uint8_t wei,uint8_t value); // 4位共阴数码管 显示
#endif
<DS2.c>
/* Includes -----------------------------------------------------------------*/
#include <SC32F5832.h>
#include <DevInit.h>
#include <LED.h>
#include "delay.h"
#include <GPIO.h>
#include "smg_4.h"
/* define -----------------------------------------------------------------*/
#define A0_1 PA_OUT_HIGH(8)
#define A0_0 PA_OUT_LOW(8)
#define A1_1 PA_OUT_HIGH(9)
#define A1_0 PA_OUT_LOW(9)
#define A2_1 PA_OUT_HIGH(10)
#define A2_0 PA_OUT_LOW(10) // 3个段选位
uint8_t shuzhi[11] = {0x003F,0x0006,0x005B,0x004F,0x0066,0x006D,0x007D,0x0007,0x007F,0x006F,0X00FF}; // 储存显示内容:0-9、消隐
//--- 4位共阴数码管 初始化 ---//
void shumaguan_Init()
{
// 为 138 管脚使能
PA_OUT_ENABLE(0);
PA_OUT_ENABLE(1);
PA_OUT_ENABLE(2);
PA_OUT_ENABLE(3);
PA_OUT_ENABLE(4);
PA_OUT_ENABLE(5);
PA_OUT_ENABLE(6);
PA_OUT_ENABLE(7);
PA_OUT_ENABLE(8);
PA_OUT_ENABLE(9);
PA_OUT_ENABLE(10);
// 138 管脚初始化
GPIO_AF_SEL(DIGITAL,PA,0,0);
GPIO_AF_SEL(DIGITAL,PA,1,0);
GPIO_AF_SEL(DIGITAL,PA,2,0);
GPIO_AF_SEL(DIGITAL,PA,3,0);
GPIO_AF_SEL(DIGITAL,PA,4,0);
GPIO_AF_SEL(DIGITAL,PA,5,0);
GPIO_AF_SEL(DIGITAL,PA,6,0);
GPIO_AF_SEL(DIGITAL,PA,7,0);
GPIO_AF_SEL(DIGITAL,PA,8,0);
GPIO_AF_SEL(DIGITAL,PA,9,0);
GPIO_AF_SEL(DIGITAL,PA,10,0);
}
//--- 4位共阴数码管 显示 ---//
void smg_displays(uint8_t wei,uint8_t value)
{
switch(wei)
{
case 0:
A0_0,A1_0,A2_0;break;
case 1:
A0_0,A1_0,A2_1;break;
case 2:
A0_0,A1_1,A2_0;break;
case 3:
A0_0,A1_1,A2_1;break;
}
if(wei == 2)
{
PA->OUT |= shuzhi[value]|0x80;
}
else
{
PA->OUT |= shuzhi[value];
}
delay_ms(5);
PA->OUT &= 0XFF00; //消隐函数
}
这里我对
3个位选IO口
和
8个段选IO口
初始化,并封装了 4位共阴数码管显示函数,
第一变量 wei:操作变量显示在4位中的 哪一位,第二变量 value:操作显示的值 是什么