使用c51单片机和lcd1602显示器测量外部方波频率的keil程序代码
时间: 2023-11-20 07:04:43 浏览: 140
以下是使用C51单片机和LCD1602显示器测量外部方波频率的Keil程序代码:
```
#include<reg52.h>
#include<intrins.h>
#include<lcd1602.h> //LCD1602显示器头文件
#define uint unsigned int
#define uchar unsigned char
sbit Signal = P3^2; //外部方波信号输入口
uint T = 0; //计时器值
uint Freq = 0; //频率值
void Timer0Init() //定时器0初始化
{
TMOD &= 0xF0; //清零T0的控制位
TMOD |= 0x01; //T0为模式1(16位定时器)
TH0 = 0; //清零定时器高位
TL0 = 0; //清零定时器低位
ET0 = 1; //开定时器0中断
TR0 = 1; //启动定时器0
EA = 1; //开总中断
}
void main()
{
LcdInit(); //LCD1602初始化
Timer0Init(); //定时器0初始化
while(1)
{
Freq = 1000000 / T; //计算频率
LcdWriteCom(0x80); //设置LCD光标位置为第1行第1列
LcdWriteString("Freq: "); //输出字符串
LcdWriteData((Freq/10000)+'0'); //输出万位数字
LcdWriteData((Freq%10000/1000)+'0'); //输出千位数字
LcdWriteData((Freq%1000/100)+'0'); //输出百位数字
LcdWriteData('.'); //输出小数点
LcdWriteData((Freq%100/10)+'0'); //输出十位数字
LcdWriteData((Freq%10)+'0'); //输出个位数字
LcdWriteString(" Hz"); //输出字符串
}
}
void Timer0() interrupt 1 //定时器0中断服务程序
{
TH0 = 0; //重新赋值定时器高位
TL0 = 0; //重新赋值定时器低位
T++; //计时器值加1
}
```
这段代码通过定时器0中断来计算外部方波的频率,并将频率值显示在LCD1602显示器上。在主函数中,首先进行LCD1602和定时器0的初始化,然后进入一个死循环,在循环中不断计算频率并将结果显示在LCD1602上。在定时器0中断服务程序中,每当定时器计时结束时,计时器值加1,并重新赋值定时器高位和低位。通过计时器值和预设的时钟频率,可以计算出外部方波的频率。
阅读全文