51单片机编写lcd1602显示程序,第一行显示自己的姓名,第二行显示学号
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的初始化函数,首先创建一个无限循环,然后添加两个字符串,这里以两行显示百度经验的网址为例,再进行延时以及使用清屏函数进行刷新。
2023-06-12 广告
#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单片机
推荐于2018-07-29 · 知道合伙人互联网行家
#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程序,显示拼音就行了,实物开发板
实物开发板,那要有原理图,否则,写出来的程序也不能用。已经有一个人给你程序了,就是因为她没有按实物开发板的原理图写的,所以,烧录后不显示。