8051单片机利用LCD1602 显示外部方波信号的频率。方波信号水自信号发生器。频率的测量范围1000HZ~2000Hz。频率精确到个位即可。显示的样式为“####Hz”,要求在外部方波频率改变的时候,实验显示的频率值也要跟随改变。所用的动态数码管连续相邻即可,没有用到的数码管不得有任何的显示。程序代码
时间: 2024-03-01 17:56:31 浏览: 142
下面是8051单片机利用LCD1602显示外部方波信号频率的程序代码。请注意,由于没有提供具体硬件电路设计,本代码可能需要根据实际硬件情况进行适当更改。
```c
#include <reg51.h>
#include <stdio.h>
#define LCD_DB P0
sbit RS = P2^6;
sbit RW = P2^5;
sbit EN = P2^7;
unsigned int count = 0;
unsigned int freq = 0;
char buffer[6];
void delay(unsigned int t) {
unsigned int i, j;
for(i = 0; i < t; i++) {
for(j = 0; j < 123; j++);
}
}
void LCD_init() {
delay(15);
LCD_DB = 0x30;
EN = 1;
EN = 0;
delay(5);
LCD_DB = 0x30;
EN = 1;
EN = 0;
delay(1);
LCD_DB = 0x30;
EN = 1;
EN = 0;
delay(1);
LCD_DB = 0x38;
EN = 1;
EN = 0;
delay(1);
LCD_DB = 0x08;
EN = 1;
EN = 0;
delay(1);
LCD_DB = 0x01;
EN = 1;
EN = 0;
delay(5);
LCD_DB = 0x06;
EN = 1;
EN = 0;
delay(1);
LCD_DB = 0x0C;
EN = 1;
EN = 0;
delay(1);
}
void LCD_write_cmd(unsigned char cmd) {
RS = 0;
RW = 0;
LCD_DB = cmd;
EN = 1;
EN = 0;
delay(1);
}
void LCD_write_data(unsigned char dat) {
RS = 1;
RW = 0;
LCD_DB = dat;
EN = 1;
EN = 0;
delay(1);
}
void display_freq() {
sprintf(buffer, "%4dHz", freq);
LCD_write_cmd(0x80);
for(int i = 0; i < 7; i++) {
if(buffer[i] == '\0') break;
LCD_write_data(buffer[i]);
}
}
void timer0_isr() interrupt 1 {
count++;
if(count >= 1000) {
count = 0;
freq = TH0 * 256 + TL0;
freq = 11059200 / 12 / freq;
display_freq();
}
}
void main() {
TMOD = 0x01;
TH0 = 0;
TL0 = 0;
ET0 = 1;
EA = 1;
TR0 = 1;
LCD_init();
while(1);
}
```
本程序使用定时器0来测量外部方波信号的频率,同时通过LCD1602显示频率的值。程序中的`count`变量用于计数,每计数到1000就进行一次频率测量和显示。由于本程序没有使用中断方式获取外部方波信号,因此需要根据具体硬件情况选择适当的方式进行信号输入和处理。同时,本代码中使用的动态数码管显示部分可以根据实际需要进行修改,以满足具体显示要求。
阅读全文