51单片机秒表设计(基于中断通过矩阵键盘实现时间设定、暂停、归零)

       该工程是基于最简单的中断模式完成的秒表设计,主要是分享一下关于定时器设计的个人想法,对中断理解较浅,不足之处欢迎指正。

一、功能实现

注:该程序只实现了三位数秒的计时,想要改进为包含小时、分钟、秒的计时,只需要在主函数模块优化即可。

1、矩阵键盘的功能作用(4×4的矩阵键盘依从s1~s16):

键位视图:

键位

s1

s2

s3

s4 s5 s6

s7

s8 s9 s10 s11 s12
功能 数字1

数字

2

数字

3

数字

4

数字

5

数字

6

数字

7

  • 8
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
要在51单片机的时分秒秒表实现中断暂停启动和复位功能,可以在主函数中通过按键输入来实现。具体的代码示例如下: ```c // 定义时分秒变量 unsigned int hour = 0; unsigned int minute = 0; unsigned int second = 0; // 定义计数器变量 unsigned int counter = 0; // 定义计时器状态变量,0表示计时暂停,1表示计时运行 unsigned int timer_state = 1; // 定义中断服务函数 void timer0_isr() interrupt 1 { if(timer_state) { // 将计数器的值加1 counter++; // 判断秒数是否达到60秒 if(counter >= 60) { counter = 0; second++; // 判断分钟是否达到60分钟 if(second >= 60) { second = 0; minute++; // 判断小时是否达到24小时 if(minute >= 60) { minute = 0; hour++; } } } } } // 主函数中初始化定时器和中断,以及按键输入 void main() { // 初始化定时器0为16位定时器,工作模式1,计数器初值为0xFFFF-5000 TMOD = 0x01; TH0 = 0x50; TL0 = 0x00; // 使能定时器0中断 ET0 = 1; // 开始定时器0计数 TR0 = 1; // 初始化按键输入口 P3 = 0xFF; // 主循环中处理按键输入 while(1) { // 判断是否按下暂停/启动键 if(P3_0 == 0) { // 等待按键弹起 while(P3_0 == 0); // 切换计时器状态 timer_state = !timer_state; } // 判断是否按下复位键 if(P3_1 == 0) { // 等待按键弹起 while(P3_1 == 0); // 将时分秒和计数器清零 hour = 0; minute = 0; second = 0; counter = 0; } // 读取时分秒的值 unsigned int h = hour; unsigned int m = minute; unsigned int s = second; // 进行其他操作 // ... } } ``` 在上述代码中,通过按键输入来实现计时器的暂停/启动和复位功能。按下暂停/启动键可以切换计时器状态,按下复位键可以将时分秒和计数器清零。在中断服务函数 `timer0_isr()` 中,只有当计时器处于运行状态时才会更新时分秒变量。这样就可以实现中断暂停启动和复位功能的时分秒秒表了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

念白(小王)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值