51单片机编写lcd1602显示程序,第一行显示自己的姓名,第二行显示学号
你的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)
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程序吗?
单片机开发LCD问题
用lcd来做什么的?你是的是电脑显卡那些显存?不用的.以为是电脑么..但是数据缓冲就需要了..
单片机接一个LCD数码管
1、确定波特率 并定义相关串口寄存器 2、通过串口中断或查询方式等待PC数据传送 3、接收并处理数据。建议pc机与单片机同时用中断方式。注意数据帧间隔。
LCD与单片机的连接
例如管理员可对各个组件进行查询,以管理系统的配置或掌握组件的功能状态,如电源和系统风扇。可随时监控内存、硬盘、网络、系统温度等多个参数,增加了系统的安全性,方便了管理。单片机与LCD连接很简单,根本不需要I2C总线,我曾做过LCD,我给你一个连接图(那个开关你不用理会)需要程序可以联系我 ...
单片机LCD1602显示程序(汇编),小弟有很多地方不懂,希望高人能加上注释...
; LCD Display Driver Demo.; Timing code assumes 1.2MHz Clock ;LCD Registers addresses LCD_CMD_WRequ 0 ;宏定义 LCD_DATA_WRequ1 LCD_BUSY_RDequ2 LCD_DATA_RDequ3 ;LCD Commands LCD_CLSequ1 LCD_HOMEequ2 LCD_SETMODEequ4 LCD_SETVISIBLEequ8 LCD_SHIFTequ16 LCD_SETFUNCTIONequ...
刚学1602液晶,C51单片机写程序时,写入LCD命令,请问帮忙解释下下面程序...
因为数据输入需EN引脚的一个高脉冲,其实就是EN 引脚 的一个上升沿 EN=0; \/\/先;拉低 P0=cmd; \/\/准备写入的数据 EN=1;\/\/拉高,产生一个上升沿,写数据到1602
单片机 怎么控制点阵屏和LCD屏?
而LED屏需要加驱动电路的,而且显示时也要采用动态扫描的方式的。LCD屏显示汉字时,有的屏是自带字库的,不带字库的屏,就要用汉字取模软件取出显示的数据,即取出汉字的字模。LED屏显示汉字,就必须用取模软件来取模了,不是自己像画画那样,那可画不起。取模软件在网上可以下载的。最后一个问题:...
利用51单片机、LCD显示器设计一个单片机显示系统,要求在液晶上显示...
void lcd_wcom(uchar com) \/\/1602写命令函数 (单片机给1602写命令){ \/\/1602接收到命令后,不用存储,直接由HD44780执行并产生相应动作 rs=0; \/\/选择指令寄存器 rw=0; \/\/选择写 P0=com; \/\/把命令字送入P2 delay(5); \/\/延时一小会儿,让1602准备接收数据 en=1; \/\/...
单片机编程问题,怎么使单片机外部中断一次,lcd上显示的数字加1
include<reg51.h> define uchar unsigned char uchar extnum;void ext0() interrupt 0 { extnum++;} void display(uchar dat){ \/\/显示部分程序...} main(){ extnum=0;while(1){ display(extnum);} }
单片机C语言中的LCD-Initial是什么意思(我是初学者,看到资料不懂问下...
就是初始化的意思。设定LCD的启动开关等等。包含一系列驱动函数语句
单片机中怎么实现显示多个界面的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 ...
穰狠胰酶: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 ...
武陵源区13043674044: 求助51单片机 显示器1602的输出代码 - ?
穰狠胰酶: #include sbit RS=P1^0; sbit RW=P1^1; sbit EN=P1^2; sbit DATA=P2; //定义LCD1602管脚 void lcd1602_display_str(unsigned char x,bit y,unsigned char dat[]); //x:列 0-15 y:行 0-1 dat写入的东西 void lcd1602_display_byte(unsigned char x,bit y,...
武陵源区13043674044: 如何用51单片机控制LCD1602 - ?
穰狠胰酶: 硬件上和单片机连接的有一个8位数据口,一个数据/命令选择端 一个使能端 一个读写控制端共11根线 读写程序网上一搜一大把
武陵源区13043674044: 51单片机里用c语言通过控制什么来控制1602液晶显示的开关??? - ?
穰狠胰酶: 整体显示关:写命令0x08;整体显示开:写命令0x0C;这个只能控制1602液晶的显示,不能控制背光的关闭与开启.要关闭或开启背光,请直接控制背光源.引脚A(有时标成BLA)是背光源正极;引脚K(有时标成BLK)是背光源负极;这两个引脚任意一个接一支三极管就能控制背光的开关了.背光关闭后液晶上还是能看到字,要熄屏不仅要关闭背光,还要关闭液晶的显示.当然你也可以把1602的电源接三极管直接关了,但是这样的话下次打开就要重新初始化1602
武陵源区13043674044: 51单片机编程LCD1602显示问题 - ?
穰狠胰酶: 除了主程序的后缀名为.C外,其它两个都改为.H,并添加入主程序中,用#include“”添加
武陵源区13043674044: 51单片机液晶1602的C程序谁有,给个简单的显示一个字符A的 - ?
穰狠胰酶: #include "reg52.h" sbit LED=P1^0;//LED锁存器 sbit SEG=P1^1;//数码管段选锁存器 sbit DIG=P1^2;//数码管位选锁存器 unsigned char t; sbit LCDRS=P2^7;//数据指令控制 sbit LCDRW=P2^6;//读写控制 sbit LCDEN=P2^5;//液晶屏使能...
武陵源区13043674044: (求汇编orC程序)将51单片机TO计数器的值传输到1602LCD显示,程序怎么编写啊? - ?
穰狠胰酶: 先等待脉冲引脚到来while(PXX)然后打开定时器,打开外部中断,用外部中断下降沿触发,触发到了关闭外部中断关闭定时器读取TH1.TL1数据就哦了
武陵源区13043674044: 51单片机:上位机输入任意长度字符,LCD1602上进行显示.代码如何编写,求大神. - ?
穰狠胰酶: 一行,只能显示16 个字符把?程序中的 20,是什么意思?另外,显示部分有:while(*buff!='\n'),那么,在接收时,你写这个 '\n' 了吗?
武陵源区13043674044: 用51单片机让1602液晶连续的显示矩阵键盘按键值,连续按下的数都回被显示出来. - ?
穰狠胰酶: 先根据你要显示数字的个数定义一个unsigned char型的字符数组,调用扫描键盘函数,扫描到哪个键被按下的同时将键值存进对应的数组元素中,再调用液晶显示程序显示,液晶显示程序中显示的位数可变,可以定义一个变量来记录已按下的位数,显示的程序中实参为已按下按键的个数,这样就能实时显示数字了.
武陵源区13043674044: 51单片机C语言1602液晶显示程序解析 - ?
穰狠胰酶: 这个是1602内部结构决定的,你只需要在初始化的时候先设置三次显示,然后再设置你的其他要求. 芯片厂家推荐的用法: INT: MOV A,#30H MOV DATR,#CW_ADD MOV R2,#03H INT1: MOVX @DPTR,A CALL DELAY DJNZ R2,INT1 这上面就是1602对于51单片机推荐的初始化之前加的三次模式设置