按键控制数码管加减清零

2023-11-12

/*
实验说明:
	
实验接线:
	独立按键模块-->单片机管脚
	K1-->P31
	K2-->P30
	K3-->P32
	K4-->P33(未使用,大家可以自己扩展功能)
	动态数码管模块-->单片机管脚
	参考动态数码管实验接线(开发攻略内在对应的实验章节内实验现象有接线说明)
实验现象:
	按下K1键,数值加1,按下K2键,数值减1,按下K3键数值清零
*/

#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};//显示0~F的值


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

char keynum;			//延时函数
u8 DisplayData[8];
/*******************************************************************************
*            : delay
* 函数功能		   : 延时函数,i=1时,大约延时10us
*******************************************************************************/
void delay(u16 i)
{
	while(i--);	
}

//mode=0 单次   1:连续
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;	   //如果按下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;   //如果松手keyen=1;
	}
	return 0;	
}


/*******************************************************************************
*            : DigDisplay
* 函数功能		   : 数码管动态扫描函数,循环扫描8个数码管显示
*******************************************************************************/
void DigDisplay()		//数码管位选函数
{
	u8 i;
	for(i=0;i<8;i++)
	{
		switch(i)	 //位选,选择点亮的数码管,
		{
			case(0):
				LSA=1;LSB=1;LSC=1; break;//显示第7
			case(1):
				LSA=0;LSB=1;LSC=1; break;//显示第6
			case(2):
				LSA=1;LSB=0;LSC=1; break;//显示第5
			case(3):
				LSA=0;LSB=0;LSC=1; break;//显示第4
			case(4):
				LSA=1;LSB=1;LSC=0; break;//显示第3 
			case(5):
				LSA=0;LSB=1;LSC=0; break;//显示第2 
			case(6):
				LSA=1;LSB=0;LSC=0; break;//显示第1 
			case(7):
				LSA=0;LSB=0;LSC=0; break;//显示第0	
		}
		P0=DisplayData[i];//发送段码
		delay(100); //间隔一段时间扫描	
		P0=0x00;//消隐
	}
}

void datapros()		//按键显示值函数
{
	u8 key=KeyScan(0);	  //key=按键检测函数0
	switch(key)
	{
		case 1:  keynum++;if(keynum==100)keynum=0; break;  //按键1
		case 2:  keynum--;if(keynum<=0)keynum=99; break;   //按键2
		case 3:  keynum=0; break;						   //按键3
		case 4:   break;
	}
	DisplayData[0]=smgduan[keynum/10]; //显示数码管第八位
	DisplayData[1]=smgduan[keynum%10]; //显示数码管第七位
}
/*******************************************************************************
*          : main
* 函数功能		 : 主函数
*            : 
*         	 : 
*******************************************************************************/
void main()
{	
	while(1)
	{
		datapros();	 	//按键显示值函数调用
		DigDisplay();	  //数码管位选函数
	}		
}



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

按键控制数码管加减清零 的相关文章

  • c++实现创建一个cocos2d-x的场景类

    文件 http pan baidu com s 1ntlu14H createVSClass cpp 定义控制台应用程序的入口点 include stdafx h include
  • RocketMQ消费者端消息列队六种负载均衡算法分析

    在RocketMQ启动的时候会启动负载均衡线程 过程如下 DefaultMQPullConsumerImpl start mQClientFactory start 上面点进去 gt MQClientInstance start rebal
  • 区间调度1.找到移除区间的最小数量

    求出最多有几个互不相交的区间 则做法是按end升序排序 选择一个结束最早的x 然后把区间中与它冲突的全部删除 别的区间的start要大于这个区间的end 接着重复步骤直到堆中没有区间 不用堆只用数组的话可以用一个for循环遍历整个数组 记录
  • 火猴之arc以及gesturemanager的应用(firemonkey)

    效果 目标 1 向左滑动 环形进度条从0 100 2 向右滑动 环形进度条从100 0 思路 1 放置3个arc组件 rotationangle设置为270 stroke的thickness设为30 2 放置gesturemanager组件
  • [Windows] 在磁盘管理中,脱机选项不可选,无法将磁盘脱机

    1 在磁盘管理中遇到无法脱机磁盘的情况 脱机选项不可选 可能是由于将虚拟内存设置到该磁盘上导致的 2 进入电脑属性 gt 高级系统设置 gt 高级 gt 性能设置 gt 高级 gt 更改 3 取消在该磁盘上设置的虚拟内存 4 再进入磁盘管理
  • Qt 智能指针

    C 11 标准中的提供的智能指针 在 Qt 中也提供了类似的替代功能 并且比 C 11 标准中提供的功能还要强大 所以如果我们使用 Qt 作为基础库 Qt 智能指针包括 QSharedPointer QScopedPointer QScop
  • 【react】js表达式和js语句(代码)的区别

    何为表达式 一定注意区分 js语句 代码 与 js表达式 1 表达式 一个表达式会产生一个值 可以放在任何一个需要值的地方 下面这些都是表达式 1 a 2 a b 3 demo 1 4 arr map 5 function test 2 语
  • Tomcat载入配置

    错误出现原因 未配置环境变量
  • (N1盒子) Openwrt 下 docker 容器访问互联网故障排除

    环境 硬件 N1盒子 Openwrt版本 openwrt flippy 60 o 情况描述 先是跑了个运行php的docker容器 日志里报错信息为 cURL error 7 Failed to connect to 域名 port 端口号
  • 《基于Linux物联网综合项目》常见问题汇总fae

    关于该课程说明 1 本课程目标 通过web浏览器访问服务器 实现登录 注册 数据库操作 远程操控硬件 采集环境信息 远程监控 拍照 图片显示等功能 将单片机 linux html 摄像头 数据库等知识点融入到一个项目中 2 什么群体适合学习
  • 自然语言处理卷积神经网络c 代码,卷积神经网络CNN 在自然语言处理中的应用

    序言 CNN在文本分类中取得了不俗的结果 而运用在这里的卷积可以分为1d 2d甚至是3d的 我们知道 CNN一般用来做图像 图像是可以通过预处理 将每幅照片都处理成一样的size的 也就是height和width具有一样的像素值 然后用一个
  • SPRINGBOOT学习记录

    SPRINGBOOT 1 入门 1 1 springBoot具体流程 1yaml 配置文件 2 自动装配 3集成web框架 4 集成数据库 5分布式开发 Dubbo rpc zookeeper 6 swagger 接口文档 7 任务调度 8
  • 图论--差分约束

    小引入 如果一个系统由n个变量和m个约束条件组成 形成如xi xj lt k ij 1 n 的不等式 则称其为查分约束系统 写成一个矩阵形式的不等式组的话则系数有且仅有一个1和一个 1 解这种不等式组为何会与图论扯上关系呢 在我们求解最短路
  • kindle刷机ttl_[原创]只需USB线对Kindle 3修砖的小白教程

    文章的最后有笔者用的电池测试方法和笔者在网盘上传的文件链接 正式开工 1 运行ATK 把i MX CPU设为iMX35 TO2 Device memory initial设为MDDR Host Setting设成USB 2 连接Kindle
  • WCF系列(五) -- 也谈序列化(下)

    1 DataContractSerializer支持的类型 2 1 1 用 DataContract 属性标记的类型 2 1 2 net 原生类型
  • 在Visual Studio 2017 中编写C#安装NuGet、使用元组特性的详细步骤

    主要是解决一下小白的迷茫 一 安装NuGet管理器 1 打开vs2017 打开 工具 扩展与更新 2 左侧目录点 联机 右上侧搜索栏输入 Nuget 搜索 3 下载NuPack NuGet Packager扩展 一次点击可能会下载不成功 那
  • 04_Qt信号与槽机制

    文章目录 一 信号和槽 1 1 Qt5的书写方式 1 1 1 处理子窗口的信号不带参数 1 1 2 处理子窗口的信号带参数 使用函数指针 1 2 Qt4的书写方式 1 3 Lambda表达式 匿名函数对象 二 自定义信号槽 2 1 信号 2
  • Linux学习之权限

    在学习Linux权限之前 我们先理解一下关于Linux内核与shell外壳之间的关系 shell命令以及运行原理 Linux严格意义上说的是一个操作系统 我们称之为 核心 kernel 但我们一般用户 不能直接使用kernel 而是通过ke
  • 室友打了一把端游,我入门了Vue

    快速入门Vue 多种选择器 class选择器 标签选择器 data数据对象 Vue 指令 设置标签的文本值 textContent 设置标签的innerHtml v html 为元素绑定事件 v on 根据表达式的真假 切换元素的显示和隐藏
  • 【Python基础】matplotlib字体设置看这一篇就够了

    本文示例文件已上传至我的Github仓库https github com CNFeffery DataScienceStudyNotes 1 简介 matplotlib作为数据可视化的利器 被广泛用于数据分析之中 但不太友好的是matplo

随机推荐

  • 全数字锁相环(DPLL)的原理简介以及verilog设计代码

    随着数字电路技术的发展 数字锁相环在调制解调 频率合成 FM 立体声解码 彩色副载波同步 图象处理等各个方面得到了广泛的应用 数字锁相环不仅吸收了数字电路可靠性高 体积小 价格低等优点 还解决了模拟锁相环的直流零点漂移 器件饱和及易受电源和
  • 微信小程序——数据绑定

    在微信小程序中 可以通过以下代码实现数据绑定 在WXML中 使用双大括号 绑定数据 将数据渲染到对应的视图中
  • 【蓝桥杯】 (算法训练篇)K好数

    蓝桥杯 算法训练篇 K好数 问题描述 如果一个自然数N的K进制表示中任意的相邻的两位都不是相邻的数字 那么我们就说这个数是K好数 求L位K进制数中K好数的数目 例如K 4 L 2的时候 所有K好数为11 13 20 22 30 31 33
  • 一个人,仅30天!开发一款3D竞技足球游戏!他究竟经历了些什么?

    今天 晓衡向大家推荐一款Coco Store 优质 3D足球竞技游戏 资源 足球快斗 玩法介绍 游戏为 7V7 足球竞技类玩法 玩家控制本队的一个球员 脚下高亮圆圈显示的是玩家 其他球员和守门员为电脑AI控制 期间可以玩家可以换人 A按钮换
  • pycharm tips pycharm 使用技巧

    你好 这里只是pycharm tips 的翻译内容 任何工具窗口中的Esc键都将焦点移动到编辑器 Shift Esc将焦点移动到编辑器 并隐藏当前 或最后一个活动 工具窗口 F12键将焦点从编辑器移动到最后一个聚焦工具窗口 在编辑器中Ctr
  • Python语言程序设计 第一周习题

    Python语言程序设计 第一周习题 习题1 获得用户输入的一个整数 参考该整数值 打印输出 Hello World 要求 如果输入值是0 直接输出 Hello World 如果输入值大于0 以两个字符一行方式输出 Hello W
  • ESP32使用Arduino发布和订阅MQTT

    该项目展示了如何在ESP32上使用MQTT通信协议来发布消息和订阅主题 举例来说 我们会将BME280传感器的读数发布到Node RED仪表板 并控制ESP32输出 我们将使用Arduino IDE对ESP32进行编程 介绍 在此示例中 有
  • Ubuntu-16.06 + OpenCV-3.3.0 + 一些常见的问题

    前言 2017 11 18 根据实践过程整理出第一版 2018 01 05 更新对 pkgconfig 的说明 今天在跑一个faster rcnn的案例 https pjreddie com darknet yolo 涉及到编译 openC
  • tomcat 虚拟目录和目录浏览设置

    为了方便开发 需要开设置虚拟目录和目录浏览 如果是生产环境就不要开放目录浏览 设置虚拟目录 先建 d site 设置 CATALINA HOME bin conf server conf
  • Android--使用相对布局搭建用户注册界面

  • oracle:any,some,all的区别

    相关例子 SELECT emp empno emp ename emp job emp sal FROM scott emp WHERE sal gt any SELECT sal FROM scott emp WHERE job MANA
  • Spring 过滤器 拦截器 AOP区别

    简介 这几天在回顾Spring的AOP时 对过滤器 拦截器 AOP的关系有点好奇 故记录做以备份 在实现一些公共逻辑的时候 很多功能通过过滤器 拦截器 AOP都能实现 但是不同的方式有不同的效率 具体有什么区别 看下文描述 前后端交互基本逻
  • 使用Java VisualVM监控远程JVM(远程服务器为linux配置)

    我们经常需要对我们的开发的软件做各种测试 软件对系统资源的使用情况更是不可少 目前有多个监控工具 相比JProfiler对系统资源尤其是内存的消耗是非常庞大 JDK1 6开始自带的VisualVM就是不错的监控工具 这个工具就在JAVA H
  • C++ 函数重载(overroad) 覆盖(override) 隐藏(hide) 的区别

    原文转自 http blog chinaunix net u 15921 showart 227111 html 成员函数被重载的特征 1 相同的范围 在同一个类中 2 函数名字相同 3 参数不同 4 virtual 关键字可有可无 覆盖是
  • 点到UI 不会误点到物体

    这几天在做捕鱼达人游戏时发现 当鼠标点击UI时 炮台的子弹也会发射子弹 这样会影响用户体验 然后网上百度了一波 发现在UGUI系统上 EventSystem提供了一些方法 那就是EventSystem current IsPointerOv
  • ZeroMQ入门

    官网 ZeroMQ 简介 ZeroMQ是一个库 不是消息队列也不是消息中间件 介于应用层和传输层之间 按照TCP IP划分 传统的Socket通信模式需要创建连接 销毁连接 选择协议等一些列操作 而ZeroMQ是在Socket封装一层的并行
  • Java使用多线程查询数据

    目录 前言 实例 前言 什么是进程 进程 是操作系统的概念 一个独立运行的程序 就是一个 进程 什么是线程 线程 是由 进程创建 的 一个进程可以创建任意多的线程 每个线程都包含一些代码 线程中的代码会同主进程或者其他线程 同时运行 什么是
  • 排序算法(六)——希尔排序

    基本思想 希尔排序是基于插入排序的 又叫缩小增量排序 在插入排序中 标记符左边的元素是有序的 右边的是没有排过序的 这个算法取出标记符所指向的数据 存入一个临时变量 接着 在左边有序的数组中找到临时变量应该插入的位置 然后将插入位置之后的元
  • android接入opencv方式

    原网址 https www cnblogs com xiaoxiaoqingyi p 6676096 html Android 接入 OpenCV库的三种方式 OpenCV是一个基于BSD许可 开源 发行的跨平台计算机视觉库 可以运行在Li
  • 按键控制数码管加减清零

    实验说明 实验接线 独立按键模块 gt 单片机管脚 K1 gt P31 K2 gt P30 K3 gt P32 K4 gt P33 未使用 大家可以自己扩展功能 动态数码管模块 gt 单片机管脚 参考动态数码管实验接线 开发攻略内在对应的实