数码管定时器

数码管电子时钟 数码管时钟 Cyclone IV,六个计时器 阅读详情
  1. 视频演示

  2. 任务要求

  3. 任务实现

1、视频演示

数码管计时器 

希望大家也能关注一下新人up,以后会有更有意思的视频,也希望各位大佬提出些改进的建议。

2、任务要求

正片开始,这是我们协会的作业,要求如下:

 这个作业我个人觉得还是比较简单的,不过因为是个小白,所以有些知识点不太熟悉,所以也花了些时间,期间也在不断的试错,代码写得一般,希望有大佬能够帮忙指正。

2、任务实现

1、按键消抖

我个人觉得这一部分是比较重要的,因为我用的是晋中科技的51单片机,所以它板子的按键比较容易误触,一开是我用的是比较简单的消抖算法如下:

void key_scan()
{
    if (key == 0)//按键按下
    {
        Delay(10);//等待10ms
        if(key == 0)//二次检测,防止误触
        {
            //执行代码
            while(!key)//松手检测
            {

            }
        }
    }
}

这个算法计较简单,我看很多教程用的也是这种算法,但是我认为它有一点不太好,就是它需要等待松手,如果不松手,就会一直在循环里面,导致无法执行其他的程序。

如果是数码管显示,会使得每次按键后的刷新显示都会先熄灭再显示,就很不优雅,这种事情我肯定无法接受,所以就上网找有没有新的算法,让它的显示如吃了德芙一样丝滑(德芙打钱),还真让我找到了,B站UP主金善愚的视频,链接如下:独立按键进阶——非阻塞延时实现独立按键的消抖与按键识别方法

作为优雅的Ctrl c/v工程师,我好好“借鉴”了一下,以KEY1为例

#define Key_Delay_Time 100			//宏定义按键延迟的时间
unsigned char key1_lock_float;		//定义KEY1自锁标志
unsigned char key1_cnt;				//定义KEY1积累变量

unsigned char Key_Scan(void)    	//独立按键扫描函数,读取键值
{
	unsigned char Key_Num = 0;
	if(key1)                        //按键未按下
	{
		key1_lock_float = 0;        //清除自锁标志
		key1_cnt = 0;               //清除计数标志
	}
	else if(!key1_lock_float)        //!key1_lock_float && key1 ==0
	{
		key1_cnt++;//累计按键消抖延迟次数
		if(key1_cnt > Key_Delay_Time)
		{
			key1_cnt = 0;//清零计数变量
			key1_lock_float = 1;//自锁标志置1,防止按键多次触发
			Key_Num = 1;//赋键值编码
		}
	}
	return Key_Num;
}

我用我浅薄的理解来讲一下,

if(key1)                        //按键未按下或者有抖动
	{
		key1_lock_float = 0;        //清除自锁标志
		key1_cnt = 0;               //清除计数标志

KEY1未按下时为高电平,或者当我们按下时,因为按键中间薄膜的抖动会有高低电平的转换,这一部分代码就是为了防止因为抖动造成电平变换导致误触

else if(!key1_lock_float)        //!key1_lock_float && key1 ==0
	{
		key1_cnt++;//累计按键消抖延迟次数
		if(key1_cnt > Key_Delay_Time)
		{
			key1_cnt = 0;//清零计数变量
			key1_lock_float = 1;//自锁标志置1,防止按键多次触发
			Key_Num = 1;//赋键值编码
		}

原来KEY1未按下为高电平,else就是当它按下低电平的时候,之前我们未按下KEY1时,将key1_lock_float置零,!key1_lock_float后它就为1成立,接着执行下面的代码。

因为我们这个函数是放在while(1)里不断循环的,所以每调用函数,key1_cnt都会+1,当key1_cnt这个变量>Key_Delay_Time这个变量时,将我们的计数变量清零,自锁标志置1,防止多次触发,同给Key_Num赋值,方便后续switch()函数的使用。

Key_Delay_Time这个变量需要通过我们去预估我们程序需要多少时间去宏定义,同时这个值越小灵敏度就越高。

2、数码管显示

数码管显示的原理网上有很多,这里就不在这卖弄了,大家可以去B站大学找找看看,我这个代码也是参考 

数码管动态显示编程之基于底层显示模块的应用层功能程序
 

这个视频写的,这里以一位数码管为例,八位数码管是一样的。

#define GPIO_DIC P0			//段码
#define GPIO_PLACE P2		//位码

/*编码表*/
unsigned char code leddate[] ={	0x3f,//0
								0x06,//1
								0x5b,//2
								0x4f,//3
								0x66,//4
								0x6d,//5
								0x7d,//6
								0x07,//7
								0x7f,//8
								0x6f,//9
								0x77,//A
								0x7c,//B
								0x39,//C
								0x5e,//D
								0x79,//E
								0x71,//F
								0x40,//-
								0x00//清空
							    };
unsigned char LEDBuf[] = {17,17,17,17,17,17,17,17};//数据显示缓冲区
unsigned char code PLACE_CODE[] = {0x00,0xff,0xfb,0xf7,0xf3,0xef,0xeb,0xe7,0xe3};//位选信号 0x00占位无具体位号

/*数码管动态显示显示*/
void Display()
{
	unsigned char i;
	switch(i)
	{
		case 0:GPIO_DIC =leddate[LEDBuf[0]];    //段选
               GPIO_PLACE = PLACE_CODE[1];      //位选
               Delay(1);                        //延迟
               GPIO_DIC = 0x00;                 //消影
               i++;                     
                break;
	}
}

编码表没什么好说的就给对应的管脚电平,然后二进制转十六进制就行了。

数据显示缓冲区就是方便我们以后如果需要显示不同的数据,直接去这里更改,方便后期维护与修改。

位选信号就是给锁存器对应的电平,让它显示第几位数码管,这里为了方便显示对应数码管,我在第一个位置,也就是数组的零号位,加了一个占位的数据,这样数组里数据的下标就和数码管的位数对上。

下面就是普通的调用,先进行段选,选择自己要选择的数据,我这里用的是数组嵌套

从里往外讲因为我将LEDBuf[0]赋17,所以

leddate[LEDBuf[0]] = leddate[17]

对应编码表里的第18个“清空”

然后进行位选,选择要第几位数码管显示,因为视觉暂留,我们延迟1ms,让它感觉是常亮的,其实是在不停的闪烁,最后消影,否则会有残影在数码管上,就很不优雅。

而这个i++,其实是为了动态显示用的,将这个程序放到while(1)里,它会不停循环,我们多加几个case ,每个case 都放入i++,这样当本次case 执行完因为i+1,所以它会进入到下一个case ,我们再最后一个case 将i初始化,使switch语句不断循环,实现动态显示。

4定时器

由于本人技术一般,所以不不知道怎么使用for()循环进行流水灯的滚动显示,所以这里使用了定时器。

#include "reg52.h"
#include "bsp_key.h"
#include "bsp_timer.h"

void Timer0Init(void)
{
	TMOD &= 0xF0;			//设置定时器模式
	TMOD |= 0x01;			//设置定时器模式
	TL0 = 0x18;				//设置定时初始值
	TH0 = 0xFC;				//设置定时初始值
	TF0 = 0;				//清除TF0标志
	ET0 = 1;				//使能定时器0中断
	EA = 1;					//使能中断总开关
	TR0 = 1;				//定时器0开始计时
}

/*中断函数*/
void Timer0_Routine() interrupt 1
{
	static unsigned int c = 0;
	
	TL0 = 0x18;				
	TH0 = 0xFC;				
	c++;
	
	/*延迟300ms*/
	if(c>=300)
	{
		c=0;
		Dis_service3();
	}
}

这里以晶振为12M的51单片机为例,TMOD |= 0X01 是将定时器设置为工作模式一。

然后设置TL0(低8位),TH0(高八位)的值,具体值计算如下:

晶体频率为12M,那么单片机的机械频率就为

12*(1/12M) = 1μs,

因为TH0和TL0总共能存储2^16 == 65536的数据,我们需要使定时器定时1ms,由前面的条件知道,要到1ms需要晶体发出1000次脉冲(1ms/1μs),但是1ms过去后,我们只往存储空间中存入1000,要到达65536,就需要先往存储空间里放入数据,当晶体发出1000次脉冲后,能够将存储空间填满,使TF0置1,所以

预先放入的值(后称预值)  =(65536-1000)

同时我们需要将这个值分别放入TH0和TL0里,所以

TH0 = 预值 /256

TL0 = 预值 %256

256刚好为2^8,那么 预值 /256 就可以得到高八位,而 预值 %256 可以得到低八位。

接着就是将TF0置零,打开中断ET0和中断总开关EA0,开启定时器TR0

下面的函数实现就是当中断触发,将定时器初始化,当300ms后,使数码管显示。

接下来就是具体的实现

void main()
{	
	while(1)
	{
		key_service();
		if(Num1 == 1)//进入数字设置模式
		{
			Dis_service2();
		}
		else if(Num1 == 0 &&Num3 == 1)//退出数字模式且按下KEY4,进入自检
		{
		Timer0Init();
		}
		else
		{
			Dis_service1();
		}
		Display();
	}		
}

void key_service()
{
	switch(Key_Scan())
	{
		case 1:Num1++;if(Num1>1){Num1 = 0;}break;//Num1 == 1显示,Num1 ==0不显示
		case 2:if(Num1 == 1){Num2++;}if(Num2>10){Num2 = 0;}break;//数码管显示Num2对应数字
		case 3:if(Num1 == 1){Num2--;};if(Num2<1){Num2 = 10;}break;//数码管显示Num3对应数字
		case 4:if(Num1 == 0){Num3++;};if(Num3>1){Num3 = 0;}break;	//启动自检程序
	}
}
/*KEY1程序 Num1 == 0不显示 Num2 == 1显示*/
void Dis_service1()
{
	if(Num1 == 0)
	{	
		LEDBuf[0] = 17;
		LEDBuf[1]	=	17;
		LEDBuf[2]	= 17;
		LEDBuf[3]	= 17;
		LEDBuf[4]	= 17;
		LEDBuf[5]	= 17;
		LEDBuf[6]	= 17;
		LEDBuf[7]	= 17;
	}
	else
	{
		LEDBuf[0] = 0;
		LEDBuf[1]	=	0;
		LEDBuf[2]	= 16;
		LEDBuf[3]	= 0;
		LEDBuf[4]	= 0;
		LEDBuf[5]	= 16;
		LEDBuf[6]	= 0;
		LEDBuf[7]	= 0;
	}
}

/*KEY2 KEY3程序 显示Num2数字 按KEY2++ 按KEY3--*/
void Dis_service2()
{
	LEDBuf[0] = Num2;
	LEDBuf[1]	= Num2;
	LEDBuf[2]	= 16;
	LEDBuf[3]	= Num2;
	LEDBuf[4]	= Num2;
	LEDBuf[5]	= 16;
	LEDBuf[6]	= Num2;
	LEDBuf[7]	= Num2;
}
	
/*KEY4程序 自检*/
void Dis_service3()
{
	j++;
	LEDBuf[0] = j;
	LEDBuf[1]	= j;
	LEDBuf[2]	= j;
	LEDBuf[3]	= j;
	LEDBuf[4]	= j;
	LEDBuf[5]	= j;
	LEDBuf[6]	= j;
	LEDBuf[7]	= j;
	if(j>14)
	{
		j=17;
	}
}

任务一

设置变量Num1 当KEY1按下,key_scan()函数返回1,进入switch函数,使Num1++

当Num>1时置零,当Num1 == 0时数码管不显示(退出数字显示模式)

当Num1 == 1时数码管显示00-00-00(进入数字显示模式)。

任务二

设置变量Num2 当KEY2按下,key_scan()函数返回2,进入switch函数

当KEY1 == 1(进入数字显示模式),显示数值,同时使Num2++

当Num2 >10时,将Num2置零(只显示0~A),实现0-A的循环。

当KEY1 == 0(退出数字显示模式),Num2不变化,实现只有在数字显示模式里才能对数码管显示的数值进行改变。

任务三

和任务二一样,将Num2++ 变为 Num2--,按键改为KEY3,key_scan()函数返回3,当Num2 <1时,将Num2置10。

任务四

设置变量Num3 当KEY4按下,key_scan()函数返回4,进入switch函数

当KEY1 == 0(退出数字显示模式),使Num3++

当KEY1 == 1(进入数字显示模式),Num3不变化

当 KEY1 == 0且 KEY3 == 1时,进入自检,够实现只有在退出数字显示模式里才能进行自检。

【单片机】08数码管 以八段管为例介绍其字段,八段数码管其实是由八个LED灯组成的8字型,如图8.2所示,这八个灯按逆时针方向分别为:a,b,c,d,e,f,g,h。如果要显示“7”字,只需要将a,b,c三个灯点亮即可,如图8.3所示:这样来理解的话,要点亮一个数码管很容易,其实就是点亮相应的LED灯,就能显示不同的数字。我们在前面的实验中已经知道怎么点亮开发板上的LED灯,就是用单片机的I/O脚向LED灯输出低电平,灯就能点亮,输出高电平,灯就熄灭。那我们点亮数码管上的LED灯是不是也是这样呢? 阅读详情

相关推荐

【数码管/定时器/中断】一个定时器控制数码管显示

两种方式实现 /*用定时器以间隔500MS在6位数码管上 依次显示0、1、2、3….C、D、E、F,重复。*/ /*轮流在每一位数码管上显示*/ -----------------------------------------------------①---------------------------------------------------------------------

Li 1万+

51单片机8位数码管计时器(汇编语言)

51单片机8位数码管时钟,汇编语言,可暂停清零,速度调节

yoke__的博客 2万+

定时器控制数码管扫描显示

<br />/************************************************************************************<br /> 功能:定时器控制两位数码管扫描显示<br /> 器件:STC12C5A32S2 两个数码管<br />************************************************************************************/<br />#include "config

abaniyala的专栏 2301

两位数码管显示学号练习程序和图_【Proteus】数码管简易计时器

前言本章介绍使用定时器与数码管来做一个简易的计数器,使用3个2位一体数码管来分别代表时,分,秒。使用锁存器来控制数码管的段选与位选。先放一张完整的仿真图:锁存器:锁存器在数码管驱动中是非常常用的一种器件。简单来说,锁存器最主要的作用就是缓存。可以按照下面的简单描述来理解:当LE给到1的时候,锁存器就会使能打开,然后由单片机给输入数据到D0-D7,然后关闭LE端口,也就是LE端口给0,这时候锁存器的...

weixin_39783857的博客 8414

TBtools的序列提取步骤

本教程详细介绍了如何使用TBtools软件从原来的FASTA序列中提取特定的DNA序列。

weixin_47509995的博客 1万+

ubuntu20.04 终端安装claude

【代码】ubuntu20.04 终端安装claude。

hongliyu_lvliyu的博客 2593

单片机入门:数码管倒计时

采用8位数码管实现倒计时设计。

DZGCSCZRJ的博客 3186

TexGen模型导出ABAQUS inp文件时纱线材料属性缺失?5分钟快速修复指南

本文针对TexGen模型导出ABAQUS inp文件时纱线材料属性缺失的问题,提供了快速修复指南。通过手动编辑inp文件或使用Python脚本自动补全材料属性,帮助复合材料仿真工程师高效解决问题。文章还介绍了TexGen导出前的预防性设置和ABAQUS中的验证技巧,确保仿真分析的准确性。

qsc901234的博客 250

51定时器控制数码管动态显示

注意:共阴数码管位选是“选哪位就哪位为低电平。 数码管采用两个74HC573芯片作为位选和段选的锁存器分别由wela和dula控制(高电平有效); 原理图如下: 定时器的代码如下: #include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器 typedef unsigned int u16; //对数据类型进行声明定义 typedef unsigned char u8; //sbit WE1=P0^0; //sbit WE2=P0...

xiaohuihui11110的博客 6540

计算机模拟爆破过程,基于LSDYNA岩石爆破模拟建模分析

原标题:基于LSDYNA岩石爆破模拟建模分析 Ls Dyna岩石爆破模拟仿真作者:dyna_focus擅长领域:dyna/abaqus/hypermesh一、 数值模型的建立1.1 单元及算法的选择岩石,炸药,空气都采用solid164实体单元。岩石采用常应力实体单元,该种单元属于纯粹的lagrange算法,该种算法单元网格附着在材料上,随着材料的流动而产生单元网格的变形,但是在结构变形巨大时,有...

weixin_29494379的博客 7316

【AN7581】AN7581 SDK编译环境搭建操作说明

安装编译需要的工具包。

wgl307293845的博客 338

定时器数码管显示秒表

/**********************************用定时器0的方式1实现第一个发光二极管以200ms间隔闪烁,用定时器1的方式1实现数码     管的前两位59S循环计时 时间2月11**************************************/#include#define uchar unsigned char//#define uint unsigne

GhostTigerMan 9110

RTCA DO-160G标准详解:航空电子设备的全面环境适应性测试指南

第二章的主要目的是提供标准中使用的术语和定义。了解这些术语对于准确理解标准的要求至关重要,特别是在技术实施过程中。RTCA DO-160G 涉及多个学科的知识,包括航空、电子、电磁学和机械工程,因此需要确保使用的术语在所有学科中具有一致的定义。为了确保测试人员和工程师在执行测试时对所有条件和要求的理解一致,RTCA DO-160G 标准中定义了大量术语。环境应力:指的是设备在操作过程中可能遇到的外部物理或化学条件,包括温度、湿度、振动等。电磁干扰(EMI)

qq_41854911的博客 5276

51单片机定时器数码管显示

51单片机定时器实现数码管0-99秒表

Hello world! 1777

基于深度学习的人脸识别考勤管理系统,采用YOLOv11和Dlib算法实现人脸识别和考勤签到,前台人脸识别和签到系统 + 后台人脸和考勤管理系统,全网独发

基于深度学习的口罩人脸识别的考勤管理系统,采用YOLOv11和Dlib算法实现人脸识别和考勤签到,前台人脸识别和签到系统 + 后台人脸和考勤管理系统,全网独发

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 1825

内存泄漏系列专题分析之二十一:高通相机CamX内存泄漏&内存占用分析--GPU内存拆解

通过上述debug方式,可以看到patch补丁可以顺利debug各种ION内存分布,可以通过它分析ION内存占用问题。同时我们还可以分析GPU内存泄漏问题,同样的方式可以看到所有的GPU内存分布,如果某个GPU内存持续增长,就极有可能内存泄漏,然后更具堆栈信息去分析代码,并解决GPU内存泄漏问题。!!

454

【单片机技术】—— 数码管的动态显示方法与定时器

上一篇 BlogBlogBlog 主要记录了一些简单的外部中断和定时器的使用,在那个时候我们还只会让指定的数码管显示同一个数字,在这篇博文中,我们就记录一下几种让不同数码管显示不同数字(也叫做动态显示)的办法。 文章目录一、动态显示思路的萌芽1.1 代码和实验部分二、用delay()函数实现任意数字的显示2.1 代码和实验部分三、进阶部分 一、动态显示思路的萌芽 我们试想:因为现在我们不是只会...

凝望,划过星空的博客 8062

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

定时器控制数码管的动态流水显示

该实验基于51单片机实现4位数码管的动态数字显示控制。系统初始以1秒间隔循环显示1、2、3、4三个功能按键:S1加速显示切换(每次0.1秒)、S2减速(每次0.1秒)、S3切换为反向显示4、3、2、1。采用共阴极数码管连接方式,使用74HC138译码器控制位选,定时器T0产生5ms中断实现精确时间控制(20次中断为0.1秒)。程序通过标志位控制显示方向与速度,并加入防抖处理避免按键长按误触发。实验成功实现了数码管动态显示及按键交互功能,展示了定时器中断、键盘扫描等单片机基础应用,为后续复杂系统开发奠定基础。

充满焦虑的大学生 3486

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

stm32计时器定时器配置数码管显示

定时器计时器配置

qq_56099049的博客 5385

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

用51单片机定时器中断写数码管0-99

用定时器0实现数码管的0-99变化 #include "reg52.h" #define uchar unsigned char #define uint unsigned int sbit dula = P2^6;//段选 sbit wela = P2^7;/位选 uint n=0;//个位 uint b=0;//十位 uint m=0;//控制十位 uint o=0;//整体的计时 uchar W[8] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdF,0xbF,0x7F};//

qq_18242623的博客 8059

51单片机——定时器0+动态数码管显示

在51单片机(也称为8051单片机)中,定时器是一种内置的功能模块,用于实现定时或计数功能。51单片机通常包含两个可编程的16位定时器/计数器(Timer/Counter),即定时器0(T0)和定时器1(T1)。这些定时器/计数器可以在不同的模式下工作,以满足不同的应用需求。

li_han_han的博客 3065

定时器驱动数码管c语言程序,定时器&数码管扫描显示

1.定时器中断实现间隔切换在第六章第4讲的测试代码中提到过数码管微闪烁问题,这是由于三八译码器的IO端口切换的间隔时间不均匀导致,这部分的问题宋老师已经在《手把手教你学51单片机》文档6.4.2节有详细解释,并在6.5.2节里解决了这个问题。数码管扫描函数我们使用定时器0强制实现间隔1ms切换三八译码器的IO输出,这样保证了每个数码管被点亮的时间都是均匀的。我们在主函数里不停地执行数码管显示函数。...

weixin_39707597的博客 594

两位数码管显示学号练习程序和图_定时器和数码管

1.1、基本数字逻辑门电路不管是数字电路,还是C语言,我们都会经常遇到逻辑运算和逻辑电路,在这里我介绍一下,大家先简单了解一下,知道有这么回事,回头遇到了,再详细研究。首先,在“逻辑”这个概念范畴内,存在真和假这两个逻辑值,而将其对应到数字电路或C语言中,就变成了“非0值”和“0值”这两个值,即逻辑上的“假”就是数字电路或C语言中的“0”这个值,而逻辑“真”就是其它一切“非0值”。然后,...

weixin_40001442的博客 4660

定时器驱动数码管c语言,第五章 定时器和数码管

1.1基本数字逻辑门电路不管是数字电路,还是C语言,我们都会经常遇到逻辑运算和逻辑电路,在这里我介绍一下,大家先简单了解一下,知道有这么回事,回头遇到了,再详细研究。首先,在“逻辑”这个概念范畴内,存在真和假这两个逻辑值,而将其对应到数字电路或C语言中,就变成了“非0值”和“0值”这两个值,即逻辑上的“假”就是数字电路或C语言中的“0”这个值,而逻辑“真”就是其它一切“非0值”。然后,我们来具体分...

weixin_29577659的博客 1143

单片机:1. 定时器和数码管

原文地址:https://blog.youkuaiyun.com/Qingzhusshuiyun/article/details/78211664 通过上节课的实验,大家会发现,我们逐渐进入比较实质性的学习了,需要记住的内容也更多了,个别地方可能会感觉吃力。但是大家不要担心,要有信心。这个跟小孩学走路一样,刚开始走路不太稳,没关系,多走几步多练练。看视频的时候要注意专心,一遍看不懂,思考一下,再回头看第二遍和...

acktomas的博客 2541

【单片机学习笔记】(三)———数码管和定时器中断

一、原理图 二、数码管电路 控制数码管其实与控制LED的原理相似,数码管的一位可以看作八段LED组成。因此控制数码管,则可以从控制段选和控制位选两方面入手。Y6C控制段选,Y7C控制位选。 我的板子上面所配备的数码管是共阳数码管。 数码管静态显示: 如果我要让数码管的第一位显示数字2且没有小数点,步骤如下: 位选:应该使com1为高电平1,其他为0,P0二进制代码为0000 0001,写成十六进制即为0x01 段选:abdeg为低电平0,其他为高电平1。P0二进制代码为1010 01.

weixin_46043648的博客 4036
下一篇: 延时算法进阶
三无凡人
博客等级 码龄7年 67粉丝 4原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值