首页 > 其他分享 >51单片机入门:数码管(3)

51单片机入门:数码管(3)

时间:2024-11-27 20:59:46浏览次数:4  
标签:P2 case 数码管 51 unsigned break 单片机 SMG

数码管简介

image-20241127175917258

数码管每段其本质就是个LED灯,只需要控制特定的LED灯亮就能显示数据。普中开发版所使用的是两个并在一起共阴极连接的“4位数码管”,可以同时显示8个数字。数码管的显示可以分成静态显示和动态显示,这里先介绍最简单的静态显示。

image-20241127180727836

数码管分为共阴极连接和共阳极连接,顾名思义共阴极就是把所有的数码管阴极连接在一起,共阳极就是把数码管所有的阳极连接在一起,之所以这么做是为了节省单片机I/O口。

图(a)是数码管段选位图,以普中51单片机开发版为例,它的数码管采用共阴极(低电平0)连接,所以如果我们想让一个数码管显示数字6,就应当在相应段选位设置为高电平(1),其余设置为低电平(0),如图所示:

image-20241127184928608

下图是共阴极数码管显示0-F对应的编码(表中省略了dp段0):

image-20241127185200447

74HC138译码器简介

作用:节省单片机I/O口

image-20241127185807057

//这里结合两张图片一起介绍
// P2_4 = 1;P2_3 = 1;P2_2 = 1;  控制LED8 
// P2_4 = 1;P2_3 = 1;P2_2 = 0;  控制LED7 
// P2_4 = 1;P2_3 = 0;P2_2 = 1;  控制LED6 
// P2_4 = 1;P2_3 = 0;P2_2 = 0;  控制LED5 
// P2_4 = 0;P2_3 = 1;P2_2 = 1;  控制LED4 
// P2_4 = 0;P2_3 = 1;P2_2 = 0;  控制LED3 
// P2_4 = 0;P2_3 = 0;P2_2 = 1;  控制LED2 
// P2_4 = 0;P2_3 = 0;P2_2 = 0;  控制LED1 

image-20241127190621212

到此知识准备结束,现在可以编写第一个程序了。

静态数码管显示

#include<regx52.h>

unsigned char Table[] = {0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F}; // 数组,定义数字0~9段选

void SMG(unsigned char Location,Number) // 定义函数,参数Location是位选,Number段选控制显示的数字。
{
	switch(Location) // 位选
	{
		case 1 : P2_4 = 1;P2_3 = 1;P2_2 = 1;break;
		case 2 : P2_4 = 1;P2_3 = 1;P2_2 = 0;break;
		case 3 : P2_4 = 1;P2_3 = 0;P2_2 = 1;break;
		case 4 : P2_4 = 1;P2_3 = 0;P2_2 = 0;break;
		case 5 : P2_4 = 0;P2_3 = 1;P2_2 = 1;break;
		case 6 : P2_4 = 0;P2_3 = 1;P2_2 = 0;break;
		case 7 : P2_4 = 0;P2_3 = 0;P2_2 = 1;break;
		case 8 : P2_4 = 0;P2_3 = 0;P2_2 = 0;break;
	}
	P0 = Table[Number]; // 段选
}

void main()
{
//	P2_2 = 1;  // 这是我做的小实验,不要过多关注
//	P2_3 = 1;
//	P2_4 = 0;
//	P0 = 0X7D; // 这块板子共阴极数码管,38译码器和SMG都是从下往上数	
	while(1)
	{
	  SMG(5,6); // 第五位显示数字6
	}
}

实验现象:(Proteus仿真中P0端口要有个上拉电阻,这里没截到)

image-20241127202746210

动态数码管显示

原理:快速扫描逐个显示,利用人眼的余辉效应显示多个数码管,实际上在一个时刻内只有一个数码管点亮。

#include<regx52.h>

unsigned char Table[] = {0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F};

void Delay(unsigned int n)  // 延时函数
{
	unsigned char j;
	while(n--)
	{
		for(j = 0; j< 113; j++);
	}
}

void SMG(unsigned char Location,Number)
{
	switch(Location) // 段选
	{
		case 1 : P2_4 = 1;P2_3 = 1;P2_2 = 1;break;
		case 2 : P2_4 = 1;P2_3 = 1;P2_2 = 0;break;
		case 3 : P2_4 = 1;P2_3 = 0;P2_2 = 1;break;
		case 4 : P2_4 = 1;P2_3 = 0;P2_2 = 0;break;
		case 5 : P2_4 = 0;P2_3 = 1;P2_2 = 1;break;
		case 6 : P2_4 = 0;P2_3 = 1;P2_2 = 0;break;
		case 7 : P2_4 = 0;P2_3 = 0;P2_2 = 1;break;
		case 8 : P2_4 = 0;P2_3 = 0;P2_2 = 0;break;
	}
	P0 = Table[Number];				// 位选
	Delay(1);					// 数码管显示1ms后关闭
	P0 = 0X00;					// 消影清零,防止上次的数据窜位重影
}
void main()
{
	while(1)
	{
		SMG(1,1); // 位选 段选
		SMG(2,2);
	        SMG(3,3);
	}
}

实验现象:

动画

标签:P2,case,数码管,51,unsigned,break,单片机,SMG
From: https://www.cnblogs.com/arciab/p/18573086

相关文章

  • 七段数码管绘制
    fromturtleimport*fromtimeimport*defdrawLine(draw):#回执单段数码管pendown()ifdrawelsepenup()fd(40)right(90)defdrawDigit(d):#根据数字绘制七段数码管drawLine(True)ifdin[2,3,4,5,6,8,9]elsedrawLine(False)drawL......
  • CF51(详细版)
    前言:前几题无代码,讲解简略(直接模拟有什么好讲的)被小学妹说题解简略,遂贴了核弹的题解模板3.核弹和小学妹会\(lct\)好巨好巨正片开始!CF51A题面(可从下方链接跳转看原题题面):题目传送门结论:模拟题完结撒花!--------------------分割线--------------------CF51......
  • 51单片机学习笔记(零基础版)
    引言本笔记跟随B站经典课程江科大51单片机入门教程,对课程内容进行了一些细化,兼顾零基础的同学,并且按照理论结合实践的学习理念,学习就是一个发现问题,解决问题,获得技能的一个过程。明确需求:成为一名嵌入式开发工程师,并且从这个课程中学习到在嵌入式开发的工作中需要用的知识以......
  • CS 551 Systems Programming
    CS551SystemsProgramming,Fall2024ProgrammingProject2nthisprojectwearegoingtosimulatetheMapReduceframeworkonasinglemachineusingmulti-processprogramming.1IntroductionIn2004,Google(thepaper“MapReduce:SimplifiedDataProcessin......
  • 51单片机入门:独立按键(02)
    标题:​ 51单片机入门:独立按键(02)一、独立按键的基本结构和功能二、独立按键在单片机的位置三、初次使用独立按键设计第1个程序,使用按键K1控制D1的亮灭#include<regx52.h>voidmain(){ while(1) { if(P3_1==0)//按下按钮相当于接地P3_1==0; { P2_0=......
  • 「Luogu P4516」[JSOI2018] 潜入行动
    题目外星人又双叒叕要攻打地球了,外星母舰已经向地球航行!这一次,JYY已经联系好了黄金舰队,打算联合所有JSOIer抵御外星人的进攻。在黄金舰队就位之前,JYY打算事先了解外星人的进攻计划。现在,携带了监听设备的特工已经秘密潜入了外星人的母舰,准备对外星人的通信实施监听。外星......
  • 51单片机入门:LED灯控制(01)
    第一篇博客,博客园注册很久却一直没有好好利用,今天把以前的文章都删掉,就当开个好头吧。希望在以后的时间中,自己能够认真、努力、珍惜时间。零基础入门51单片机单片机(MicrocontrollerUnit,MCU)是一种集成电路芯片,它将计算机的CPU、存储器(RAM和ROM)、输入/输出接口(I/O)等集成在一个芯......
  • RX23E-B系列微控制器是工业传感器设备的理想选择!R5F523E5B介绍,EFR32BG13P732F512GM48-
    RX23E-B系列微控制器具有内置模拟前端(AFE),是工业传感器设备的理想选择。与上一代的RX23E-A相比,RX23E-B的24位DeltaSigma模/数转换器在高速性能和噪声性能上均得到了改善。最大数据速率为125kSPS,这对于DeltaSigma模/数转换器来说速度很快,比RX23E-A快8倍。RMS......
  • 单片机原理及应用
    单片机(Microcontroller,简称MCU)是集成度高、功能强大的微型计算机,广泛应用于嵌入式系统、智能家居、工业控制、汽车电子、物联网等领域。作为一种重要的硬件平台,单片机具有小巧、低功耗、高效、成本低等特点。本文将介绍单片机的基本原理、结构特点以及其在实际应用中的使用方法......
  • 单片机线反转法实现矩阵键盘
    矩阵键盘原理前文描述的独立按键需要每一个都需要占用一个引脚控制,如果按键数多了,控制将会变得麻烦,并且浪费资源为此,使用矩阵键盘,每个引脚不连接单独的按键,而是连接一行或一列按键,当按下一个按键时,确定行列相交的坐标即可确定被按下的按键,如下图(最下面一排是独立按键,而上面......