单片机lcd1602频率显示实验,芯片用at89c51,频率在100hz~2000hz,显示样式为####hz,求该实验完整代码
时间: 2024-02-23 11:02:45 浏览: 52
好的,以下是AT89C51单片机LCD1602频率显示完整代码:
```
#include<reg52.h>
#include<intrins.h>
#define LCD1602_DB P0
sbit LCD1602_RS=P2^0;
sbit LCD1602_RW=P2^1;
sbit LCD1602_E=P2^2;
unsigned int frq;//定义频率变量
unsigned char frq_display[5];//定义频率显示数组
void delay(unsigned int x);//延时函数
void write_com(unsigned char com);//写入指令函数
void write_data(unsigned char date);//写入数据函数
void init_lcd1602();//初始化LCD函数
void display(unsigned char *p);//显示函数
void measure();//测量频率函数
void main()
{
init_lcd1602();//初始化LCD1602
while(1)
{
measure();//测量频率
display(frq_display);//显示频率
}
}
void delay(unsigned int x)//延时函数
{
unsigned int i,j;
for(i=x;i>0;i--)
{
for(j=110;j>0;j--);
}
}
void write_com(unsigned char com)//写入指令函数
{
LCD1602_RS=0;
LCD1602_RW=0;
LCD1602_DB=com;
LCD1602_E=1;
_nop_();
_nop_();
LCD1602_E=0;
}
void write_data(unsigned char date)//写入数据函数
{
LCD1602_RS=1;
LCD1602_RW=0;
LCD1602_DB=date;
LCD1602_E=1;
_nop_();
_nop_();
LCD1602_E=0;
}
void init_lcd1602()//初始化LCD函数
{
write_com(0x38);//设置16*2显示,5*7点阵,8位数据接口
write_com(0x0c);//开显示,关光标,不闪烁
write_com(0x06);//读写指针自动加1,不移动屏幕
write_com(0x01);//清屏
write_com(0x80);//设置显示起始地址
}
void display(unsigned char *p)//显示函数
{
write_com(0x80);//设置显示起始地址
while(*p!='\0')
{
write_data(*p++);
}
}
void measure()//测量频率函数
{
unsigned long cnt=0;
TMOD=0x01;//设置计时器0为16位计数模式
TH0=0;
TL0=0;
TR0=1;//计时器0开始计数
while(TF0==0);//等待计时器0溢出
TR0=0;//计时器0停止计数
cnt=TH0*256+TL0;//获取计时器0的计数值
frq=11059200/cnt;//计算频率值
sprintf(frq_display,"%4uhz",frq);//将频率值转换成字符串
TF0=0;//清除计时器0溢出标志
}
```
希望能对你有所帮助!
阅读全文