51单片机液晶数码显示代码,要求显示数字520

结合注释进行理解,应该算是写的比较详细了 

#include <reg52.h>    // 引入STC89C52的寄存器定义
#include <intrins.h>  // 使用_nop_()函数

#define LCD_DataPort P0  // 连接液晶数据总线的P0口
sbit RS = P2^0;          // 液晶RS引脚连接到P2.0口
sbit RW = P2^1;          // 液晶RW引脚连接到P2.1口
sbit EN = P2^2;          // 液晶EN引脚连接到P2.2口

// 函数:微秒级延时
void DelayUs2x(unsigned char t)
{
    while (--t);
}

// 函数:毫秒级延时
void DelayMs(unsigned char t)
{
    while (t--)
    {
        DelayUs2x(245);
        DelayUs2x(245);
    }
}

// 函数:向液晶写入命令
void LcdWriteCmd(unsigned char cmd)
{
    RS = 0;             // 选择命令模式
    RW = 0;             // 选择写入模式
    LCD_DataPort = cmd; // 将传入的指令写入数据总线
    EN = 1;             // 使能液晶
    _nop_();
    _nop_();
    EN = 0;             // 禁止液晶
    DelayUs2x(10);
}

// 函数:向液晶写入数据
void LcdWriteDat(unsigned char dat)
{
    RS = 1;             // 选择数据模式
    RW = 0;             // 选择写入模式
    LCD_DataPort = dat; // 将数据写入数据总线
    EN = 1;             // 使能液晶
    _nop_();
    _nop_();
    EN = 0;             // 禁止液晶
    DelayUs2x(10);
}

// 函数:液晶初始化
void LcdInit()
{
    LcdWriteCmd(0x38);    // 16x2显示,5x7点阵,8位数据接口
    LcdWriteCmd(0x0C);    // 开显示,光标不闪烁
    LcdWriteCmd(0x06);    // 光标自动右移,不移动屏幕
    LcdWriteCmd(0x01);    // 清屏
    DelayMs(10);
}

// 函数:设置液晶光标位置
void LcdSetCursor(unsigned char x, unsigned char y)
{
    unsigned char addr;
    if (y == 0)
        addr = 0x80 + x;    // 第一行
    else
        addr = 0xC0 + x;    // 第二行
    LcdWriteCmd(addr);
}

// 函数:在液晶上显示字符串
void LcdDisplayStr(unsigned char x, unsigned char y, unsigned char *str)
{
    LcdSetCursor(x, y);
    while (*str)
    {
        LcdWriteDat(*str);
        str++;
    }
}

void main()
{
    LcdInit();                // 初始化液晶显示器

    LcdDisplayStr(0, 0, "Number: 520");  // 在液晶上显示字符串

    while (1)
    {
        // 主循环
    }
}
 

猜你喜欢

转载自blog.csdn.net/qq_50942093/article/details/134452492
今日推荐