80C51单片机C语言子程序:延时、数码管与中断

需积分: 50 4 下载量 179 浏览量 更新于2024-07-21 1 收藏 49KB DOC 举报
"这篇文档介绍了51单片机中使用C语言编写的几个关键子程序,包括延时子程序、数码管扫描子程序、74LS164脉冲输出及数码管计数子程序、数码管显示子程序以及中断子程序。这些子程序在单片机控制和显示应用中非常常见,对于理解和开发基于80C51单片机的系统具有重要价值。" 1. **延时子程序**: 延时子程序用于在单片机程序中实现时间间隔,通常通过循环结构来消耗一定的时间。例如,给出的`void delay(uint t)`函数使用了两层嵌套循环,通过计数器`i`和`j`来实现不同时间长度的延时。这种延时方法适用于简单应用,但对于精确延时可能不够准确,因为它依赖于单片机的时钟速度。 2. **数码管扫描子程序**: 数码管扫描子程序`uchar keyscan()`用于检测按键并更新数码管显示。它通过扫描8个独立的输入端口(这里假设是`key`)来查找按键状态,并利用74LS164芯片进行数码管的扫描显示。`clear164()`函数用于清除164芯片的输出,确保在新的扫描周期开始时数码管处于非显示状态。 3. **74LS164脉冲输出与数码管计数**: 74LS164是一种串行输入、并行输出的移位寄存器,常用于驱动数码管的段选。`clear164()`函数用于清零输出,而数码管显示子程序则结合74LS164输出脉冲来控制数码管的显示内容。 4. **数码管显示子程序**: 子程序`void display(char wei, char shu)`用于显示特定数值。它接受两个参数,`wei`表示要显示的位数,`shu`是实际的数值。子程序首先清除无效位,然后按照数码管的显示规则设置段选,最后通过74LS164输出来驱动数码管。 5. **中断子程序**: 中断子程序是单片机系统中的关键部分,用于处理外部或内部发生的事件。`void init()`函数初始化定时器0,设置其工作在方式1,计算并设置初值以实现定时功能。同时开启总中断和定时器0中断,使能中断功能。这通常用于实现周期性的任务,如数码管的刷新或者按键的扫描。 以上子程序都是构建基于51单片机系统的基础组件,它们可以组合起来实现更复杂的控制和显示功能。在实际项目中,开发者可以根据需求调整和优化这些子程序,以适应不同的硬件环境和应用需求。