51单片机实现利用定时/计数器T0对外部脉冲(用按键进行模拟)进行计数,并将计数值以二进制形式在8个LED上显示出来.
每次闪烁进一位
连线如下:
代码如下:
#include <reg51.h>
#define LED_PORT P2
// 初始化函数
void init() {
// 设置T0工作在模式1,并设置为外部时钟源
TMOD = 0x01; // 设置 T0 为模式1
TH0 = 0; // 初始计数值高位
TL0 = 0; // 初始计数值低位
TR0 = 1; // 启动 T0 定时器
// 配置外部中断0(用于T0溢出中断)
ET0 = 1; // 允许T0中断
EA = 1; // 允许总中断
// 初始化LED端口
LED_PORT = 1; // 全部LED关闭
}
// 定时器0中断服务程序
void timer0_ISR() interrupt 1 {
static unsigned int count = 0; // 计数值
// 更新计数值
count++;
// 输出二进制形式到LED端口
LED_PORT = ~count; // 取反以便LED亮起,因为LED共阴
}
// 主函数
void main() {
init(); // 初始化
while(1) {
// 主循环中不需要做任何事情,因为计数和显示工作在中断中完成
}
}
代码截图如下: