栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【蓝桥杯】万能数码管显示

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【蓝桥杯】万能数码管显示

数码管的连接图




需要注意的是这里的数码管采用的是共阴极数码管,

动态数码管的显示原理

将所有数码管的段码线并联在一起,即共用段码线,位选线独立,最终由位选线来控制是哪一位数码管显示。
动态扫描显示:轮流向各数码管送出段码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示,需要不停刷新显示。
动态显示的亮度比静态显示要差一些,所以在选择限流电阻时应略小于静态显示电路中的。 同时要注意消影。
上图的Y7C控制段选,Y6C的控制位选
这里举个例子来理解动态显示

万能显示代码 smg.c
#include 

void Conversion(u8 *buf,u8 *duanma)
{
  u8 i,j=0,temp;
  for(i=0;i<8;i++,j++)
  {
    switch(buf[j])
	{
	  //根据要显示的字符获取共阳极数码管编码
			case '0': temp = 0xc0; break;
			case '1': temp = 0xf9; break;
			case '2': temp = 0xa4; break;
			case '3': temp = 0xb0; break;
			case '4': temp = 0x99; break;
			case '5': temp = 0x92; break;
			case '6': temp = 0x82; break;
			case '7': temp = 0xf8; break;
			case '8': temp = 0x80; break;
			case '9': temp = 0x90; break;
			case 'A': temp = 0x88; break;
			case 'B': temp = 0x83; break;
			case 'C': temp = 0xc6; break;
			case 'D': temp = 0xA1; break;
			case 'E': temp = 0x86; break;
			case 'F': temp = 0x8E; break;
			case 'H': temp = 0x89; break;
			case 'L': temp = 0xC7; break;
			case 'N': temp = 0xC8; break;
			case 'P': temp = 0x8c; break;
			case 'U': temp = 0xC1; break;
			case '-': temp = 0xbf; break;
			case ' ': temp = 0xff; break;
			default: temp = 0xff;
	}
	if(buf[j+1]=='.')
	{
	  temp = temp&0x7f;
	  j++;
	}
	duanma[i] = temp;
  }
}
void display(u8 *duanma,u8 position)
{
  P0 = 0xFF;//段码消影
  P2 = (P2&0x1F)|0xE0;//允许段码更新
  P2 &= 0x1F;
					 
  P0 = 1< 
smg.h 
#ifndef __smg_H__
#define __smg_H__
void Conversion(u8 *buf,u8 *duanma);
void display(u8 *duanma,u8 positon);

#endif
config.h
#ifndef __CONFIG_H__
#define __CONFIG_H__

#include 
#include 
#include 

#define u8 unsigned char
#define u16 unsigned int
#define u32	unsigned long

#endif
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/714055.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号