写一个单片机c51的lcd1602频率显示的keil程序,频率在100hz~2000hz,
时间: 2024-03-01 12:55:43 浏览: 177
频率计-外部频率测试LCD1602显示实验例程C51单片机KEIL工程源码文件.zip
5星 · 资源好评率100%
以下是一个简单的单片机C51的LCD1602频率显示的Keil程序,该程序可以显示100Hz到2000Hz之间的频率。程序使用了定时器0来计算频率,使用定时器1来控制LCD1602的显示。
```
#include <reg52.h>
#include <lcd.h>
#define FREQ_INPUT P3_2 // 频率输入口
#define TIMER0_RELOAD_VALUE 65536 - FOSC / 12 / 100 // 定时器0重载值,用于计算100Hz到2000Hz之间的频率
#define FOSC 11059200UL // 晶振频率
unsigned int freq = 0; // 频率值
void main()
{
TMOD = 0x11; // 定时器0和定时器1均为16位定时器
TH0 = TL0 = TIMER0_RELOAD_VALUE; // 初始化定时器0
TH1 = TL1 = 0; // 初始化定时器1
TR0 = TR1 = 1; // 启动定时器0和定时器1
ET0 = 1; // 开启定时器0中断
EA = 1; // 开启总中断
lcd_init(); // 初始化LCD1602
while (1) {
lcd_gotoxy(0, 0);
lcd_puts("Freq: Hz");
lcd_gotoxy(6, 0);
lcd_putint(freq);
delay_ms(500); // 500ms刷新一次屏幕
}
}
void timer0_isr() interrupt 1
{
static unsigned long count = 0;
static bit last_state = 0;
bit state = FREQ_INPUT;
if (state != last_state) {
count++;
last_state = state;
}
if (TF0) { // 定时器0溢出
TF0 = 0;
TH0 = TL0 = TIMER0_RELOAD_VALUE; // 重新装载定时器0
freq = count * 100; // 计算频率值
count = 0;
}
}
```
注:上述代码中使用了一个lcd.h头文件,该头文件包含了一些LCD1602的常用函数。如果您没有这个头文件的话,需要自己实现这些函数。
阅读全文