蓝桥杯51单片机之独立按键控制数码管【单片机开发初学者必学会】

2023-05-16

文章目录

    • 一、写在前面
    • 二、无中断控制数码管
    • 三、外部中断控制数码管

一、写在前面

关于数码管的控制与显示,在文章51单片机之数码管从点亮到动态时钟的实现【单片机开发初学者通俗易懂】已经有详细介绍了,所有此处就不细讲了。此处只是补充到了一个独立独立按键的控制。sbit key= P3^3; //独立按键第四个
同理,P3^0就是独立按键的第一个,依次类推,总共有4个独立按键。

二、无中断控制数码管

#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
void delay(uint x);  //声明延时函数
void add_one();

//锁存器
sbit M0= P2^6;   //十位
sbit M1= P2^7;	//个位
sbit key= P3^3;  //独立按键第四个
//共阴数码管的码段(以高电平1为亮,0为不亮)
uchar leddata[]={
0x3F, 0x06, 0x5B, 0x4F, 0x66, 
0x6D, 0x7D, 0x07, 0x7F, 0x6F
};
//003F:0011 1111,abcdef亮,为0 

void main()
{
	while(1)
	{		
		if(key == 0)
		{
			delay(100);  //稍微延时一下,消抖处理
			if(key==0) 
				add_one();
		}		
	}	
}

void add_one()
{
	static j= 0;
	if(j<10)
	{
		M1= 1;  //显示个位,低电平有效,所以0表示显示
		P0 = 0x7f;  //0111 1111
		M1= 0;
	
		M0= 1;
		P0= leddata[j++];
		M0= 0;
		delay(500);
	}
	else
		j= 0;
	
}

void delay(uint x)  //延时x毫秒的函数
{
	uint i,j;
	for(i=x; i>0; i--)
	{
		for(j=110; j>0; j--) ;
	}
}

此处实现的功能就是按一下独立按键的第四个,然后就会让数码管显示的数字加1,一直加到60,就会重新归零。

三、外部中断控制数码管

此文讲的是独立按键与数码管的控制,为何又说到外部中断?
那是因为外部中断的触发是可以由独立按键的触发来实现的,所以此文就用独立按键来触发外部中断,让单片机执行完外部服务函数后,再恢复正常执行。

#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
void delayms(uint z);  //声明延时函数
void display();  //声明显示函数

//锁存器
sbit wela= P2^7;  //位选锁存器的锁存端
sbit dula= P2^6;  //段选锁存器的锁存端
//0到9的段选信号
uchar code table[]={
0x3F, 0x06, 0x5B, 0x4F, 0x66,
0x6D, 0x7D, 0x07, 0x7F, 0x6F
};

void main()
{
	//主函数变量
	uint i;

	//初始化中断方式
	IT0= 0;  //低电平触发中断0
	//中断基础设置
	EA= 1;  //开总中断
	EX0= 1;  //允许外部中断0
	PX0= 1;  //外部中断0为高优先级

	
	while(1)
	{
		for(i=0; i<=6; i++)  //main函数中循环显示0-6的数字 
		{
			wela= 1;
			P0= 0xbF;  //只显示第7位 
			wela= 0;
			dula= 1;
			P0= table[i];
			dula= 0;
			delayms(10000);
		}	
	}
}

//外部中断服务函数 
void display() interrupt 0
{
	uint i;
	uchar temp= P0;
	for(i=0; i<10; i++)
	{
		wela= 1;
		P0= 0x7F;
		wela= 0;
		dula= 1;
		P0= table[i];
		dula= 0;
		delayms(10000);
	}
	P0= temp;
}

void delayms(uint z)  //定义延时1毫秒的函数
{
	uint i, j;
   	for(i=z; i>0; i--)
		for(j=0; j<110; j--)  ;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

蓝桥杯51单片机之独立按键控制数码管【单片机开发初学者必学会】 的相关文章

随机推荐

  • 从C语言到C++的进阶之C++的非类新特性(篇二)

    文章目录 1 输出输入使用 cout lt lt 和 cin gt gt 2 访问外部变量3 从指针到引用4 引用与指针的比较5 返回引用类型的函数 1 输出输入使用 cout lt lt 和 cin gt gt span class to
  • 从C语言到C++的进阶之C++的非类新特性(篇三)

    文章目录 1 从宏到内联函数2 函数参数的缺省值3 C 43 43 的常量与引用4 函数重载5 new运算和delete运算 1 从宏到内联函数 xff08 1 xff09 写一个返回最大值的宏定义 xff08 C语言 xff09 span
  • 从C语言到C++的进阶之面向对象、using与命名空间(篇四)

    文章目录 一 面向过程到面向对象二 namespace的使用三 using的用法 一 面向过程到面向对象 1 面向过程编程思想 C语言是典型的面向过程编程语言 xff0c 面向过程是一种以过程为中心的编程思想 xff0c 通过分析出解决问题
  • Angular执行测试报错: 'router-outlet' is not a known element

    本机环境 xff1a ng version Angular CLI 7 1 1 Node 10 11 0 OS darwin x64 Angular 7 1 1 animations cli common compiler compiler
  • 从C语言到C++的进阶之一些C基础上的增强用法(篇五)

    文章目录 1 全局变量的检测增强2 新增Bool类型3 三目运算的增强4 指针与常量的引用 xff08 别名 xff09 5 内联函数的限制6 函数的占位参数7 extern 34 C 34 的用法 1 全局变量的检测增强 C 43 43
  • C语言经典排序算法之快速排序(详解)

    文章目录 一 何为算法二 排序算法三 快速排序算法 一 何为算法 1 算法 xff08 Algorithm xff09 xff0c 是程序设计的灵魂 xff0c 它是利用系统的方法描述解决问题策略的机制 2 正确算法应满足的性质 xff1a
  • C语言经典查找算法之二分查找(详解)

    文章目录 一 查找算法二 二分查找算法 一 查找算法 查找是在大量的信息中寻找一个特定的信息元素 xff0c 在计算机应用中 xff0c 查找是常用的基本运算 xff0c 例如编译程序中符号表的查找 二 二分查找算法 1 算法思想 该查找算
  • C语言经典递推算法之杨辉三角展开(详解)

    文章目录 一 递推算法二 杨辉三角展开 一 递推算法 这是一种比较简单的算法 xff0c 即通过已知条件 xff0c 利用特定关系得到中间结论 xff0c 然后得到最后结果的算法 递推算法可以分为顺推和逆推两种 二 杨辉三角展开 1 杨辉三
  • C语言经典迭代算法之求解函数定积分(详解)

    文章目录 一 迭代算法二 梯形法求解定积分 一 迭代算法 1 辗转迭代 迭代法也称辗转法 xff0c 它是一种不断用旧的变量值递推得到新值的过程 迭代法是用计算机解决问题的一种基本方法 xff0c 它利用计算机运算速度快 适合做重复性操作的
  • C语言经典递归算法之和式分解

    文章目录 一 递归算法二 和式分解 一 递归算法 1 递归 递归就是自己调用自己 xff0c 它是设计和描述算法的一种有力工具 xff0c 常常用来解决比较复杂的问题 递归是一种分而治之 xff0c 将复杂问题转化难为简单的问题的求解方法
  • C语言经典枚举算法之谁在说谎(详解)

    文章目录 一 枚举算法二 谁在说谎问题 一 枚举算法 1 枚举 枚举算法是我们在日常中使用到的最多的一个算法 xff0c 它的核心思想就是 枚举所有的可能 枚举法的本质就是从所有候选答案中去搜索正确的解 2 使用枚举算法需要满足两个条件 1
  • C语言经典贪心算法之加油站问题(详解)

    文章目录 一 贪心算法二 加油站问题 一 贪心算法 贪心算法暗示一种不追求最优解 xff0c 只希望找到较为满意解的方法 贪心算法省去了为找最优解要穷尽所有可能而必须耗费大量时间 xff0c 因此它一般可以快速得到较为满意的答案 贪心算法常
  • C语言经典回溯算法之解决数的组合问题(详解)

    文章目录 一 回溯算法二 数的组合问题 一 回溯算法 1 回溯法 也叫试探法 xff0c 实际上是一个类似枚举的搜索尝试过程 xff0c 主要是在搜索尝试过程中寻找问题的解 xff0c 当发现已不满足求解条件时 xff0c 就 回溯 返回
  • C语言经典矩阵算法之打印魔方阵(详解)

    文章目录 一 矩阵算法二 打印魔方阵 一 矩阵算法 1 矩阵 矩阵 xff0c 是线性代数中的基本概念之一 一个m n的矩阵就是m n个数排成m行n列的一个数阵 由于它把许多数据紧凑的集中到了一起 xff0c 所以有时候可以简便地表示一些复
  • Angular报错问题:Can't bind to 'formGroup' since it isn't a known property of 'form'

    Angular报错问题 xff1a Can t bind to formGroup since it isn t a known property of form 报错提示 xff1a Uncaught Error span class t
  • 单片机串口通信与同步异步通信

    文章目录 一 串口通信二 异步通信三 同步通信四 串行通信的传输方向 一 串口通信 1 随着多微机系统的广泛应用和计算机网络技术的普及 xff0c 计算机的通信功能愈来愈显得重要 计算机通信是指计算机与外部设备或计算机与计算机之间的信息交换
  • C++面向对象编程之类的使用(从struct到class的进阶)

    文章目录 一 结构体的使用二 由结构体到类三 C 43 43 类的定义与使用1 引入类 xff08 class xff09 2 类的基本用法3 类的访问权限4 类的成员函数与接口定义 一 结构体的使用 1 C语言中struct的使用 spa
  • C++面向对象编程之类的使用(基础案例学习)

    文章目录 一 显示时间案例二 找出元素的最大值三 长方柱体积 一 显示时间案例 1 问题 输入3个数字 xff0c 将这三个数字按照时间的格式显示出来 2 共有划成员实现显示 span class token macro property
  • 蓝桥杯51单片机花样流水灯与独立按键实例分析【单片机开发初学者通俗易懂】

    文章目录 一 流水灯控制1 点亮流水灯2 循环显示流水灯 二 按键控制流水灯1 独立按键2 按键消抖3 按键控制流水灯 基础版 4 按键控制流水灯 实时版 一 流水灯控制 1 点亮流水灯 首先看一段点亮流水灯的代码 xff1a span c
  • 蓝桥杯51单片机之独立按键控制数码管【单片机开发初学者必学会】

    文章目录 一 写在前面二 无中断控制数码管三 外部中断控制数码管 一 写在前面 关于数码管的控制与显示 xff0c 在文章51单片机之数码管从点亮到动态时钟的实现 单片机开发初学者通俗易懂 已经有详细介绍了 xff0c 所有此处就不细讲了