51单片机实现的计时器程序

需积分: 13 1 下载量 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单片机编程的参考示例。