找回密码
 立即注册

QQ登录

只需一步,快速开始

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

LCD1602模块化代码,超级方便,以后再不用打那么长的代码LCD1602.c和LCD1602.h

[复制链接]
跳转到指定楼层
楼主
ID:936280 发表于 2021-7-12 09:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
主要内容显示如下:
模块化LCD1602.c和LCD1602.h如下文件

#include <REGX52.H>

sbit LCD_RW=P2^5;  
sbit LCD_RS=P2^6;//1为数据,0为指令
sbit LCD_E=P2^7;

#define LCD_DataPort P0

void Delay(unsigned char xms)
{
        unsigned char i=2,j=199;
        while(xms--)
        {
                do
                {
                        while(--j);
                }while(--i);
        }
}

void LCD_WriteCommand(unsigned char Command)
{
        LCD_RS=0;
        LCD_RW=0;
        
        LCD_DataPort=Command;
        
        LCD_E=1;
        Delay(1);
        
        LCD_E=0;
        Delay(1);
}

void LCD_WriteData(unsigned char Data)
{
        
        LCD_RS=1;
        LCD_RW=0;
        
        LCD_DataPort=Data;
        
        LCD_E=1;
        Delay(1);
        
        LCD_E=0;
        Delay(1);
}

void LCD_Init(void)
{
        LCD_WriteCommand(0x38);
        LCD_WriteCommand(0x0C);
        LCD_WriteCommand(0x06);
        LCD_WriteCommand(0x01);
}

void LCD_SetAC(unsigned char Line,unsigned char Column)
{
        LCD_WriteCommand(0x80);
        if(Line==1)
        {
                LCD_WriteCommand(0x80|(Column-1));
        }
        else if(Line==2)
        {
                LCD_WriteCommand(0x80|(Column-1)+0x40);
        }
}

void LCD_ShowChar(unsigned char Line,unsigned char Column,unsigned char Char)
{
        LCD_SetAC(Line,Column);
        LCD_WriteData(Char);
}

void LCD_ShowString(unsigned char Line,unsigned char Column,unsigned char *String)
{
        LCD_SetAC(Line,Column);
        while(1)
        {
                if(*String!='\0'){LCD_WriteData(*String);}
                else{break;}
                String++;
        }
}
int Power(unsigned char X,unsigned char Y)
{
        unsigned char i;
        int result=1;
        for(i=0;i<Y;i++)
        {
                result*=X;
        }
        return result;
}        
        
void LCD_ShowNum(unsigned char Line,unsigned char Column,int Number,unsigned char Length)
{
        unsigned char i;
        LCD_SetAC(Line,Column);
        for(i=Length;i>0;i--)
        {
                LCD_WriteData('0'+Number/Power(10,i-1)%10);
        }
}
void LCD_ShowsignedNum(unsigned char Line,unsigned char Column,int Num1,unsigned char Length)
{
        int Number1;
        unsigned char i;
        LCD_SetAC(Line,Column);
        if(Num1>0)
        {
                LCD_WriteData('+');
                Number1=Num1;
        }
        else if(Num1<0)
        {
                LCD_WriteData('-');
                Number1=-Num1;
        }
        for(i=Length;i>0;i--)
        {
                LCD_WriteData('0'+Number1/Power(10,i-1)%10);
        }
}


void main()
{
                LCD_Init();
                LCD_ShowChar(1,1,'A');
                LCD_ShowString(1,3,"Hello");
                LCD_ShowNum(1,9,66,2);
                LCD_ShowsignedNum(1,12,-88,2);
                while(1)
                {
                        
                }
}

LCD.rar

25.4 KB, 下载次数: 65, 下载积分: 黑币 -5

LCD1602模块化

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

沙发
ID:1107186 发表于 2023-12-30 14:50 | 只看该作者
为什么没有检测BF是否处于忙标识呢
回复

使用道具 举报

板凳
ID:1113035 发表于 2024-3-14 23:28 来自手机 | 只看该作者
怪了,俺的lcd函数为什么不能用
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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