用KeiluVision5软件,针对STC15F2K60S 2单片机编辑数码管测量NE555输出信号频率,数码管8位显示格式为“PL1000”频率范围为0到1000,低于0显示0,高于1000显示1000具体代码
时间: 2024-12-16 17:22:25 浏览: 0
在Keil uVision 5软件中,针对STC15F2K60S2单片机编写数码管测量NE555定时器输出信号频率的程序,首先需要包含必要的库头文件并初始化数码管、定时器和中断系统。以下是简化的示例代码:
```c
#include <reg52.h>
#include "hd44780.c" // 引入数码管驱动库
// 定义NE555相关的定时器设定
sbit NE555 Pin = P2_0; // 输出脉冲的GPIO口
unsigned long int count = 0;
unsigned long int last_count = 0;
void timer_init(void) {
TMOD &= ~_TMO1; // 清除TMOD寄存器T1模式标志
TH1 = 0xFF; // 设置高八位计数初值
TL1 = 0x7F; // 设置低八位计数初值
EA = 1; // 开启总中断
ET1 = 1; // 启动外部中断
}
void interrupt void Timer1中断服务程序() {
count++;
if (count - last_count > 1000) { // 检查频率周期
last_count = count;
// 更新频率并显示
unsigned long int freq = count / 1000; // 精确到千分之一
display_digit(freq); // 显示频率
if (freq >= 1000)
display_char('1');
else
display_num(freq);
}
}
void display_digit(unsigned long int digit) {
HD44780_Init(); // 初始化数码管
for (int i = 7; i >= 0; i--) {
switch (digit % 10) {
case 0:
LCD_Cmd(_LCD_ENTRY_MODE_SET | _LCD_ENTRY_DIR_RIGHT);
LCD_Char(i, '0');
break;
default:
LCD_Cmd(_LCD_ENTRY_MODE_SET | _LCD_ENTRY_DIR_LEFT);
LCD_Char(i, digit % 10 + '0');
break;
}
digit /= 10;
}
}
void main(void) {
timer_init();
while(1) {
// 等待NE555输出脉冲
while (!NE555);
}
}
```
阅读全文