利用中断做数码表

news2024/11/20 2:29:58

功能要求: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.coloradmin.cn/o/1195948.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

最新宝塔面板第三方云端站点程序源码/第三方宝塔面板PHP源码/全开源ThinkPHP框架

源码简介&#xff1a; 实现宝塔面板第三方云端站点程序源码,这个是第三方宝塔面板 btcloud PHP源码&#xff0c;它还有云端使用记录、IP黑白名单、定时任务等功能。 这是一个使用PHP开发的宝塔面板第三方云端站点程序。 您可以利用此程序搭建属于自己的宝塔面板第三方云端&a…

Springboot+vue的高校办公室行政事务管理系统(有报告)。Javaee项目,springboot vue前后端分离项目。

演示视频&#xff1a; Springbootvue的高校办公室行政事务管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot vue前后端分离项目 项目介绍&#xff1a; 本文设计了一个基于Springbootvue的高校办公室行政事务管理系统&#xff0c;采用M&#xff08;m…

九种常用二次曲面的构造过程

九种常用二次曲面的构造过程 1.九种常用二次曲面的构造过程1.1 椭圆锥面1.2 椭球面1.3 单叶双曲面1.4 双叶双曲面1.5 椭圆抛物面1.6 双曲抛物面&#xff08;马鞍面&#xff09;1.7 椭圆柱面1.8 双曲柱面1.9 抛物柱面 1.九种常用二次曲面的构造过程 声明&#xff1a;部分截图来自…

【算法-哈希表1】哈希表有什么用? 来看看 有效的字母异位词 和 两数组的交集.

今天&#xff0c;带来哈希相关算法的讲解。文中不足错漏之处望请斧正&#xff01; 理论基础点这里 有效的字母异位词 1. 思路 暴力的解法&#xff0c;需要两层for循环&#xff0c;同时还要记录字符是否重复出现&#xff0c;很明显时间复杂度是 O(n^2)。 其实可以用哈希表来…

mac 无法 push 代码到 github 报错:Couldn‘t connect to server 或者 无法克隆 github 仓库 ,克隆进度卡住

开启代理后上传代码报错 Failed to connect to github.com port 443 after 75108 ms: Couldn’t connect to server 解决方法 在 网络 设置里查看代理端口号 开启配置 http、https 全局代理 git config --global http.proxy http://127.0.0.1:你所查询的端口号 git confi…

【安卓13】谷歌原生桌面launcher3源码修改,修改桌面布局(首屏应用、小部件、导航栏、大屏设备任务栏)

前言 近期接到一个关于谷歌EDLA认证的需求&#xff0c;我负责的是谷歌原生桌面布局的修改&#xff0c;通过研究源码&#xff0c;将涉及到了一些修改思路发出来&#xff0c;大家可以参考一下有没有对你有用的信息。主要修改内容有&#xff1a; 1、搜索栏、底部导航栏未居中 2、…

吴恩达《机器学习》7-1->7-4:过拟合问题、代价函数、线性回归的正则化、正则化的逻辑回归模型

一、过拟合的本质 过拟合是指模型在训练集上表现良好&#xff0c;但在新数据上的泛化能力较差。考虑到多项式回归的例子&#xff0c;我们可以通过几个模型的比较来理解过拟合的本质。 线性模型&#xff08;欠拟合&#xff09;&#xff1a; 第一个模型是一个线性模型&#xff0…

熊海CMS 靶场

熊海CMS 靶场 0x01 前言 初步了解cms&#xff0c;Content Management System 内容管理系统。它是一种用于创建、编辑、管理和发布内容的软件程序或工具。内容管理系统通常用于网站、博客、企业内部系统等各种应用中&#xff0c;可以帮助用户管理和发布各种类型的内容&#xf…

Clickhouse学习笔记(5)—— ClickHouse 副本

Data Replication | ClickHouse Docs 副本的目的主要是保障数据的高可用性&#xff0c;即使一台 ClickHouse 节点宕机&#xff0c;那么也可以从其他服务器获得相同的数据 注意&#xff1a; clickhouse副本机制的实现要基于zookeeperclickhouse的副本机制只适用于MergeTree f…

一起看看StatusBarManagerService(一)

写在前面 工作需要涉及到这部分代码&#xff0c;但是我对此了解很少&#xff1b;边学边总结&#xff0c;把这部分逻辑和涉及到的知识点弄明白。该系列不确定几篇&#xff0c;随缘。 本篇主要介绍StatusBarManagerService与systemui之间的关联。 了解StatusBarManagerService …

[Android]_[初级]_[配置gradle的环境变量设置安装位置]

场景 在开发Android项目的时候, gradle是官方指定的构建工具。不同项目通过wrapper指定不同版本的gradle。随着项目越来越多&#xff0c;使用的gradle版本也增多&#xff0c;导致它以来的各种库也增加&#xff0c;系统盘空间不足&#xff0c;怎么解决&#xff1f; 说明 grad…

pyqt环境搭建

创建虚拟环境 # 用管理员身份运行 conda create --prefixE:\Python\envs\pyqt5stu python3.6 # 激活虚拟环境 conda activate E:\Python\envs\pyqt5stu # 退出虚拟环境 conda deactivate安装包 pip install PyQt5 -i https://pypi.douban.com/simple pip install PyQt5-tools…

asp.net学生宿舍管理系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio

一、源码特点 asp.net 学生宿舍管理系统是一套完善的web设计管理系统&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为vs2010&#xff0c;数据库为sqlserver2008&#xff0c;使用c#语言 开发 asp.net学生宿舍管理系统1 应用技…

CV计算机视觉每日开源代码Paper with code速览-2023.11.8

精华置顶 墙裂推荐&#xff01;小白如何1个月系统学习CV核心知识&#xff1a;链接 点击CV计算机视觉&#xff0c;关注更多CV干货 论文已打包&#xff0c;点击进入—>下载界面 点击加入—>CV计算机视觉交流群 1.【基础网络架构】&#xff08;WACV2024&#xff09;SBCFo…

Spring Cloud学习(四)【Nacos配置管理】

文章目录 统一配置管理微服务配置拉取配置热更新多环境配置共享Nacos 集群搭建Nacos集群搭建1.集群结构图2.搭建集群2.1.初始化数据库2.2.下载nacos2.3.配置Nacos2.4.启动2.5.nginx反向代理2.6.优化 统一配置管理 Nacos 可以实现注册中心和配置管理服务 在Nacos中添加配置信息…

字符串的模式匹配(朴素模式匹配算法,KMP算法)

目录 1.朴素模式匹配算法1.定义2.算法实现3.代码实现 2.KMP算法1.优化思路2.next数组3.代码实现 3.求next数组4.KMP算法优化1.next数组的优化2.求nextval数组 1.朴素模式匹配算法 子串&#xff1a;主串的一部分&#xff0c;一定存在。 模式串&#xff1a;不一定能在主串中找到。…

【算法与数据结构】93、LeetCode复原 IP 地址

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;参照【算法与数据结构】131、LeetCode分割回文串的思路&#xff0c;需要将IP字符串进行分割&#xff0…

js 实现数字滚动效果,从 0 加到目标值,并且重复执行

js 实现数字滚动效果,从 0 加到目标值,并且重复执行 实现效果 js 方法 方法接收的参数 为目标值 const showNumberref(1999) const animateNumber (target: number) > {let current 0const increment (target - current) / (2000 / 16) // 计算每次递增的值&#xff0c…

华硕荣获“EPEAT Climate+ Champion”永续先驱称号

华硕持续深耕永续理念&#xff0c;努力提供低碳排放、高效能产品&#xff0c;并被全球电子委员会授予“EPEAT Climate Champion”称号。这一荣誉再次表明了华硕在永续管理方面的承诺&#xff0c;并凸显了华硕在追求永续发展上的决心。 华硕通过设立“科学基础减碳目标”、“再生…

lv11 嵌入式开发 ARM体系结构理论基础(异常、微架构)4

1 异常概念 处理器在正常执行程序的过程中可能会遇到一些不正常的事件发生 这时处理器就要将当前的程序暂停下来转而去处理这个异常的事件 异常事件处理完成之后再返回到被异常打断的点继续执行程序 2 异常处理机制 不同的处理器对异常的处理的流程大体相似&#xff0c…