51单片机控制数码管显示以及控制打断

2023-11-03

实践内容:
1.利用单片机的P0口接数码管的字段脚,P1.0脚接共阴极,P3.2、P3.3引脚接独立按键产生外部中断信号。编写程序,当程序正常运行时数码管显示H字符,当外部中断0有中断请求信号时,数码管从0-9循环显示一次后回到正常状态。如果外部中断1有中断请求信号,则数码管从9-0循环显示一次后回到正常状态。要求中断0可以打断中断1。
2.设计硬件电路,并编写程序完成所要求的功能。
3.在Proteus中加载程序代码并运行仿真,通过操作按键观察程序功能。上电时,数码管显示H;当产生外部中断0中断时,数码管从0-9循环显示;当产生外部中断1中断时,数码管从9-0循环显示;当在外部中断1服务运行时,按下按键,数码管改为从0-9 显示。
4.参考元器件:
7SEG-COM-ANODE

在这里插入图片描述

#include<reg52.h>
 unsigned int i,j;
unsigned char code discode[12]={0x76,0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};		 //共阴极形式。阳极取反
void delay(void){		 //延迟函数
	unsigned int m,n;

	for(m=62;m>0;m--)
		for(n=1000;n>0;n--)
			;
}
void main(){
 	P1 = ~discode[0]; //初始化H
	TCON = 0x05;	   //设置为下降沿有效
	IE = 0x85;		   //8(1000)为允许总中断,5(0101)为设置两个x小中断
	IP = 0x14;		   //1(0001)设置PS为1,PX1为1(优先级比PX0高)即S2的按钮有更高的优先级
	while(1){
	  P1 = ~discode[0];		  //程序进行状态,等待中断

	}
}
void int0_int(void) interrupt 0{
									  //中断1,显示0~9 (优先级0)
	for(i=1;i<11;i++){
		P1 = ~discode[i];
		delay();
	}
}
void int1_int(void) interrupt 2{
	 								//中断2,显示9~0 (优先级1)
	 for(j= 10;j>0;j--){
	  	P1 = ~discode[j];
		delay();
	 }
}

中断函数的特殊性表现在哪里?
收到相关的输入,就可以打断当前正在执行的函数

(1)中断函数不能进行参数传递
(2)中断函数没有返回值
(3)在任何情况下都不能直接调用中断函数
(4)中断函数使用浮点运算要保存浮点寄存器的状态。
(5)如果在中断函数中调用了其它函数,则被调用函数所使用的寄存器必须与中断函数相同,被调函数最好设置为可重入的。
(6)C51编译器对中断函数编译时会自动在程序开始和结束处加上相应的内容,具体如下:在程序开始处对ACC、B、DPH、DPL和PSW入栈,结束时出栈。中断函数未加using n修饰符的,开始时还要将R0~R1入栈,结束时出栈。如中断函数加using n修饰符,则在开始将PSW入栈后还要修改PSW中的工作寄存器组选择位。
(7)C51编译器从绝对地址8m+3处产生一个中断向量,其中m为中断号,也即interrupt后面的数字。该向量包含一个到中断函数入口地址的绝对跳转。
(8)中断函数最好写在文件的尾部,并且禁止使用extern存储类型说明。防止其它程序调用。
(9)在设计中断时,要注意的是哪些功能应该放在中断程序中,哪些功能应该放在主程序中。一般来说中断服务程序应该做最少量的工作,这样做有很多好处。

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

51单片机控制数码管显示以及控制打断 的相关文章

随机推荐

  • 计蒜客T1236——分苹果

    今天分享一道特别简单的题 根据题意 不难看出 如果要求最少的苹果个数 则第一个小朋友需要给得最少 即1个 之后每个人多一个 既满足了不同于之前的所有人 还能满足最少的条件 所以 只需要将1 n依次累加 即可满足目标条件 include
  • 【问题记录】02 Linux服务器安装MySql数据库报错:Failing package is: mysql-community-server GPG Keys are configured as

    1 报错信息如下 warning var cache yum x86 64 7 mysql57 community packages mysql community server 5 7 37 1 el7 x86 64 rpm Header
  • Windows系统版本宏_WIN32_WINNT对应值

    win7 WIN32 WINNT gt 0x0601 vista WIN32 WINNT gt 0x0600 Windows XP WIN32 WINNT gt 0x0501 Windows 2000 WIN32 WINNT gt 0x05
  • 如何修改maven本地仓库地址

    1 如果从未配置过本地仓库 那么默认的仓库文件夹应该是在user gt admin 或者管理员名字命名的文件夹 gt m2 gt repository 仓库文件夹 将文件挪动到maven文件夹下 当然 这么做的是因为仓库中有之前保留的很多j
  • obsidian插件无法加载的解决办法

    1 问题 插件安装 但启动不了 2 解决方案 1 去obsidian插件官网搜索 2 下载以下3个文件 到 obsidian plugin目录下 路径 F 2023年 obsidian plugins cMenu 1 1 1 3 进入obs
  • docker 安装gitlab血泪史(解决方式telnet查看未开通端口号)

    1 docker pull gitlab gitlab ce 2 执行 docker run d p 443 443 p 80 80 p 222 22 name gitlab restart always v home gitlab con
  • 图像语义分割python_图像语义分割ICNET_飞桨-源于产业实践的开源深度学习平台...

    图像语义分割 ICNET 类别 智能视觉 PaddleCV 应用 自动驾驶 室内导航 医学图像诊断 穿戴设备 虚拟现实与增强现实 无人机 模型概述 ICNet 主要用于图像实时语义分割 能够兼顾速度和准确性 ICNet的主要思想是将输入图像
  • mysql hash分区要点

    mysql 有很多种表分区的方式 这里写一些笔者对于hash分区的感悟 如有错误 恳请读者斧正 mysql hash分区不用像其他的分区指定 当某一列值得情况为某某某的情况去到某一分区 比如list分区和range分区 hash直接只用指定
  • My eclipse 无法打开workspace解决方案

    今天用myeclipse的时候试图引用code comment style 在引用的过程中死掉了 就杀死进程 myeclipse提示crash 再打开次workspace 就一直处于 loading workbench 状态 打开其他wor
  • 进程和线程的区别

    进程 Process 和线程 Thread 是操作系统中的两个重要概念 它们是实现多任务并发执行的两种方式 它们有以下主要区别 1 定义和资源 进程 进程是正在运行的程序的实例 拥有独立的地址空间和资源 每个进程都有自己的代码 数据 堆栈
  • Windows11 拒绝访问压缩(zipped)文件夹

    最近windows10被自动升级到windows11 使用的一个工具zip压缩包突然就无法解压了 提示 拒绝访问压缩 zipped 文件夹 提取文件之前 必须更改这个压缩文件夹的权限 我的尝试 更改了这个压缩包文件的属性中的各个用户权限 增
  • 数字图像处理 基于python读取DICOM、NIfTI格式医学图像文件

    一 医学图像 医学图像标注最重要的进步之一是应用机器学习来评估图像 以实现更精确 更快 更准确的医学诊断 在应用机器学习 ML 人工智能 AI 或任何其他诊断算法之前 您需要知道注释软件可以处理两种最常见的医疗和保健图像文件格式 包括 DI
  • SpringBoot如何避免SQL注入漏洞呢?

    转自 SpringBoot如何避免SQL注入漏洞呢 下文笔者讲述SpringBoot避免SQL注入漏洞的方法分享 如下所示 SQL盲注 SQL注入简介 SQL注入的风险 数据库中的数据被任意查看 修改 删除 SQL注入的原因 未对用户输入进
  • mysql的驱动connect放在哪里_MySQL文档阅读笔记之JDBC驱动参数autoReconnect的副作用...

    MySQL的特性之一可高度定制化 相应的MySQL提供的JDBC驱动也提供了相当多的参数 老实说 第一次阅读文档时 真心晕 不过还是禁不住的赞叹 MySQL的JDBC驱动都有茫茫多的参数 果然有特点 这些参数中autoReconnect吸引
  • 无注册中心使用dubbo

    前言 熟悉dubbo的朋友都知道 dubbo可通过指定Url方式绕过注册中心直连指定的服务地址 所以想当然会想到那么可不可以不使用注册中心 本文就是SpringBoot整合Dubbo 无注册中心 的示例展示 提供者dubbo provide
  • Cobar使用文档(可用作MySQL大型集群解决方案)

    Cobar使用文档 可用作MySQL大型集群解决方案 2013 12 11 16 06 17236人阅读 评论 0 收藏 举报 分类 cobar 1 转 http blog csdn net shagoo article details 8
  • Python操作Excel插入删除行

    Python操作Excel插入删除行 1 前言 2 使用openpyxl 3 使用xlwings 3 1 删除行 range api EntireRow Delete 3 2 插入行 sheet api Rows row number In
  • 信息系统之网络安全方案 — “3保1评”

    信息系统之网络安全方案 3保1评 序 什么是 3评1保 一 网络安全等级保护 1 1 概念 1 2等保发展 1 3法律要求 1 4分级及工作流程 二 涉密信息系统分级保护 2 1概念 2 2法律要求 2 3分级及工作流程 三 关键信息基础设
  • unity3d-常用组件

    Component 学习阶段我会不断的更新新的内容 文章如有误请指正 如果觉得对你有用 请点赞收藏关注一波 谢谢支持 Rigidbody 变量 公共函数 消息 公共函数 2D 静态函数 2D 射线 RaycastHit 2D 1 变量 Ph
  • 51单片机控制数码管显示以及控制打断

    实践内容 1 利用单片机的P0口接数码管的字段脚 P1 0脚接共阴极 P3 2 P3 3引脚接独立按键产生外部中断信号 编写程序 当程序正常运行时数码管显示H字符 当外部中断0有中断请求信号时 数码管从0 9循环显示一次后回到正常状态 如果