
单片机中断系统编程,3
发布日期:2021-05-07 10:13:03
浏览次数:27
分类:精选文章
本文共 2513 字,大约阅读时间需要 8 分钟。
定时器流水灯与中断控制应用开发
定时器流水灯实现
在本次项目中,我们使用Keil编写了一个定时器流水灯控制程序。流水灯是一种常见的LED显示设备,其光纤通过滴答声传递时间信息。在本案例中,我们通过定时器模块实现了流水灯的滴动效果。
代码解析
#pragma opt:1#include#include typedef unsigned char u8;typedef unsigned int u16;#define led P2void delay(u16 i) { while (i--) { u16 j = 120; while (j--) ; }}void yvchuli() { TMOD = 0x01; // 选择定时器 TH0 = 0xFC; // 赋给高8位初值 TL0 = 0x18; // 赋给低8位初值 ET0 = 1; // 中断源允许 TR0 = 1; // 定时器启动 EA = 1; // cpu允许}void main() { yvchuli(); led = 0xFE; // 1111 1110 while (1) { // 循环不断执行 }}void time0() interrupt 1 { static u16 i, m; TH0 = 0xFC; TL0 = 0x18; i++; if (i == 1000) { for (m = 0; m < 8; m++) { led = _crol(led, 1); delay(100); i = 0; } }}
工作原理
流水灯的工作原理基于定时器滴答的时间间隔。在代码中,我们初始化定时器模块,设置初值并启动定时器。定时器中断触发时,会执行滴动一次的逻辑,逐步改变LED的状态。通过不断循环滴动,流水灯的效果就得以实现。
外部中断控制
在本案例中,我们还实现了外部中断控制功能。外部中断用于检测按钮或其他输入信号的变化,能够有效地实现程序的控制流。
代码解析
#pragma opt:1#include#include typedef unsigned char u8;typedef unsigned int u16;sbit key = P3^2;void delay(u8 i) { while (i--) ;}void yvchuli() { IT0 = 1; EX0 = 1; EA = 1; key = 1;}void main() { yvchuli(); P2 = 0x00; while (1) { // 循环不断执行 }}void waiduan1() interrupt 0 { if (key == 0) { delay(50); if (key == 0) { P2 = ~P2; } }}
功能说明
通过外部中断,我们能够实时监测输入信号的变化。在本案例中,当检测到输入信号处于低电平状态时,会启动延迟函数并切换对应的控制器状态。这种设计能够有效地响应外部事件,实现程序的灵活控制。
中断控制应用
在本项目中,我们还实现了多个中断控制函数,能够满足不同的控制需求。通过中断控制,我们能够在程序运行过程中有效地管理资源和执行流程。
代码解析
#pragma opt:1#includetypedef unsigned char u8;typedef unsigned int u16;sbit led = P2^6;sbit led2 = P2^7;sbit key3 = P3^2;sbit key4 = P3^3;void delay(u16 i) { while (i--) { u16 j = 120; while (j--) ; }}void zhongduan0() { IT0 = 1; EX0 = 1; IT1 = 1; EX1 = 1; EA = 1;}void main() { zhongduan0(); while (1) { // 循环不断执行 }}void waiduan1() interrupt 0 { delay(10); if (key3 == 0) { led = ~led; while (key3 == 0) ; }}void waiduan2() interrupt 2 { delay(10); if (key4 == 0) { led2 = ~led2; while (key4 == 0) ; }}
功能说明
在本案例中,我们实现了两个中断控制函数,分别用于检测不同的输入信号并执行相应的控制操作。通过中断控制,我们能够在程序运行过程中实时响应输入信号的变化,实现对LED状态的精确控制。
总结
通过本次项目,我们成功实现了定时器流水灯与外部中断控制的功能。流水灯的滴动效果由定时器模块驱动,而外部中断则用于响应输入信号变化。在实际开发中,我们可以根据具体需求,调整定时器周期和中断处理逻辑,以实现更复杂的控制功能。
发表评论
最新留言
能坚持,总会有不一样的收获!
[***.219.124.196]2025年03月20日 18时33分43秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Web前端安全策略之CSRF的攻击与防御
2019-03-05
纯客户端页面关键字搜索高亮jQuery插件
2019-03-05
linux运维中常用的命令
2019-03-05
M1芯片的macbook安装王者荣耀,原神,崩坏方法
2019-03-05
Java温故而知新-反射机制
2019-03-05
eclipse引用sun.misc开头的类
2019-03-05
firefox中angular2嵌套发送请求问题
2019-03-05
【mybatis3】调试/断点打印日志
2019-03-05
C++
2019-03-05
[CTFSHOW]PHP特性
2019-03-05
navigator对象
2019-03-05
关于EFI系统分区(ESP)你应该知道的3件事
2019-03-05
5.Mybatis复杂映射开发
2019-03-05
Servlet2.5的增删改查功能分析与实现------删除功能(四)
2019-03-05
环境配置 jdk_mysql_myeclipse8.6
2019-03-05
Session验证码的实现(2018-7-3)
2019-03-05
spring启动错误:Could not resolve placeholder
2019-03-05
日志写入xml上传ftp遇到的问题
2019-03-05
下载任意版本vmware对应的vmware tools
2019-03-05
将 github 中他人的 仓库 导入 码云中,从而 加快下载速度的 方式
2019-03-05