51单片机实战 1 --四个独立按键控制四位数码管

2023-10-30

本文基于普中51开发板,在其例程代码稍加改动而成的。

单片机的入门小项目也很益智:启动单片机,四位数码管显示0000,按下s1并松开,显示1000,再按下s1并松开显示2000,连续10次按下并松开s2,数码管显示2100、2200、2300、...、2900、2000。

 

以上是开发板部分原理图。可以看出位选功能是由74HC138控制的,而数码管显示数字则是采用共阴极来共同控制。 

 由此,来理清一下思路:首先对按键执行扫描操作,然后记录下按键的次数,以此来对应显示的数字;然后通过控制74HC138模块,来选中不同的位置;最后写入真值以此来达到效果。

可以建立一个变量来对应按键次数,也可将真值放入数组,由此当变量变化时,调用数组里对应的真值,以达到目的。

#include "reg52.h"			

typedef unsigned int u16;	 
typedef unsigned char u8;

sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;

sbit k1=P3^1;
sbit k2=P3^0;
sbit k3=P3^2;
sbit k4=P3^3;	 

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


#define KEY1 1
#define KEY2 2
#define KEY3 3
#define KEY4 4

char keynum1,keynum2,keynum3,keynum4;
u8 DisplayData[8];

void delay(u16 i)
{
	while(i--);	
}

u8 KeyScan(u8 mode)
{
	static u8 keyen=1;
	if(mode==1)
	{
		keyen=1;
	}
	if(keyen==1&&(k1==0||k2==0||k3==0||k4==0))
	{
		delay(1000);  //Ïû¶¶´¦Àí
		keyen=0;
		if(k1==0)return KEY1;
		else if(k2==0)return KEY2;
		else if(k3==0)return KEY3;
		else if(k4==0)return KEY4;				
	}
	else if(k1==1&&k2==1&&k3==1&&k4==1)
	{
		keyen=1;
	}
	return 0;	
}

void DigDisplay()
{
	u8 i;
	for(i=0;i<8;i++)
	{
		switch(i)	 
		{
			case(0):
				LSA=1;LSB=1;LSC=1; break;
			case(1):
				LSA=0;LSB=1;LSC=1; break;
			case(2):
				LSA=1;LSB=0;LSC=1; break;
			case(3):
				LSA=0;LSB=0;LSC=1; break;
			case(4):
				LSA=1;LSB=1;LSC=0; break;
			case(5):
				LSA=0;LSB=1;LSC=0; break;
			case(6):
				LSA=1;LSB=0;LSC=0; break;
			case(7):
				LSA=0;LSB=0;LSC=0; break;
		}
		P0=DisplayData[i];
		delay(100); 
		P0=0x00;
	}
}

void datapros()
{
	u8 key=KeyScan(0);
	switch(key)
	{
		case 1:  keynum1++;if(keynum1==9)keynum1=0; break;
		case 2:  keynum2++;if(keynum2==9)keynum2=0; break;
		case 3:  keynum3++;if(keynum3==9)keynum3=0; break;
		case 4:  keynum4++;if(keynum4==9)keynum4=0; break;
	}
	DisplayData[0]=smgduan[keynum1];
	DisplayData[1]=smgduan[keynum2];
	DisplayData[2]=smgduan[keynum3];
	DisplayData[3]=smgduan[keynum4];
}

void main()
{	
	while(1)
	{
		datapros();
		DigDisplay();	
	}		
}


以上代码实现其功能,当按下不同按键时,不同的数码管数字变换。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

51单片机实战 1 --四个独立按键控制四位数码管 的相关文章

  • 基于51单片机的智能窗帘设计

    具体实现功能 系统由STC89C51 1602液晶 步进电机 光敏电阻 按键模块 DS1302时钟模块 ADC0832模块 电源构成 1 LCD1602显示日期和时间 当前控制模式及光照强度 2 可通过按键切换 手动模式 定时模式 光控模式
  • 51单片机的步进电机控制系统(仿真+程序+报告+原理图)

    1 主要功能 该系统由AT89C51单片机 数码管模块 步进电机模块 按键模块构成 可实现功能 1 按键控制步进电机正反转 加减速 停止 2 2个发光二极管显示正反转 1位7段LED数码管显示当前转速档位 共9个档位 3 4个红色LED 指
  • 12. 直流电机调速(PWM)

    直流电机介绍 直流电机是一种将电能转换为机械能的装置 一般的直流电机有两个电极 当电极正接时 电机正转 当电极反接时 电机反转 直流电机主要由永磁体 定子 线圈 转子 和换向器组成 除直流电机外 常见的电机还有步进电机 舵机 无刷电机 空心
  • 51单片机汇编指令

    注 Rn与Ri中n 0 7 i 0 1 另外Cy是进位位 同时也是状态位 标志位 数据传送类指令 内部数据传送指令 助记符 作用 寻址方式 机器周期 字节数 MOV A Rn 将Rn的内容传送给A 寄存器 1 1 MOV A direct
  • 关于51/STC单片机中断优先级的调整

    来源 单片机简单程序 zhjysx的博客 CSDN博客https blog csdn net zhjysx category 11558658 html 目录 内容简述 理论 中断源类型 IP寄存器 LED程序 Proteus仿真图 外部中
  • keil5报错:* RESTRICTED VERSION WITH 0800H BYTE CODE SIZE LIMIT; USED: 08B5H BYTE (108%) *保姆级教程

    项目场景 keil uVsion5的编译的时代码的字节过大出现 问题描述 RESTRICTED VERSION WITH 0800H BYTE CODE SIZE LIMIT 原因分析 原因就是你的keil为2048字节代码限制的版本 而你
  • 基于51单片机的霍尔自行车里程测速仪(含Keil程序和Proteus文件)

    系统概述 系统使用的模块有AT89C51单片机 LCD1602显示屏 霍尔测速模块 本设计采用51单片机为核心控制 使用LCD1602显示采集到的速度 霍尔测速模块进行测速 测速的原理是通过磁感应原理检测开关变化量 通过检测两个开关量的时间
  • 基于单片机超声波测距语音播放

    一 系统方案 本设计采用52单片机作为主控器 HC SR04测距 液晶1602显示 按键设置报警阀值 语音报警 二 硬件设计 原理图如下 三 单片机软件设计 1 首先是系统初始化 uint dist 保存超声波模块测量到的结果 Trig P
  • 51单片机AD转换代码原理图参考

    include reg52 h define uchar unsigned char define uint unsigned int sbit ADC RD P3 3 sbit ADC WR P3 4 sbit ADC INT P3 5
  • 51单片机学习笔记-12LCD1602液晶屏

    12 LCD1602液晶屏 toc 注 笔记主要参考B站江科大自化协教学视频 51单片机入门教程 2020版 程序全程纯手打 从零开始入门 注 工程及代码文件放在了本人的Github仓库 12 1 LCD1602介绍 LCD1602 Liq
  • 51单片机总结【引脚、时钟电路、复位电路、I/O端口、内部结构】

    1 功能简述 STC89C52 是一种低功耗 高性能CMOS8位微控制器 具有8K在系统可编程Flash存储器 ROM STC89C52具有以下标准功能 8k字节Flash 程序存储器ROM 512字节RAM 256字节内部和256字节外部
  • 51汇编——矩阵键盘

    矩阵按键可以说是51单片机一个比较典型的输入型的外设 它可以让人与单片机更好的进行交互 这一小节打算写一个4X4的矩阵按键 至于2X8 3X4 3X3 这些类型的其实他们的原理都是一样的 可以仿4X4的来写 矩阵按键扫描原理 这里使用的是8
  • 【51单片机 】定时器的初始值计算 详解

    首先值得一提的是 51单片机定时器与主程序是并行工作的 就是主程序在运行的时候 定时器也在计数 计数溢出后定时器中断主程序的运行 转而执行中断服务程序 此外还有串行口 中断系统 都独立的工作 不用 CPU 干预 正文部分 好了 我们先来看初
  • Keil报错 requires ANSI-style prototype

    在进行模块化程序设计时遇到这种error 这是头文件没有定义的问题 首先在同一个目录下建立一个 h文件 第二步打开文件 进行编辑 要用到 ifndef define endif 这是为了避免重复定义 ifndef后面跟的是头文件名称的大写
  • (十六)ADC转换实验

    本节主要是回顾有关于ADC的对应内容 我们这章通过一个AD芯片xpt2046来读取外部电压的变化 将电压的数字量显示在数码管上 关于ADC 我们都知道单片机内部都是数字量 就是1或者0 而我们的电流电压在传递的时候是模拟量 也就是模拟量很可
  • proteus设计教程-DS1302时钟芯片驱动程序

    时钟芯片DS1302电路图如下 晶振X1的频率为32 768khz 读写时间只需要调用void read time void write time 两个函数进行操作 直接读取出来的数据是BCD码的形式 需要进行转换 最后提供的两个函数to
  • 基于51单片机实现8位数码管显示表白数字(Proteus仿真)

    wechat 嵌入式工程师成长日记 具体功能实现 8位数码管从左往右显示 5201314 并且不闪烁 使用器件 若干电阻 4只LED红灯 8位数码管 总线 排阻 NPN三极管 AT89C51芯片 Proteus仿真原理图 WeChat 愿随
  • Android Studio设计APP实现与51单片机通过WIFI模块(ESP8266-01S)通讯控制LED灯亮灭的设计源码【详解】

    目录 一 前言 二 效果展示 1 APP界面展示 2 C51硬件展示 三 Android Studio APP源代码 1 AndroidManifest xml 1 请求联网 2 开放明文传输 2 MainActivity java 3 L
  • 51单片机的智能饮水机控制系统【proteus仿真+程序+原理图】

    1 主要功能 该系统由AT89C51单片机 LCD1602模块 DS18B20温度传感器模块 DS1302时间模块 继电器驱动模块 电位器模块构成 适用于智能饮水机 智能水杯等相似项目 可实现功能 版本一 1 LCD1602实时显示时间 水
  • Linux值得学习吗?打工人利用业务时间学习Linux需要多长时间?

    nbsp Linux值得学习吗 打工人利用业务时间学习Linux需要多长时间 在开始前我有一些资料 是我根据自己从业十年经验 熬夜搞了几个通宵 精心整理了一份 Linux的资料从专业入门到高级教程 工具包 点个关注 全部无偿共享给大家 在评

随机推荐

  • es6链判断运算符和null的判断运算符

    链判断运算符 JavaScript在实际编程中 如果读取对象内部的某个属性 往往需要判断一下 需要判断属性的上层对象是否存在 比如 读取 dataList userInfo firstName这个属性 安全的写法是写成下面这样 let da
  • 【微信小程序】小程序之间跳转(路由)参数传递及跳转方式详解和封装

    今天我们来说道说道微信小程序里面当中的几种跳转方式 微信小程序跳转的方式总共有5种 可以对应各种的应用场景 1 wx navigateTo 保留当前页面 跳转到应用内的某个页面 但是不能跳到 tabbar 页面 可封装函数为 跳转新页面页面
  • 项目中没有 requirements.txt

    项目下创建一个文件 autoinstall py 复制下面的代码 在项目最开始加入import autoinstall 直接运行项目即可 import sys import os from importlib import import m
  • 《机器学习有意思! 01》- 世界上最简单的机器学习入门

    本文首发于https jizhi im blog post ml is fun 01 你是否也曾听人们谈起机器学习但是只有一个朦胧的概念 你是否厌倦了在同事的高谈阔论中颓然欲睡 此诚求变之机 本教程适合所有对机器学习感到好奇 却不知从何下手
  • js的垃圾回收机制

    js 垃圾回收机制 GC 1 GC garbage collection js具有 自动 垃圾回收机制 即执行环境会负责管理代码执行过程中使用的内存 2 GC会定期 周期性的 找出那些不再继续使用的变量 然后释放其内存 3 不再使用的变量即
  • MySQL之explain 的type列 & Extra列

    explain 可以分析 select 语句的执行 即 MySQL 的 执行计划 一 type 列 MySQL 在表里找到所需行的方式 包括 由左至右 由最差到最好 All index range ref eq ref const syst
  • QT 基础布局类总结

    文章目录 系列文章目录 前言 一 水平布局 二 垂直布局 三 网格布局 总结 前言 1 水平布局 垂直布局 网格布局均放置于QGroupBox中 2 继承QWidget类 在构造函数中调用setLayout 函数 即可完成布局 一 水平布局
  • 经典面试智力题200+题和解答

    招聘时期到了 总少不了需要准备智力题 考来考去大多是各种旧题 本来是考智力的事情 现在几乎已经变成了题海战术的考试 所以我们也不能在这一块落后 学习各种奇巧淫技 扩展一下思路 同时免得笔试面试吃亏 搜集了大量智力题 有些还挺有意思 顺便活跃
  • EnPass+WebDAV(一个跨平台密码管理解决方案)

    使用 EnPass密码管理软件 和 坚果云WebDAV 服务来搭建一个跨平台的密码管理方案 前言 相信很多人仍然处于 一个密码走天下 这一状态 但这种情况在当今互联网时代无异于裸奔 各种服务器漏洞造成的密码泄露 还有 撞库 等连锁反应 所以
  • 如何巧妙拒绝别人,搭配Online有小妙招

    相信很多人都会有拒绝别人的烦恼 一旦开口拒绝 难免会得罪人 如果答应下来 自己又无力帮助 这时往往存在矛盾冲突关系 那么如何解决这个问题呢 搭配Online提醒您要注意巧妙拒绝方面的技巧啦 1 耐心倾听对方的请求 即使心里清楚自己最后要拒绝
  • 新榜

    在过去的一个月中 淄博烧烤的相关话题霸屏网络 这些媒介话题里承载了多少受众的向往与想象 根据2022年淄博市文旅局公开年报 去年 淄博官方就着力融媒体 在抖音 快手等平台创新使用 淄博到底有多牛 主题形式 通过视频内容和文案策划 长效推广淄
  • Simpsons’ Hidden Talents【KMP模板题】

    Homer Marge I just figured out a way to discover some of the talents we weren t aware we had Marge Yeah what is it Homer
  • 区块链的数据是存储在链上,还是在数据库中?(答案是这个问题并不成立,来一起了解一下吧)

    很多人都想了解区块链的数据到底什么时候是存储在链上 什么时候又储存在相应节点的数据库中间呢 今天我们就来解决这个有趣的问题 首先我们必须了解清楚两个概念 区块链数据 链上数据 首先 区块链数据包括区块数据和状态数据两者 区块数据描述的实际是
  • hive分区表详细介绍

    一 什么是分区表以及作用 数据分区的概念以及存在很久了 通常使用分区来水平分散压力 将数据从物理上移到和使用最频繁的用户更近的地方 以及实现其目的 hive中有分区表的概念 我们可以看到分区具重要性能优势 而且分区表还可以将数据以一种符合逻
  • Datalore安装使用教程

    发现一个jetbrain出的好东西 使用体验完爆jupyter notebook以及jupyter lab的软件 就是安装有点复杂 官网写得有点不清楚 这里简单介绍一下 首先他只能在linux运行 其他环境暂时不支持 首先 去https w
  • react简要分析

    一 简介 前段时间看到一个用33行代码就实现了一个非常基本的react代码 感觉还是蛮有趣的 代码如下 其主要实现了两大功能 生成虚拟DOM 根据虚拟DOM渲染出真实的DOM 无注释版 https github com leontrolsk
  • linux下查看物理CPU个数、核数、逻辑CPU个数

    cat proc cpuinfo中的信息 processor 逻辑处理器的id physical id 物理封装的处理器的id core id 每个核心的id cpu cores 位于相同物理封装的处理器中的内核数量 siblings 位于
  • 消息队列中间件 - 详解RabbitMQ6种模式

    RabbitMQ 6种工作模式 对RabbitMQ 6种工作模式 简单模式 工作模式 订阅模式 路由模式 主题模式 RPC模式 进行场景和参数进行讲解 PHP代码作为实例 安装 客户端实现 添加扩展 执行composer phar inst
  • 《计算机网络—自顶向下方法》 Wireshark实验(七):以太网与ARP协议分析

    1 以太网 1 1 介绍 以太网是现实世界中最普遍的一种计算机网络 以太网有两类 第一类是经典以太网 第二类是交换式以太网 使用了一种称为交换机的设备连接不同的计算机 经典以太网 是以太网的原始形式 运行速度从 3 10 Mbps 不等 交
  • 51单片机实战 1 --四个独立按键控制四位数码管

    本文基于普中51开发板 在其例程代码稍加改动而成的 单片机的入门小项目也很益智 启动单片机 四位数码管显示0000 按下s1并松开 显示1000 再按下s1并松开显示2000 连续10次按下并松开s2 数码管显示2100 2200 2300