#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溢出标志 }
时间: 2024-05-04 10:17:36 浏览: 15
这段程序的作用是使用单片机测量外部信号的频率,并将频率值显示在LCD1602液晶屏上。程序中使用了计时器0来计数外部信号的频率,通过计算得到频率值,并将频率值转换成字符串形式,最后使用LCD1602显示出来。程序中需要连接计时器0的引脚和外部信号的引脚,具体接线方式可以参考单片机开发板的引脚图。同时,程序中使用了P0口来作为LCD1602的数据总线,P2口的0、1、2分别作为LCD1602的RS、RW、E控制引脚。
相关问题
lcd1602显示0-255
这里提供一个C语言程序,可以将0-255的数字显示在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;
void DelayUs2x(unsigned char t);
void DelayMs(unsigned char t);
void Lcd1602_WriteCommand(unsigned char command);
void Lcd1602_WriteData(unsigned char dat);
void Lcd1602_Init();
void main()
{
unsigned char i;
Lcd1602_Init();
while(1)
{
for(i=0;i<=255;i++)
{
Lcd1602_WriteCommand(0x80); //设置光标位置为第一行第一列
Lcd1602_WriteData(i/100+'0'); //显示百位
Lcd1602_WriteData(i%100/10+'0'); //显示十位
Lcd1602_WriteData(i%10+'0'); //显示个位
DelayMs(500); //延时500ms
}
}
}
void DelayUs2x(unsigned char t)
{
while(--t);
}
void DelayMs(unsigned char t)
{
while(t--)
{
DelayUs2x(245);
DelayUs2x(245);
}
}
void Lcd1602_WriteCommand(unsigned char command)
{
LCD1602_RS = 0; //选择指令寄存器
LCD1602_RW = 0; //选择写入模式
LCD1602_DB = command; //写入指令
LCD1602_E = 1; //使能信号置高
_nop_(); //空操作
_nop_();
LCD1602_E = 0; //使能信号置低
}
void Lcd1602_WriteData(unsigned char dat)
{
LCD1602_RS = 1; //选择数据寄存器
LCD1602_RW = 0; //选择写入模式
LCD1602_DB = dat; //写入数据
LCD1602_E = 1; //使能信号置高
_nop_();
_nop_();
LCD1602_E = 0; //使能信号置低
}
void Lcd1602_Init()
{
Lcd1602_WriteCommand(0x38); //8位数据总线,2行显示,5x7点阵字符
Lcd1602_WriteCommand(0x0c); //显示开,光标关,光标位置不显示
Lcd1602_WriteCommand(0x06); //光标右移,字符不移动
Lcd1602_WriteCommand(0x01); //清屏,光标回到原点
}
```
需要注意的是,这个程序中使用的是51单片机,如果使用其他单片机需要修改相应的引脚定义及延时函数。同时,LCD1602的接线也需要正确连接才能正常显示。
51单片机串口通信驱动LCD1602
以下是51单片机串口通信驱动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;
void LCD1602_DelayUs2x(unsigned char t)
{
while(--t);
}
void LCD1602_DelayMs(unsigned char t)
{
while(t--)
{
LCD1602_DelayUs2x(245);
LCD1602_DelayUs2x(245);
}
}
void LCD1602_WriteCommand(unsigned char Command)
{
LCD1602_RS = 0;
LCD1602_RW = 0;
_nop_();
LCD1602_E = 1;
LCD1602_DB = Command;
_nop_();
LCD1602_E = 0;
}
void LCD1602_WriteData(unsigned char Data)
{
LCD1602_RS = 1;
LCD1602_RW = 0;
_nop_();
LCD1602_E = 1;
LCD1602_DB = Data;
_nop_();
LCD1602_E = 0;
}
void LCD1602_Init(void)
{
LCD1602_WriteCommand(0x38);
LCD1602_WriteCommand(0x0c);
LCD1602_WriteCommand(0x06);
LCD1602_WriteCommand(0x01);
}
void main()
{
unsigned char data;
SCON = 0x50;
TMOD = 0x20;
TH1 = 0xfd;
TL1 = 0xfd;
TR1 = 1;
LCD1602_Init();
while(1)
{
if(RI)
{
data = SBUF;
RI = 0;
LCD1602_WriteData(data);
}
}
}
```
该代码使用了51单片机的串口通信功能,将接收到的数据在LCD1602上显示。其中,LCD1602的初始化操作和写入命令和数据的操作在函数中实现。串口通信的设置和数据接收操作在主函数中实现。该代码适用于波特率为9600的串口通信。