找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2402|回复: 1
打印 上一主题 下一主题
收起左侧

51单片机LCD1602显示程序

[复制链接]
跳转到指定楼层
楼主
ID:114509 发表于 2021-12-29 17:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
// 头文件
#include <reg51.h>   //包含单片机寄存器的头文件
//#include<intrins.h>  //包含_nop_()函数定义的头文件
#include <stdio.h>   //标准输入输出函数库

//宏定义
typedef unsigned int  uint;
typedef unsigned char uchar;

//全局变量
unsigned char temp1=123;

// 位定义  
sbit RS = P2^0;    //0=输入指令;1=输出数据
sbit RW = P2^1;    //0=向LCD写入指令或数据; 1=从LCD读取信息
sbit EN = P2^2;    //使能信号,1时读取信息,1->0(下降沿)执行指令

// 延时函数
void delay_1ms(uint n)
{
        uint a,b;
        for(a=n;a>0;a--)
        for(b=110;b>0;b--);
}
void delay_10us(uchar n)
{
        while(n--);
}

//写入命令
void LCD_Com (uchar Com)
{
        RS=0;        //选择指令寄存器
        P0=Com;        //把命令字送入P0
        RW=0;        //选择写指令

        EN=1;
        delay_1ms(5);
        EN=0;                //使能线电平变化,命令送入1602的8位数据口
}

//写数据
void LCD_Data (uchar Data)
{        
        RS=1;//选择数据寄存器
        P0=Data;//把要显示的数据送入P0
        RW=0;//选择写数据
        
        EN=1;
        delay_1ms(5);
        EN=0;//使能线电平变化,数据送入1602的8位数据口
}

//初始化
void LCD_Init ()
{        
        LCD_Com (0x38);
        delay_1ms(5);
        LCD_Com (0x38);//显示模式设置(8位数据,双列,5*7字形)
        LCD_Com (0x0C);//开显示,不显示光标
        LCD_Com (0x06);//指针自动加一
        LCD_Com (0x01);//清屏
        LCD_Com (0x80);//设置数据指针起点
}

//设置初始地址
void LCD_XY (uchar Row,uchar Location)
{
        uchar Result;
        
        if(Row==0)//A=0 显示第一行,A=1 显示第二行
        {
                Result=0x80+Location;
        }
        else
        {
                Result=0x80+0x40+Location;
        }
        LCD_Com (Result);
}

//在第X行Y列开始显示,指针*S所指向字符串
void LCD_XY_Pointing_String(uchar Row,uchar Location,uchar *S)
{
  LCD_XY(Row,Location);//设置初始字符显示地址
  while(*S)//逐次写入显示字符,直到最后一个字符"0"
  {
    LCD_Data(*S);//写入当前字符并显示
        S++;//地址指针加1,指向下一个待写字符
  }
}

//在第X行Y列开始显示Wdata所对应的单个字符
void LCD_Single_Character(uchar Row,uchar Location,uchar Wdata)
{
  LCD_XY(Row,Location);//写地址
  LCD_Data(Wdata);//写入当前字符并显示
}

//LCD显示
void LCD_display(void)
{
        //uchar tempL=123;
        LCD_XY_Pointing_String(0,0," temp(L)Setting ");
        LCD_Single_Character(1,5,0x30+temp1%1000/100);
        LCD_Single_Character(1,6,0x30+temp1%100/10);
        LCD_Single_Character(1,7,0x30+temp1%10);
}

//主函数
void main(void)
{
        LCD_Init();//LCD初始化
        LCD_display();//LCD显示
        while(1);
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏6 分享淘帖 顶2 踩
回复

使用道具 举报

沙发
ID:1039671 发表于 2022-8-9 16:07 | 只看该作者
今天刚好看到,研究了差不多两个小时,然后可以用来动态显示想要的数据了,非常感谢!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表