找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 429|回复: 0
打印 上一主题 下一主题
收起左侧

单片机数码管的中断控制工作原理与Proteus仿真图程序

[复制链接]
跳转到指定楼层
楼主
ID:1151709 发表于 2025-5-28 09:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一、实验相关知识点
1.掌握外部中断的工作原理;
2.学会中断程序设计。
二、实验内容及要求
【实验内容】
(1)创建一个包含80C51固件,采用Keil for 8051编译器的新项目;
(2)仿照图A.5和表A.4绘制电路原理图;
(3)编写C51源程序,要求采用中断方法实现如下功能:程序启动后,D1处于熄灯、LED1处于黑屏状态;单击K1,可使D1亮灯状态反转一次;单击K2,可使LED1显示值加1,并按十六进制数显示,达到F后重新从1开始。
(4)完成源程序编译和动态调试,实现实验4的控制功能要求;
(5)完成实验4文档的撰写。
【实验要求】
提交实验文档并包括如下内容:
(1)电路原理图
(2)C51源程序(含注释语句)
(3)软件调试分析
(4)仿真运行截图
(5)实验小结
三、实验方法
1.实验电路图中按键K1和K2分别接于P3.2和P3.3,发光二极管D1接于P0.4,共阴极数码管LED1接于P2口。
2.软件编程原理为:将数码管0~F的显示字模保存在数组中,K1和K2的按键动作分别作为的中断请求,在中断函数中进行LED灯控制和数码管显示刷新。初始化后,主函数处于无限循环状态,等待中断请求。
四、实验流程
1.电路原理图
2.     C51源程序(含注释语句)
  1. #include "reg51.h"// 引入8051单片机的头文件
  2. unsigned char led_mod[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x58,0x5e,0x79,0x71,};         
  3. // 定义一个无符号字符型数组 led_mod,用于存储数码管显示 0 - F 以及其他字符的段码
  4. // 这里共阴极数码管显示 0 - F 及部分字符对应的段码依次存储在数组中  
  5. unsigned char count = 0; // 定义一个无符号字符型变量 count,用于记录数码管显示的索引值,初始化为 0                                                                                                                                                                                                
  6. sbit P04 = P0^4;// 使用 sbit 关键字定义 P0 口的第 4 位为 P04,方便后续对该引脚进行操作


  7. // 外部中断 0 的中断服务函数,当外部中断 0 触发时执行此函数
  8. // 函数名为 int0_key,中断号为 0
  9. int0_key() interrupt 0{                 
  10.         P04 = !P04; // 对 P04 引脚的电平取反,实现连接在该引脚的 LED 灯亮灭状态的切换
  11. }


  12. // 外部中断 1 的中断服务函数,当外部中断 1 触发时执行此函数
  13. // 函数名为 int1_key,中断号为 2
  14. int1_key() interrupt 2{           
  15.         P2 = led_mod[count];        
  16.         if (++count>=0x10) count=0;
  17.         // 先将 count 的值加 1,然后判断是否大于等于 0x10
  18.        // 如果大于等于 0x10,则将 count 重新置为 0,实现循环显示  
  19. }

  20. // 主函数,程序的入口点
  21. void main(){
  22.         IT0=IT1=EX0=EX1=EA=1;   
  23.         // 设置外部中断 0 和外部中断 1 的触发方式为下降沿触发
  24.         // IT0 控制外部中断 0 的触发方式,IT1 控制外部中断 1 的触发方式
  25.         // EX0 使能外部中断 0,EX1 使能外部中断 1
  26.         // EA 是总中断允许位,置 1 表示允许所有中断                                         
  27.         P2 = 0;        // 将 P2 口初始化为低电平,即数码管初始不显示任何字符                                                                          
  28.         while(1);
  29.         // 主函数进入一个无限循环,程序会一直停留在这个循环中
  30.         // 等待外部中断的触发,当有中断触发时,会跳转到相应的中断服务函数执行
  31. }
复制代码
3.     程序分析
这段代码主要功能是利用外部中断来控制硬件设备。具体而言,通过外部中断 0 控制一个 LED 灯(连接在 P0.4 引脚)的亮灭状态切换,通过外部中断 1 控制共阴极数码管(连接在 P2 口)循环显示预设的字符段码。
(1)头文件包含
引入了reg51.h头文件,该头文件中定义了 8051 单片机的特殊功能寄存器和位定义,使得代码可以方便地访问和操作单片机的各个寄存器。
(2)数码管段码数组
定义了一个无符号字符型数组led_mod,用于存储共阴极数码管显示 0 - F 以及其他字符的段码。每个元素对应一个字符的显示编码,当需要显示某个字符时,只需将对应的段码输出到数码管的控制端口。
(3)计数器变量
定义了一个无符号字符型变量count,初始值为 0。该变量作为索引,用于从led_mod数组中选取要显示的段码,同时在外部中断 1 的处理中用于控制显示的循环。
(4)引脚定义
使用sbit关键字将 P0 口的第 4 位定义为P04,这样在代码中可以直接使用P04来操作该引脚,提高了代码的可读性和可维护性。
(5)外部中断 0 服务函数
函数名为int0_key。中断号为0,表示这是外部中断 0 的服务函数。当外部中断 0 触发时,将P04引脚的电平取反,从而实现连接在该引脚的 LED 灯亮灭状态的切换。
(6)外部中断 1 服务函数
函数名为int1_key,中断号为2,表示这是外部中断 1 的服务函数。功能是将led_mod数组中索引为count的段码赋值给 P2 口,驱动数码管显示对应的字符。并将count的值加 1,然后判断是否大于等于0x10。如果大于等于0x10,则将count重新置为 0,实现数码管显示的循环。
(7)主函数
中断和触发方式设置:IT0 = IT1 = 1,将外部中断 0 和外部中断 1 的触发方式设置为下降沿触发。EX0 = EX1 = 1,使能外部中断 0 和外部中断 1。EA = 1,使能总中断,允许所有中断源产生中断。
数码管初始化:P2 = 0,将 P2 口初始化为低电平,使数码管初始状态不显示任何字符。
无限循环:while(1);,主函数进入一个无限循环,程序会一直停留在这个循环中,等待外部中断的触发。当有中断触发时,程序会跳转到相应的中断服务函数执行。
4.     软件调试
5.     仿真运行截图


实验结论
本次实验基于 80C51 单片机,成功运用 Keil for 8051 编译器完成项目创建与代码编写,通过绘制电路原理图并搭建硬件连接,实现了外部中断控制功能。其中,K1 按键触发外部中断 0,能够准确实现 D1 亮灯状态的反转;K2 按键触发外部中断 1,可使 LED1 按十六进制数规律循环显示数值。经编译调试与仿真运行,程序稳定运行,功能完全符合预期,验证了外部中断工作原理在单片机控制系统中的有效性和实用性,达到了实验目标。


实验个人体会
通过本次实验,我对外部中断的工作机制有了更深刻的理解,从理论学习到实际编程调试,掌握了中断程序设计的基本方法和技巧。在调试过程中,遇到过按键抖动导致误触发、数码管显示异常等问题,通过查阅资料和逐步排查,最终得以解决,这极大地提升了我的问题分析和解决能力。同时,也意识到代码规范性、注释添加以及硬件连接准确性的重要性。未来,我将继续深入学习单片机知识,加强实践操作,提升综合应用能力,以便更好地应对复杂的嵌入式系统开发任务。

仿真文件和Word ppt下载: 实验5.7z (979.97 KB, 下载次数: 0)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表