51单片机实现的计时器程序
需积分: 13 146 浏览量
更新于2024-09-10
收藏 5KB TXT 举报
"计时器程序的C语言实现,基于51单片机,使用了数码管显示,具有计时、暂停、修改时间等功能,并通过外部中断处理按键操作。"
这个程序是为51系列单片机设计的一个计时器应用,主要功能包括计时、暂停、修改计时时间和显示时间。程序使用了P0、P1和P3口来控制数码管显示和接收按键输入,同时利用中断服务函数处理外部中断事件。
首先,程序中定义了一些常量和变量,如数码管显示字符数组`tab`和`tab_dp`,用于显示数字的各个位;`LED`和`WS`定义了数码管的段选和位选端口;`time_shift`、`time_set`等定义了按键功能;`sec`、`min`等变量存储了秒、分等计时器数值。`state`变量用于指示计时器的状态(暂停、计时或修改时间)。
`init()`函数对系统进行了初始化,设置TMOD寄存器以使定时器0和定时器1工作在模式1,然后设置了中断初始化,包括总中断开启,以及定时器0和1的中断使能。此外,还设置了外部中断0和1的边沿触发方式。
`display_run()`和`display_pause()`函数分别用于计时运行时和暂停时的数码管显示,通过改变`WS`和`LED`的值来驱动数码管显示当前的时间。
`INT_1()`和`INT_0()`是中断服务函数,分别对应外部中断1(计时开始/暂停)和外部中断0(修改计时时间)。在中断处理中,检查按键状态并进行相应操作,如改变计时状态或更新时间。
`time_modify()`函数处理计时时间的修改,当计时器1溢出时,闪烁数码管的相应位,以便用户通过按键修改时间。通过`flag`变量确定要修改的位(分钟个位、分钟十位、秒个位或秒十位),并处理按键输入以增加相应的数值。
`delay()`函数是一个简单的延时子函数,用于实现基本的延时效果。
在`main()`函数中,程序进入一个无限循环,根据`state`的状态切换计时器的工作模式,同时监听按键,根据按键事件更新计时器的状态或修改时间。
这个计时器程序通过硬件中断和软件配合,实现了基本的计时和控制功能,可以作为51单片机编程的参考示例。
2017-11-21 上传
2007-04-30 上传
2012-11-15 上传
2012-10-31 上传
2022-04-14 上传
sinat_15327431
- 粉丝: 0
- 资源: 1
最新资源
- Python中快速友好的MessagePack序列化库msgspec
- 大学生社团管理系统设计与实现
- 基于Netbeans和JavaFX的宿舍管理系统开发与实践
- NodeJS打造Discord机器人:kazzcord功能全解析
- 小学教学与管理一体化:校务管理系统v***
- AppDeploy neXtGen:无需代理的Windows AD集成软件自动分发
- 基于SSM和JSP技术的网上商城系统开发
- 探索ANOIRA16的GitHub托管测试网站之路
- 语音性别识别:机器学习模型的精确度提升策略
- 利用MATLAB代码让古董486电脑焕发新生
- Erlang VM上的分布式生命游戏实现与Elixir设计
- 一键下载管理 - Go to Downloads-crx插件
- Java SSM框架开发的客户关系管理系统
- 使用SQL数据库和Django开发应用程序指南
- Spring Security实战指南:详细示例与应用
- Quarkus项目测试展示柜:Cucumber与FitNesse实践