小白跟做江科大51单片机之LCD1602滚动显示效果

1.查看原理图

图1 LCD1602接口

图2 LCD1602与STC的接口

2.编写代码

图3 时序结构

根据时序结构编写命令和写入数据代码

#include <REGX52.H>

#include "Delay.h"

sbit LCD1602_EN=P2^7;

sbit LCD1602_RS=P2^6;

sbit LCD1602_WR=P2^5;

#define LCD1602_lCD0 P0 //因为是并口通信,一个就行

void LCD1602_WriteCommand(unsigned char command)

{

LCD1602_RS=0; //RS为低电平时表示发送指令

LCD1602_WR=0; //表示开始写,写命令和写数据都是WR=0

LCD1602_lCD0=command;

LCD1602_EN=1;

Delay();

LCD1602_EN=0;

Delay();

}

void LCD1602_WriteData(unsigned char Data)

{

LCD1602_RS=1; //RS为高电平时表示发送的是数据

LCD1602_WR=0; //表示开始写

LCD1602_lCD0=Data;

LCD1602_EN=1;

Delay();

LCD1602_EN=0;

Delay();

}

根据操作流程进行初始化和显示数据代码函数的编写

void LCD1602_Init()

{

LCD1602_WriteCommand(0x38);

LCD1602_WriteCommand(0x0C);

LCD1602_WriteCommand(0x06);

LCD1602_WriteCommand(0x01);

}

void LCD1602_showChar(unsigned char line,unsigned char column,unsigned char C)

{

if(line==1)

{

LCD1602_WriteCommand(0x80|column-1);

}

else

{

LCD1602_WriteCommand(0x80|(column-1)+0x40);

}

LCD1602_WriteData(C);

}

LCD1602.C代码汇总

#include <REGX52.H>

#include "Delay.h"

sbit LCD1602_EN=P2^7;

sbit LCD1602_RS=P2^6;

sbit LCD1602_WR=P2^5;

#define LCD1602_lCD0 P0 //因为是并口通信,一个就行

void LCD1602_WriteCommand(unsigned char command)

{

LCD1602_RS=0; //RS为低电平时表示发送指令

LCD1602_WR=0; //表示开始写,写命令和写数据都是WR=0

LCD1602_lCD0=command;

LCD1602_EN=1;

Delay();

LCD1602_EN=0;

Delay();

}

void LCD1602_WriteData(unsigned char Data)

{

LCD1602_RS=1; //RS为高电平时表示发送的是数据

LCD1602_WR=0; //表示开始写

LCD1602_lCD0=Data;

LCD1602_EN=1;

Delay();

LCD1602_EN=0;

Delay();

}

void LCD1602_Init()

{

LCD1602_WriteCommand(0x38);

LCD1602_WriteCommand(0x0C);

LCD1602_WriteCommand(0x06);

LCD1602_WriteCommand(0x01);

}

第1行和第二行要注意按图修改

void LCD1602_showChar(unsigned char line,unsigned char column,unsigned char C)

{

if(line==1)

{

LCD1602_WriteCommand(0x80|column-1);

}

else

{

LCD1602_WriteCommand(0x80|(column-1)+0x40);

}

LCD1602_WriteData(C);

}

void LCD_ShowString(unsigned char line,unsigned char Column,char *String)

{

unsigned char i;

if(line==1)

{

LCD1602_WriteCommand(0x80|Column-1);

}

else

{

LCD1602_WriteCommand(0x80|(Column-1)+0x40);

}

for(i=0;Stringi;i++)

LCD1602_WriteData(Stringi);

}

void LCD_ShowNum(unsigned char line,unsigned char Column,unsigned int Number,unsigned char Length)

{

unsigned char i=0;

if(line==1)

{

LCD1602_WriteCommand(0x80|Column-1);

}

else

{

LCD1602_WriteCommand(0x80|(Column-1)+0x40);

}

while(i<Length)

{

if(Number>10000)

{

LCD1602_WriteData('0'+(unsigned char)(Number/10000));

Number=Number%10000;

}

else if(Number>1000)

{

LCD1602_WriteData('0'+(unsigned char)(Number/1000));

Number=Number%1000;

}

else if(Number>100)

{

LCD1602_WriteData('0'+(unsigned char)(Number/100));

Number=Number%100;

}

else if(Number>10)

{

LCD1602_WriteData('0'+(unsigned char)(Number/10));

Number=Number%10;

}

else

{

LCD1602_WriteData('0'+(unsigned char)(Number%10));

break;

}

i++;

}

}

void LCD_ShowSignedNum(unsigned char line,unsigned char Column,int Number,unsigned char Length)

{

unsigned char i=0;

if(line==1)

{

LCD1602_WriteCommand(0x80|Column-1);

}

else

{

LCD1602_WriteCommand(0x80|(Column-1)+0x40);

}

if(Number<0)

{

LCD1602_showChar(line,Column,'-');

Number=-Number;

}

else

{

LCD1602_showChar(line,Column,'+');

}

while(i<Length)

{

if(Number>10000)

{

LCD1602_WriteData('0'+(unsigned char)(Number/10000));

Number=Number%10000;

}

else if(Number>1000)

{

LCD1602_WriteData('0'+(unsigned char)(Number/1000));

Number=Number%1000;

}

else if(Number>100)

{

LCD1602_WriteData('0'+(unsigned char)(Number/100));

Number=Number%100;

}

else if(Number>10)

{

LCD1602_WriteData('0'+(unsigned char)(Number/10));

Number=Number%10;

}

else

{

LCD1602_WriteData('0'+(unsigned char)(Number%10));

break;

}

i++;

}

}

void LCD_ShowBinNum(unsigned char line,unsigned char Column,unsigned int Number,unsigned char Length)

{

unsigned char Binarr16={'0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0'};

unsigned char i=0;

if(line==1)

{

LCD1602_WriteCommand(0x80|Column-1);

}

else

{

LCD1602_WriteCommand(0x80|(Column-1)+0x40);

}

while(Number)

{

Binarri='0'+(unsigned char)Number%2;

Number=Number/2;

i++;

}

for(i=Length;i>0;i--)

{

LCD1602_WriteData(Binarri-1);

}

}

void LCD_ShowHexNum(unsigned char line,unsigned char Column,unsigned int Number,unsigned char Length)

{

unsigned char Hexnum4={'0','0','0','0'};

unsigned char temp,i;

if(line==1)

{

LCD1602_WriteCommand(0x80|Column-1);

}

else

{

LCD1602_WriteCommand(0x80|(Column-1)+0x40);

}

while(Number)

{

temp=Number%16;

if(temp<10)

{

Hexnumi='0'+temp;

}

else

{

Hexnumi='A'+(temp-10);

}

Number=Number/16;

i++;

}

for(i=Length;i>0;i--)

{

LCD1602_WriteData(Hexnumi-1);

}

}

LCD1602.h代码展示

#ifndef LCD1602_H

#define LCD1602_H

void LCD1602_WriteCommand(unsigned char command);

void LCD1602_Init();

void LCD1602_showChar(unsigned char line,unsigned char column,unsigned char C);

void LCD_ShowString(unsigned char Line,unsigned char Column,char *String);

void LCD_ShowNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length);

void LCD_ShowSignedNum(unsigned char Line,unsigned char Column,int Number,unsigned char Length);

void LCD_ShowHexNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length);

void LCD_ShowBinNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length);

#endif

3.编写main.c代码

#include <REGX52.H>

#include "LCD1602.h"

#include "Delay.h"

void main()

{

LCD1602_Init();

LCD1602_showChar(1,1,'+');

LCD_ShowString(1,3,"Hello");

LCD_ShowNum(1,9,212,4);

LCD_ShowSignedNum(2,1,-212,4);

LCD_ShowBinNum(1,13,32,16);

LCD_ShowHexNum(2,5,15,2);

while(1)

{

unsigned char i,j,k;

LCD1602_WriteCommand(0x18); //移动屏幕命令0x18

i = 10 ;

j = 11;

k = 45;

do

{

do

{

while (--k);

} while (--j);

} while (--i);

}

}

4.结果展示

LCD1602滚动显示

相关推荐
恒锐丰科技林技术员8 小时前
EG27324 双通道驱动芯片:小封装下的高性能功率驱动方案
经验分享·嵌入式硬件·硬件工程
Brilliantwxx8 小时前
【STM32】 独立看门狗 IWDG 深度详解:从硬件结构到工程实战
数据库·stm32·单片机·嵌入式硬件·mongodb
AMASENSYS艾马斯9 小时前
变频器过载能力参数解读与工程应用
驱动开发·嵌入式硬件·其他·硬件工程·精益工程
cu1439 小时前
细谈IT6563的具体功能与其应用
c语言·c++·单片机·嵌入式硬件
坐看风云变幻11 小时前
《嵌入式工程师的软硬件修仙之路》第 5 期|STM32/GPIO 寄存器操作:从地址映射到点亮一盏灯的全过程
stm32·单片机·嵌入式硬件
POMAGTOR11 小时前
【硬件笔记|磁吸连接器安装规范、失效分析与选型验证方案】
网络·嵌入式硬件
路上有只喵11 小时前
认识元器件 ·贴片电阻· 规格书解读
嵌入式硬件·硬件架构
dqsh0611 小时前
STM32开发用调试器ST-Link V2.1的制作 保姆级教程
stm32·单片机·嵌入式硬件·调试工具·st-link
2601_9583529012 小时前
一款模块通吃15类语音产品?AN-93如何实现录音笔、门禁、IPC的快速适配
前端·人工智能·嵌入式硬件·回声消除·降噪处理
果壳science12 小时前
张祥前最新研究成果登上SCI期刊!
笔记·嵌入式硬件·算法·硬件工程·几何学