前言
本文记录的是C51单片机的数码管显示
一、数码管电路图


二、显示原理
6个数码管是通过两个锁存器控制的。
一个锁存器是用来控制打开多少个数码管
另外一个锁存器是用来控制显示数码的数字
思路:打开位选,然后让P0输出打开多少个数码管,关闭位选。接着打开段选,让数码管显示什么数字,接着关闭段选
三、代码
1.nixie_tube.c
#include "./User/nixie_tube/nixie_tube.h"
//数码管表 0-f
const uint8_t smg_table[] =
{
0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,
0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71
};
//数码管数量0-6
const uint8_t smg_num[] = {0xff, 0xfe, 0xfc, 0xf8, 0xf0, 0xe0, 0xc0};
sbit dula = P2^6;
sbit wela = P2^7;
/**
* @brief 控制数码管显示
* @param index:控制多少个数码管亮; figure:控制数码管显示什么数字
* @retval None
*/
void seg_display(unsigned char index, unsigned char figure)
{
if(0 == index) { //如果不需要显示,就退出
return ;
}
wela = 1; //打开位选
P0 = smg_num[index]; //选中第一个数码管
wela = 0; //关闭位选
dula = 1; //打开段选
P0 = smg_table[figure]; //显示“6”
dula = 0; //关闭段选
return ;
}
2.nixie_tube.h
代码如下(示例):
#ifndef __NIXIE_TUBE_H__
#define __NIXIE_TUBE_H__
#include <reg52.h>
#include "./User/common/common.h"
void seg_display(unsigned char index, unsigned char figure);
#endif /* __NIXIE_TUBE_H__ */

806

被折叠的 条评论
为什么被折叠?



