IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 51单片机:数码管(静态+动态) -> 正文阅读

[嵌入式]51单片机:数码管(静态+动态)

先不解释静态和动态有什么区别,看完你就明白了(主要是我菜,解释不清)。

单片机上没有静态数码管模块,虽然没有,但依然可以 在动态数码管电路中使用其中一个来学习静态数码管显示。

数码管简介:

数码管51单片机上的数码管,通俗一点讲就是多个led组装在一起,数码管的点亮和led差不多(复杂一点),按发光二极管单元连接方式可分为共阳极数码管和共阴极数码管。

共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管,共阳数码管在应用时应将公共极 COM 接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮,反之就不亮。

共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管,共阴数码管在应用时应将公共极COM 接到地线GND 上,当某一字段发光 二极管的阳极为高电平时,相应字段就点亮,反之就不亮。

我的单片机是共阴数码管,原理图如下:

?

?

数码管驱动芯片and译码器:

因为共阴数码管是要靠单片机 IO口输出电流来点亮的,但单片机 I/O口难以输出稳定、大的电流,所以数码管与单片机连接时需要加驱动电路,可以用上拉电阻的方法或使用专门的数码管驱动芯片,比如 74HC573、74HC245等,其输出电流较大, 电路接口简单

我的译码器是74HC138,(译码器稍微有点打脑壳,原理懂了就好了)。

?静态数码管显示:

所以想让单个数码管显示,只需要字段让对应的led点亮就可以了。

例如,显示0,就是abcdef亮,g和Dp不亮,Dp是最高位,a是最低位,二进制就是0011 1111,十六进制是0x3f。以此原理就可以推出常用字符的段选,码表如下:

这里先不研究138译码器的原理,直接写代码,点亮左数第二个数码管(LED7),那么138译码器的配置:C=1,B=1,A=0。(C是高位,110进制转换就是6,0123456,第7个数)用这个方法来控制哪个显示,有没有很巧妙?

#include<reg52.h>

typedef unsigned char u8;

sbit K1=P2^2;
sbit K2=P2^3;
sbit K3=P2^4;

u8 code number[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
           0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};
//ram的资源比较宝贵	,code的作用是告诉单片机,我定义的数据要存储在ROM(程序存储区)里面,写入后就不能再更改
//这个code可要可不要
void main()
{
	K3=1;
	K2=1;
	K1=0;                   //LED7显示
	while(1)
	{
		P0=number[1];    //显示1
	}
}	

动态数码管显示:

上面的静态数码管显示一个就动用了出138译码器以外的8个I/O口,而要全部显示8个的话就需要64个I/O口,单片机根本就没有这么多资源。

所以用一个138译码器实现数码管的动态刷新显示,switch-case是核心。

#include<reg52.h>

typedef unsigned char u8;

sbit K1=P2^2;
sbit K2=P2^3;
sbit K3=P2^4;

u8 code number[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
           0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};

void delay(u8 t)
{
	while(t--);
}

void dtxs(u8 i,x)
{
	switch(i)
		{
			case 1:K3=0;K2=0;K1=0;break;
		    case 2:K3=0;K2=0;K1=1;break;
		    case 3:K3=0;K2=1;K1=0;break;
	        case 4:K3=0;K2=1;K1=1;break;
		    case 5:K3=1;K2=0;K1=0;break;
		    case 6:K3=1;K2=0;K1=1;break;
		    case 7:K3=1;K2=1;K1=0;break;
		    case 8:K3=1;K2=1;K1=1;break;
		}				
   	P0=number[x];
	delay(10);
	P0=0x00;		
}

void main()
{
	while(1)
	{
		dtxs(1,9);
		dtxs(2,8);     //单片机最后两位显示89
	}
}	

萌新上路,制作不易,如有错误还请评论区指正。各位帅气逼人、美若天仙、颜值爆表的看官老爷点个赞吧,求求了。(在线卑微求赞)

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-07-17 16:39:38  更:2022-07-17 16:42:16 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 22:33:47-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码