51单片机编写lcd1602显示程序,第一行显示自己的姓名,第二行显示学号 c51单片机程序填空;在1602Lcd第一行"Hello,B...

作者&投稿:符清 (若有异议请与网页底部的电邮联系)

1、首先我们打开Keil μVision编译器,新建一个工程,然后保存在硬盘上的位置,然后选择Atmel-AT89C51单片机为模型,并启动器添加STARTUP.A51文件,然后在当前目录下新建一个C文件,并将其添加入工作路径。

2、导入51单片机的头文件以及LCD1602的头文件。

3、创建一个延时函数,可以传入想要具体延时的时长,其内部实现是由一个二重循环,两个循环的次数相乘积。

4、然后创建写命令的函数,指定RS和E同时为0时,才可以写入命令,设定完成后,将com写入输出端口,规定写命令时,E为正脉冲,然后空操作一个机器周期等待机器反应。

5、然后创建写数据的函数,规定写数据时,E为正脉冲,规定当RS=1和RW=0时才可以写入数据,然后将数据从输出端口输出,最后让E产生正跳变。

6、然后创建初始化LCD1602的函数,指定显示模式位两行显示,5*7,8位数据、整体显示,无光标,无闪烁、写入一个字符后地址指针加1,最后进行清屏操作。

7、最后在主函数中首先执行LCD1602的初始化函数,首先创建一个无限循环,然后添加两个字符串,这里以两行显示百度经验的网址为例,再进行延时以及使用清屏函数进行刷新。



#include <reg51.h>

#include <intrins.h>

#define uchar unsigned char

#define uint unsigned int

#define LcdBus P0

sbit LED1602_RS=P2^6; //LCD端口定义

sbit LED1602_RW=P2^5 ;

sbit LED1602_EN=P2^4 ;

void LcdIni(void);

void WrOp(uchar dat);

void WrDat(uchar dat);

void ChkBusy(void);

void print_LCD(uchar disp[],uchar num);

//延时n ms子程序

void delayms(unsigned int n)

{

unsigned int i,j;

for(i=0;i<n;i++)

for(j=0;j<120;j++);

}

main()

{

uchar disp1[16]={'S','u','n','J','i','e',' ','m','a','d','e',' ','a','t',' ',' '};

uchar disp2[16]={'2','0','0','8',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '};

while(1)

{

LcdIni();

WrOp(0x80); //数据指针地址第一行

print_LCD(disp1,16);

WrOp(0xc0); //第二行

print_LCD(disp2,4);

delayms(3000);

WrOp(0x01);

}

}

功能特性

1,可以仿真63K程序空间,接近64K 的16位地址空间;

2,可以仿真64Kxdata 空间,全部64K 的16位地址空间;

3,可以真实仿真全部32 条IO脚;

4,完全兼容keilC51 UV2 调试环境,可以通过UV2 环境进行单步,断点, 全速等操作;

5,可以使用C51语言或者ASM汇编语言进行调试 ;

6,可以非常方便地进行所有变量观察,包括鼠标取值观察,即鼠标放在某 变量上就会立即显示出它此的值;

以上内容参考:百度百科-51单片机



#include <reg51.h>
#include <intrins.h>

#define uchar unsigned char
#define uint unsigned int
#define LcdBus P0
sbit LED1602_RS=P2^6; //LCD端口定义
sbit LED1602_RW=P2^5 ;
sbit LED1602_EN=P2^4 ;

void LcdIni(void);
void WrOp(uchar dat);
void WrDat(uchar dat);
void ChkBusy(void);
void print_LCD(uchar disp[],uchar num);
//延时n ms子程序
void delayms(unsigned int n)
{
unsigned int i,j;
for(i=0;i<n;i++)
for(j=0;j<120;j++);
}

main()
{
uchar disp1[16]={'S','u','n','J','i','e',' ','m','a','d','e',' ','a','t',' ',' '};
uchar disp2[16]={'2','0','0','8',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '};
while(1)
{

LcdIni();
WrOp(0x80); //数据指针地址第一行
print_LCD(disp1,16);
WrOp(0xc0); //第二行
print_LCD(disp2,4);
delayms(3000);
WrOp(0x01);

}

}
/******************************************************************************************
名称:led1602显示 程序模块
功能:驱动1602 包括数据口 P1 三个控制口
编译:keil
作者:孙杰
时间:2008-8-9
*******************************************************************************************/
void print_LCD(uchar disp[],uchar num) //显示数组disp 显示长度为num
{
uchar i;
for(i=0;i<num;i++)
{
WrDat(disp[i]);
delayms(300);
}
}
void LcdIni()
{

WrOp(0x38);
WrOp(0x06); //光标加1
WrOp(0x0f); //开显示 光标闪烁
// WrOp(0x0c); //开显示 光标不闪烁
}

void WrOp(uchar dat)
{
//uchar i;
ChkBusy();
LED1602_RS=0; //RS=0
LED1602_RW=0; //RW=0
LED1602_EN=0; //EN=0
LcdBus=dat; //送数据
LED1602_EN=1; //EN=1
delayms(10); //延时
LED1602_EN=0; //EN=0
}

void WrDat(uchar dat)
{
//uchar i;
ChkBusy();
LED1602_RS=1; //rs=1
LED1602_RW=0; //rw=0
LED1602_EN=0; //en=0
LcdBus=dat; //送数据
LED1602_EN=1; //en=1
delayms(10);; //延时
LED1602_EN=0; //en=0
}

void ChkBusy()
{

LED1602_RS=0; //RS=0
LED1602_RW=1; //RW=1
LED1602_EN=1; //EN=1
while(LcdBus&0x80); //送数据
LED1602_EN=0; //en=0

}

是要仿真显示吗,还是实物开发板?显示姓名,只能是用拼音或英文姓名,不能显示汉字的,显示学号没有问题。是要画仿真图,写C程序吗?

51单片机试题,用开发版的LCD模块实现如下信息!“第一行显示姓名xxx,第二行显示学号xxxxx~

你的LCD是1602?还是12864的啊!前者是不能显示汉字的。

write_com(0x80);
table1[i];
write_com(0x80+0x44);
write_data(table2[i]);
lcdrs=0;
lcdrw=0;
lcden=1;
write_com(0x38)
write_com(0x0c)
write_com(0x06)

想做一个基于51单片机按键计数用LCD1602显示的编程0-99
答:加上这些东西,将显示语句换成1602_display(i)即可,当然你可以将其改为只显示2个数字 sbit rw=P1^4;sbit rs=P1^3;sbit lcden=P1^5;define db P2 void write_com(uchar com)//液晶屏写命令 { db=com;rs=0;rw = 0;lcden=0;Delay1ms(12);lcden=1;Delay1ms(12);lcden=0;} void ...

求基于单片机的LCD1602的定时程序
答:给你程序参考 / //基于单片机的LCD1602的定时程序// //作者:jammylee //日期:2008-2-25 //版本:V1.0 //晶振:12MHZ / include"reg52.h"include<stdio.h> include <intrins.h> typedef unsigned char uchar;typedef unsigned int uint;define LCD_Data P0 define Busy 0x80 //用于检测...

用LCD1602和DS18B20显示温度和时间C语言程序
答:您研究一下以下这个程序,然后就可以加上时间功能.多做一点就能多学一点.开机时对DS18B20进行检测,如果DS18B20检测不正常,LCD1602显示:DS18B20ERRORPLEASECHECK蜂鸣器报警。DS18B20检测正常,LCD1602显示:DS18B20OKTEMP:100.8℃如果温度值高位为0,将不显示出来。你可以通过拔插DS18B20查看DS18B20的检测功能。/*ME300B单片机开发系...

我是个单片机新手,我想问一下如何在lcd1602上显示中文,
答:【1】1602液晶是字符型液晶,总共有2行,每行16个字符。每个字符有效的可显示字体是5*8点阵字体。所以通常无法显示中文。中文的显示必须选择图形点阵型液晶。【2】特别地:你是指,显示“年月日”,之类的简单的汉字吧?最多支持8个CGRAM字符。你可以自己做。调用字模代码0-7。如:“年”的CGRAM单元...

单片机中怎么实现显示多个界面的LCD1602? 就是很多不同的内容怎么轮流显...
答://可能我和你的单片机型号不一样,拿去自己改改 include <reg52.h> include <intrins.h> define uint unsigned int define uchar unsigned char define delayNOP()sbit DQ = P3^3;sbit LCD_RS = P2^0;sbit LCD_RW = P2^1;sbit LCD_EN = P2^2;uchar code Temp_Disp_Title[]=;uchar ...

lcd1602程序流程应该怎么描述?
答:LCD1602是一种常见的字符型液晶显示屏,通常与单片机一起使用。下面是LCD1602程序流程的一般描述:初始化:设置数据总线和控制总线的方向及初始状态,将LCD1602的控制寄存器和数据寄存器初始化,设置显示模式、光标位置等。发送指令:将需要执行的指令通过数据总线发送到LCD1602的指令寄存器中。发送数据:将需要显示...

用51单片机控制1602液晶显示10进制数字~~
答:sbit RW=P2^1; //读写选择位,将RW位定义为P2.1引脚 sbit E=P2^2; //使能信号位,将E位定义为P2.2引脚 sbit BF=P0^7; //忙碌标志位,,将BF位定义为P0.7引脚 unsigned char code digit[ ]={"0123456789"}; //定义字符数组显示数字 unsigned char code string[ ]={"BeiJing Time"}; //定义字符...

lcd1602液晶显示的程序
答:for(i=0;i<8;i++) SMC1602_WriteByte(DataOperate,*write_buf++);//写入一个自定义字符8个字节数据 } void SMC1602_Init()//1602液晶屏初始化函数 { uint i;SMC1602_WriteByte(CommOperate,DisplayMode);//显示模式设置:16×2显示,5×7点阵,8位数据接口 SMC1602_WriteByte(CommOperate,...

LCD1602用C语言编程如何显示字符?
答:WriteCommandLCM(0x06,1); // 显示光标移动设置 WriteCommandLCM(0x0C,1); // 显示开及光标设置 } //写数据 void WriteDataLCM(unsigned char WDLCM){ ReadStatusLCM(); //检测忙 LCM_D4_RS = 1;LCM_D5_RW = 0;if(_LCD_BIT_IS == 8) //CPU与LCD1602间使用DB0-DB8这8根数...

利用51单片机1602做一个四位显示秒表
答:){ do { lcd1602_busy=1; lcd1602_rs=0; lcd1602_rw=1; lcd1602_e=0; lcd1602_e=1; }while(lcd1602_busy);}/*** * 函数名称: lcd1602_WriteCmd() * 函数功能:写命令 * 入口参数: