利用中断做数码表

功能要求:1.按下KEY1,显示数字开始每0.5秒加1,加到(10+学号)返回0,0显示2秒后继续开始重复加1。

2. 任何时候按下KEY2数字清零,并停止加1。

3. KEY1和KEY2分别采用查询和外部中断方式。

要求程序中有硬件定时和软件定时两种定时方式,给出系统的硬件电路、程序和仿真视频。



#include <REGX51.H>

sbit KEY1 = P3^0;                      //定义按键KEY1
signed char mode = 2;                  //定义模式
signed char timer = 0, count = 0;		 //定时器0.5秒溢出计数
signed char number, number_h, number_l;//定义显示数字
unsigned char code SEG[] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90};//数码管显示0~9

signed char nu = 1;//定时器两秒标志

void Delayms(unsigned int xms)		     //毫秒延迟函数
{
	unsigned char i, j;

	while(xms--)
	{
		i = 2;
		j = 239;
		do
		{
			while (--j);
		} while (--i);
	}
}

void Mode_selection();//模式选择函数
void mode1();					//模式1
void mode2();					//模式2

void main()
{
	EX0 = 1;		//外部中断0允许
	IT0 = 1;		//负跳变触发
	PX0 = 1;		//外部中段0高优先级
	
	ET0 = 1;		//T0定时器中断允许
	PT0 = 0;		//T0定时器低优先级
	
	TMOD = 0x01;//T0以定时器方式1进行计数
	TH0 = 0x3C; //装入初值,定时50毫秒
	TL0 = 0xB0;

	EA = 1;			//打开总中断
	
	TR0 = 1;    //打开定时器
	
	while(1)
	{
		Mode_selection();
	}
}

void int_T0() interrupt 1
{
	if(number < 40)//$$$$$$$$$$$$数字根据自己需要更改
	{
		timer++;//50毫秒加一,timer == 10为0.5秒
		if(timer == 10)
		{
			number++;//0.5秒加一
			if(timer == 10)
				timer = 0;
		}		
	}

	if(number == 40)//$$$$$$$$$$$$数字根据自己需要更改
	{
		count++;
		if(count == 40)//两秒num清零$$$$$$$$$$$$数字根据自己需要更改
		{
			count = 0;
			nu = 0;
		}		
	}

	
	TH0 = 0x3C; //重装初值
	TL0 = 0xB0;
}

void int_EX1() interrupt 0
{
	mode = 2;
}

void Mode_selection()
{
	switch(mode)
	{
		case 1:
			mode1(); break;
		case 2:
			mode2(); break;
	}
}

void mode1()
{
	while(1)
	{
		//分开number高位低位
		number_h = number/10;
		number_l = number%10;
		
		P0 = 0x01;
		P1 = SEG[number_h];
		Delayms(1);
		P0 = 0x02;
		P1 = SEG[number_l];
		Delayms(1);
		
		if(number == 40)//加到(10+学号)返回0,0显示2秒后继续开始重复加1$$$$$$$$$$$$数字根据自己需要更改
		{
			
			while(nu)
			{
				P0 = 0x01;
			  P1 = SEG[0];
				Delayms(1);
				P0 = 0x02;
				P1 = SEG[0];
				Delayms(1);				
			}
			
			number = 0;
			nu = 1;
	
			TH0 = 0x3C;//重装初值
			TL0 = 0xB0;	
		}
		
		if(mode != 1)
			break;
	}
}

void mode2()
{
	TR0 = 0;//关闭定时器
	ET0 = 0;//关闭定时器中断
	
	number = 0;
	
	while(1)
	{
		P0 = 0x01;
		P1 = SEG[0];
		Delayms(1);
		P0 = 0x02;
		P1 = SEG[0];
		Delayms(1);		
		
		if(KEY1 == 0)//检测按键KEY1是否按下
		{
			Delayms(10);
			if(KEY1 == 0);
				mode = 1;
		}
		
		if(mode != 2)//判断是否切换模式
			break;
	}
	
	ET0 = 1;//打开定时器中断
	
	TH0 = 0x3C;//重装初值
	TL0 = 0xB0;	
	
	TR0 = 1;//打开定时器
}

 视频在主页视频

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/130121.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

概念解析 | 高光谱图像:揭开自然世界的神秘面纱

注1:本文系“概念解析”系列之一,致力于简洁清晰地解释、辨析复杂而专业的概念。本次辨析的概念是:高光谱图像 高光谱图像:揭开自然世界的神秘面纱 Hyperspectral imaging - Wikipedia 背景介绍 我们生活的世界充满了丰富多彩的颜色。这些颜色来源于各种物体反射或吸收不同波长…

PM - 项目管理 产品管理区别

产品管理和项目管理是两个在企业中至关重要的职能部门&#xff0c;它们各自承担着不同的职责和任务。虽然两者在某些方面存在重叠&#xff0c;但它们的核心目标和方法有很大的不同。本文将对产品管理和项目管理进行详细的比较和分析。 “项目管理和产品管理有什么区别&#xff…

微服务架构下如何使用多环境多服务联合调试

在 微服务 架构中&#xff0c;项目被分解成多个独立的模块&#xff0c;每个模块对应一个微服务。这些微服务各自承担不同的任务&#xff0c;例如用户管理、支付处理或订单管理。它们可以使用不同的技术栈&#xff0c;独立开发、测试和部署。微服务之间通过 API 等方式进行通信&…

Node.js中的child_process模块的作用

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

【Python报错合集】Python元组tuple、张量tensor(IndexError、TypeError、RuntimeError……)~持续更新

文章目录 IndexError1. tuple index out of rangea. 示例代码b.报错原因c.解决方案 TypeError1. len() of a 0-d tensora. 示例代码b.报错原因c.解决方案 RuntimeError1. output with shape … doesnt match the broadcast shape …a. 示例代码b.报错原因c.解决方案 2. Cant ca…

apollo docker搭建

1 mysql搭建 先需要一个mysql&#xff0c;mysql我使用的是5.7&#xff0c;搭建过程忽略 2 数据导入 我们需要从github上下载apolloportaldb.sql, apolloconfigdb.sql 2个sql 随后cp apolloconfigdb.sql apolloconfigdbUat.sql cp apolloconfigdb.sql apolloconfigdbDev.sq…

内存取证分析

内存取证会临时存储一些有价值的信息 查看内存进程的信息等等&#xff0c;对溯源这种事情有帮助。不过要用到专门的工具获取信息 运行exe文件&#xff0c;输入y将一个系统的镜像完整的下载下来&#xff0c; 这就是保存下来的文件。 视频上别的工具搞不来&#xff0c;要不就是…

十五、W5100S/W5500+RP2040树莓派Pico<TFTP Client>

文章目录 1 前言2 简介2 .1 什么是TFTP&#xff1f;2.2 TFTP的优点2.3 TFTP和FTP对比2.4 TFTP应用场景 3 WIZnet以太网芯片4 ARP网络设置示例概述以及使用4.1 流程图4.2 准备工作核心4.3 连接方式4.4 主要代码概述4.5 结果演示 5 注意事项6 相关链接 1 前言 一般来说&#xff0…

Deep Freeze冰点还原2024中文免费版恢电脑数据恢复工具

相信大家都认同更新日志&#xff1a;支持Win 10功能更新&#xff0c;Win更新的恢复升级&#xff0c;将系统驱动器从深度冻结保护中排除&#xff0c;全支持NVME驱动器&#xff0c;支持ISCSI驱动器。人所共知的是集成性和兼容性&#xff1a;Deep Freeze 冰点可兼容多种硬盘驱动器…

MySQL 8.0.13升级到8.0.35记录 .NET

1、修改表结构的字符集 utf8 修改成 utf8mb4 utf8_general_ci 修改成 utf8mb4_0900_ai_ci 注&#xff1a;所有地方都要替换。 否则会报错误提示&#xff1a;Character set utf8mb3 is not supported 下面是.NET环境升级遇到的问题 2、MySQL Connector Net 8.0.13 在程…

python自动化测试selenium核心技术3种等待方式详解

这篇文章主要为大家介绍了python自动化测试selenium的核心技术三种等待方式示例详解&#xff0c;有需要的朋友可以借鉴参考下&#xff0c;希望能够有所帮助&#xff0c;祝大家多多进步早日升职加薪 UI自动化测试过程中&#xff0c;可能会出现因测试环境不稳定、网络慢等情况&a…

财税服务展示预约小程序的作用是什么

财税财政往往困扰着很多公司&#xff0c;尤其是公司里没有相应职员或工作压力大的情况下&#xff0c;不少商家就会寻找代理记账、审计服务、会计代理等服务的机构。 对财政服务代理机构&#xff08;会计公司&#xff09;来说&#xff0c;市场企业多而广&#xff0c;理论上来说…

【KingbaseES】R6 Liunx下使用命令行部署数据库集群

【KingbaseES】R6命令行部署数据库集群 A.数据库安装包下载软件下载页面授权下载页面 B.数据库集群部署软件安装第一步&#xff1a;创建Kingbase用户第二步&#xff1a;上传安装包1.创建Kingbase用户和准备安装目录2.使用FTP工具上传安装包镜像和授权文件到install目录下并授权…

城市内涝积水的原因有哪些?万宾科技内涝积水监测仪工作原理

一旦有暴雨预警出现多地便会立即响应&#xff0c;以防城市内涝问题出现。随着人口迁移&#xff0c;越来越多的人口涌入城市之中&#xff0c;为了完善城市基础设施建设&#xff0c;城市应急管理部门对内涝的监测越来越严格&#xff0c;在信息化时代&#xff0c;城市管理也趋向于…

阿里入局SSD赛道,刚发布的首款主控芯片有点猛啊

不知道大家有没有发现&#xff0c;这两年国产科技领域崛起势头是越来越猛了。 以往似乎多少年都没太大长进的 CPU、显卡等半导体产品&#xff0c;如今总能时不时冒出个劲爆消息。 前不久发布的龙芯 3A6000 处理器&#xff0c;性能达到了 Intel 10 代酷睿和 AMD Zen2 水平&…

git增加右键菜单

有次不小心清理系统垃圾&#xff0c;把git右击菜单搞没了&#xff0c;下面是恢复方法 将下面代码存为.reg文件&#xff0c;双击后导出生效&#xff0c;注意&#xff0c;你安装的git必须是默认C盘的&#xff0c;如果换了地方要改下面注册表文件中相关的位置 Windows Registry …

远程电脑未连接显示器时分辨率太小的问题处理

背景&#xff1a;单位电脑显示器坏了&#xff0c;使用笔记本通过向日葵远程连接&#xff0c;发现分辨率只有800*600并且不能修改&#xff0c;网上找了好久找到了处理方法这里记录一下&#xff0c;主要用到的是一个虚拟显示器软件usbmmidd_v2 1)下载usbmmidd_v2 2&#xff09;…

5个基于.Net Core值得推荐的CMS开源项目

盘点5个基于.Net Core的内容管理系统&#xff08;CMS&#xff09;开源项目系统。 一、基于.Net Core、Vue开发仿掘金的CMS开源系统 项目简介 后台采用.Net Core 6开发的&#xff0c;前端采用Vue前后端分离的架构。目前实现简约的权限管理系统、基础字典项管理、随笔专栏&…

广州华锐互动:VR互动实训内容编辑器助力教育创新升级

随着科技的飞速发展&#xff0c;教育领域也正在经历一场深刻的变革。其中&#xff0c;虚拟现实(VR)技术为教学活动提供了前所未有的便利和可能性。在诸多的VR应用中&#xff0c;VR互动实训内容编辑器无疑是最具潜力和创新性的一种。广州华锐互动开发的这款编辑器以其独特的功能…

软件测试工程师简历项目经验怎么写?--含【真实入职简历模板】

一、前言&#xff1a;浅谈面试 面试是我们进入一个公司的门槛&#xff0c;通过了面试才能进入公司&#xff0c;你的面试结果和你的薪资是息息相关的。那如何才能顺利的通过面试&#xff0c;得到公司的认可呢?面试软件测试要注意哪些问题呢?下面和笔者一起来看看吧。这里分享一…