本资源包含一个使用C51单片机和LCD1602显示屏进行外部频率测量的Keil工程项目源代码,适用于嵌入式系统开发学习与实践。
频率计-外部频率测试LCD1602显示实验例程C51单片机KEIL工程源码文件:
名称:频率计
内容:T0外部计数,T1定时1秒,计算1秒内外部脉冲个数,并在液晶上显示
```c
#include // 包含头文件,一般情况不需要改动。此文件包含特殊功能寄存器的定义。
#include stdio.h
#include 1602.h
#include delay.h
#define HIGH (65536-10000)/256
#define LOW (65536-10000)%256
sbit LED = P1^2; // 定义LED端口
bit OVERFLOWFLAG;
bit TIMERFLAG;
void Init_Timer0(void) {
TMOD |= 0x01 | 0x04; // 使用模式1,使用|符号可以在多个定时器共用时不受影响。
TH0 = 0x00;
TL0 = 0x00;
EA = 1; // 总中断打开
ET0 = 1; // 定时器中断打开
TR0 = 1; // 开启定时器
}
void Init_Timer1(void) {
TMOD |= 0x10; // 使用模式2,使用|符号可以在多个定时器共用时不受影响。
TH1 = HIGH;
TL1 = LOW;
EA = 1; // 总中断打开
ET1 = 1; // 定时器中断打开
TR1 = 1; // 开启定时器
}
void main(void) {
unsigned long int a;
char temp[16];
Init_Timer0();
Init_Timer1();
LCD_Init();
DelayMs(10);
LCD_Clear();
while (1) {
if(OVERFLOWFLAG)// 检测溢出标志,如果频率过高,则显示溢出信息
OVERFLOWFLAG = 0;
if(TIMERFLAG)
a = TL0 + TH0 * 256; // 计算计数值
a *= 10;
sprintf(temp, FREQ:%8.0f Hz, (float)a);
LCD_Write_String(0, 1, temp);
TR0 = 1;
TR1 = 1;
TH0 = 0;
}
}
```