|
本帖最后由 hellozwt 于 2024-1-2 17:04 编辑
先从最简单的开始,今天的任务是LCD1602显示字符,
先看资料,再看网上的例程,按自己的理解写最简单的程序,
以下为效果
以下为代码
//LCD1062显示字符,d0-d7接P2口
#include<reg52.h> //头文件
typedef unsigned char u8; //类型定义,无符号字符0-255
typedef unsigned int u16; //类型定义,无符号整形0-65535
sbit LCD_RS = P0^4; //位定义,数字或命令选择,
sbit LCD_RW = P0^3; //位定义,读写选择
sbit LCD_EN = P0^2; //位定义使能
u8 code table[ ] = {"ABCDEFGHIJKLMNOPQRSTUVWXYZ123456"}; //要显示的字符
void delayms(u16 xms); //声明子函数延时
void lcd1602_write_cmd(u8 cmd); //声明子函数写命令
void lcd1602_write_dat(u8 dat); //声明子函数写数据
void lcd1602_init(); //声明子函数初始化
void main()
{
u16 i,j; //声明2个变量,用于显示2行字符,
lcd1602_init(); //调用初始化子函数
lcd1602_write_cmd(0x80); //调用写命令子函数,从第一行第1位开始显示
for(i=0;i<16;i++) // 调用前16个字符
{
lcd1602_write_dat(table); //调用写数据,
delayms(5);
}
lcd1602_write_cmd(0xc0); //第二行第1位开始显示
for(j=16;j<32;j++)
{
lcd1602_write_dat(table[j]); //调用写数据,
delayms(5);
}
while(1);
}
void delayms(u16 xms)
{
u8 i; //定义一个变量
while(xms--) //设定值自减
{
for(i=0;i<113;i++);
}
}
void lcd1602_write_cmd(u8 cmd) //写命令
{
LCD_RW=0; //0写1读
LCD_RS=0; //0写命令1写数据
P2=cmd; // 把命令送到P2口
delayms(5); //
LCD_EN=1; // 使能
delayms(5); //
LCD_EN=0; // 关使能
}
void lcd1602_write_dat(u8 dat) //写数据
{
LCD_RW=0; //0写1读
LCD_RS=1; //1写数据0写命令
P2=dat; // 把数据送到P2口
delayms(5); //
LCD_EN=1; // 使能
delayms(5); //
LCD_EN=0; // 关使能
}
void lcd1602_init() //初始化
{
lcd1602_write_cmd(0x38); //00111000显示2行5*7点阵8位数据
lcd1602_write_cmd(0x0c); //00001100开显示,光标关,无闪烁
lcd1602_write_cmd(0x06); //00000110写入一个字符后,光标右移,整屏不移
lcd1602_write_cmd(0x01); //00000001清屏
// lcd1602_write_cmd(0x0f); //00001111开显示,光标开,闪烁
// lcd1602_write_cmd(0x80); //第一行第1位开始显示
// lcd1602_write_cmd(0xc0); //第二行第1位开始显示
}
刚开始的时候我把所有字符输出,结果只显示第一行,后来才改成把字符分2行显示,
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|