51单片机lcd1602显示数字
时间: 2023-08-30 18:10:53 浏览: 345
下面是一个简单的例子,可以在51单片机上使用LCD1602显示数字:
```c
#include <reg51.h>
#include <intrins.h>
#define LCD1602_DB P0 //LCD1602数据线接在P0口上
sbit LCD1602_RS = P2^0; //LCD1602的RS引脚接在P2.0口上
sbit LCD1602_RW = P2^1; //LCD1602的RW引脚接在P2.1口上
sbit LCD1602_E = P2^2; //LCD1602的E引脚接在P2.2口上
void delay(unsigned int t) //延时函数,t为延时时间,单位为毫秒
{
unsigned int i, j;
for(i = 0; i < t; i++)
for(j = 0; j < 125; j++);
}
void LCD1602_WriteCmd(unsigned char cmd) //写入命令函数
{
LCD1602_RS = 0; //RS置低,表示写入命令
LCD1602_RW = 0; //RW置低,表示写入操作
LCD1602_E = 1; //E置高,表示写入开始
LCD1602_DB = cmd; //将命令写入数据线
_nop_(); //空操作,等待一段时间
_nop_();
LCD1602_E = 0; //E置低,表示写入结束
delay(1); //延时1ms
}
void LCD1602_WriteData(unsigned char dat) //写入数据函数
{
LCD1602_RS = 1; //RS置高,表示写入数据
LCD1602_RW = 0; //RW置低,表示写入操作
LCD1602_E = 1; //E置高,表示写入开始
LCD1602_DB = dat; //将数据写入数据线
_nop_(); //空操作,等待一段时间
_nop_();
LCD1602_E = 0; //E置低,表示写入结束
delay(1); //延时1ms
}
void LCD1602_Init() //初始化函数
{
LCD1602_WriteCmd(0x38); //设置显示模式,显示2行,5x7点阵
LCD1602_WriteCmd(0x0c); //设置显示控制,显示开,光标关,光标不闪烁
LCD1602_WriteCmd(0x06); //设置输入方式,字符输入后光标右移,整屏不移动
LCD1602_WriteCmd(0x01); //清屏
}
void LCD1602_ShowNum(unsigned char x, unsigned char y, unsigned char num) //显示数字函数
{
unsigned char dat;
if(x < 16 && y < 2) //判断x和y是否超出范围
{
if(y == 0) //第一行
LCD1602_WriteCmd(0x80 + x); //设置光标位置
else //第二行
LCD1602_WriteCmd(0xc0 + x); //设置光标位置
dat = num / 100; //百位数字
LCD1602_WriteData(dat + '0'); //写入数据
dat = (num / 10) % 10; //十位数字
LCD1602_WriteData(dat + '0'); //写入数据
dat = num % 10; //个位数字
LCD1602_WriteData(dat + '0'); //写入数据
}
}
void main()
{
LCD1602_Init(); //初始化LCD1602
LCD1602_ShowNum(0, 0, 123); //显示数字123
while(1);
}
```
在上述代码中,我们首先定义了LCD1602的引脚和数据线接口,然后编写了延时函数、写入命令函数、写入数据函数、初始化函数和显示数字函数。
在 `main` 函数中,我们先调用 `LCD1602_Init` 函数进行初始化,然后调用 `LCD1602_ShowNum` 函数显示数字。在该函数中,我们先判断输入的参数是否超出范围,然后将数字拆成百位、十位和个位,依次写入LCD1602。在写入数据时,需要先将RS置高,表示写入数据,然后再将数据写入数据线。最后,我们使用一个死循环使程序不会结束。
以上代码仅供参考,具体实现方式可能因硬件配置和编译器等因素而略有不同。
阅读全文