51单片机如何在1602液晶屏上显示一个字母? 怎么实现在51单片机上按下一个按键,1602液晶屏上显示出相...

作者&投稿:闻苗 (若有异议请与网页底部的电邮联系)
/*-----------------------------------------------
名称:LCD1602
内容:通过标准程序静态显示字符
引脚定义如下:1-VSS 2-VDD 3-V0 4-RS 5-R/W 6-E 7-14 DB0-DB7 15-BLA 16-BLK
------------------------------------------------*/
#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#include<intrins.h>

sbit RS = P2^4; //定义端口
sbit RW = P2^5;
sbit EN = P2^6;

#define RS_CLR RS=0
#define RS_SET RS=1

#define RW_CLR RW=0
#define RW_SET RW=1

#define EN_CLR EN=0
#define EN_SET EN=1

#define DataPort P0
/*------------------------------------------------
uS延时函数,含有输入参数 unsigned char t,无返回值
unsigned char 是定义无符号字符变量,其值的范围是
0~255 这里使用晶振12M,精确延时请使用汇编,大致延时
长度如下 T=tx2+5 uS
------------------------------------------------*/
void DelayUs2x(unsigned char t)
{
while(--t);
}
/*------------------------------------------------
mS延时函数,含有输入参数 unsigned char t,无返回值
unsigned char 是定义无符号字符变量,其值的范围是
0~255 这里使用晶振12M,精确延时请使用汇编
------------------------------------------------*/
void DelayMs(unsigned char t)
{

while(t--)
{
//大致延时1mS
DelayUs2x(245);
DelayUs2x(245);
}
}
/*------------------------------------------------
判忙函数
------------------------------------------------*/
bit LCD_Check_Busy(void)
{
DataPort= 0xFF;
RS_CLR;
RW_SET;
EN_CLR;
_nop_();
EN_SET;
return (bit)(DataPort & 0x80);
}
/*------------------------------------------------
写入命令函数
------------------------------------------------*/
void LCD_Write_Com(unsigned char com)
{
while(LCD_Check_Busy()); //忙则等待
RS_CLR;
RW_CLR;
EN_SET;
DataPort= com;
_nop_();
EN_CLR;
}
/*------------------------------------------------
写入数据函数
------------------------------------------------*/
void LCD_Write_Data(unsigned char Data)
{
while(LCD_Check_Busy()); //忙则等待
RS_SET;
RW_CLR;
EN_SET;
DataPort= Data;
_nop_();
EN_CLR;
}

/*------------------------------------------------
清屏函数
------------------------------------------------*/
void LCD_Clear(void)
{
LCD_Write_Com(0x01);
DelayMs(5);
}

/*------------------------------------------------
写入字符函数
------------------------------------------------*/
void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data)
{
if (y == 0)
{
LCD_Write_Com(0x80 + x);
}
else
{
LCD_Write_Com(0xC0 + x);
}
LCD_Write_Data( Data);
}
/*------------------------------------------------
初始化函数
------------------------------------------------*/
void LCD_Init(void)
{
LCD_Write_Com(0x38); /*显示模式设置*/
DelayMs(5);
LCD_Write_Com(0x38);
DelayMs(5);
LCD_Write_Com(0x38);
DelayMs(5);
LCD_Write_Com(0x38);
LCD_Write_Com(0x08); /*显示关闭*/
LCD_Write_Com(0x01); /*显示清屏*/
LCD_Write_Com(0x06); /*显示光标移动设置*/
DelayMs(5);
LCD_Write_Com(0x0C); /*显示开及光标设置*/
}

/*------------------------------------------------
主函数
------------------------------------------------*/
void main(void)
{
LCD_Init();
LCD_Clear();//清屏
while (1)
{
LCD_Write_Char(7,0,'o');
LCD_Write_Char(8,0,'k');
while(1);
}
}

#include<reg52.h>

sbit lcden=P1^0;

sbit lcdrs=P1^1;

sbit lcdrw=P1^2;

void delay(unsigned int z)

{

 unsigned int x,y;

 for(x=z;x>0;x--)

  for(y=110;y>0;y--);

}

void write_com(unsigned char com)

{

 lcdrs=0;

 P0=com;

 delay(5);

 lcden=1;

 delay(5);

 lcden=0;

}

void write_data(unsigned char date)

{

 lcdrs=1;

 P0=date;

 delay(5);

 lcden=1;

 delay(5);

 lcden=0;

}

void init()

{

 lcdrw=0;

 lcden=0;

 write_com(0x38);

 write_com(0x0e);

 write_com(0x06);

 write_com(0x01);

 write_com(0x80+0x10);

}

void main()

{

 init();

 write_data('a');

 while(1);

}

最简单的了



刚好学到1602,这里有 http://tieba.baidu.com/p/2900183688?share=9105

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;//液晶屏使能控制

//**********延时函数,延时n*1ms*********
void delay(unsigned char n)
{
int i,j;
for (i=0; i<n; i++)
for (j=0; j<100; j++)
;
}

//*************写命令***************
void Write_Cmd(unsigned char C)
{
LCDEN=1;//使能端,由高电平跳变成低电平时,液晶屏模块执行命令
LCDRS=0;//指令寄存器选择
P0=C;
delay(5);
LCDEN=0;
}

//**************写数据**************
void Write_Data(unsigned char D)
{
LCDEN=1;//使能端,由高电平跳变成低电平时,液晶屏模块执行命令
LCDRS=1;//选择数据寄存器
P0=D;
delay(5);
LCDEN=0;
}

//**********LCD初始化*****************
void LCD_Init()
{
LCDRS=0;//指令寄存器选择
Write_Cmd(0x01);//清屏
Write_Cmd(0x38);//功能设置8位双行显示5*7点阵
Write_Cmd(0x0F);//开关显示设置
Write_Cmd(0x06);//输入方式设置,光标从左向右移动,内容不移动
}

void main()
{
unsigned char Code1[]="I LOVE MCU!";
unsigned char m;

//LED,数码管锁存器片选设置
LED=0;
DUAN=0;
WEI=0;

LCDRW=0;//写选择

LCD_Init();

Write_Cmd(0x80+0x01);//写入显示缓冲区起始地址为1行2列

for(m=0;m<11;m++)
{
Write_Data(Code1[m]);
delay(3);
}

while (1)
;
}//end of main

你的程序没问题啊,不知道你是什么意思。

液晶1602的数据端只能接51单片机p0口吗?接其他口时,不用改参数吗?_百...
答:以上其实就是单片机访问外围电路的基本时序流程,把握了这个原理,完全可以根据时序通过端口控制地址线、数据线及控制线状态,完成读写操作,无非就是代码多一些、访问效率慢一点而已。不过这样软件编制上还是很麻烦的,远不如采用访问外部RAM的模式来的简练,因为1602液晶的接口与MCS51在时序上是兼容的,可以...

单片机与DS18B20并用LCD1602显示 c程序
答:单片机与DS18B20并用LCD1602显示 c程序 这是电路的连接sbitDQ=P1^4;//ds18b20与单片机连接口sbitRS=P1^3;sbitRW=P1^2;sbitEN=P1^1;还有我的LCD的16引脚接到了单片机上的P1.0上,就是要用软件使LCD亮,硬件已经做出来了,所以... 这是电路的连接sbit DQ=P1^4;//ds18b20与单片机连接口sbit RS=P1^3;sbit...

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

用51单片机做实验,将数组在1602显示屏上显示.
答:Str1是字符型数组,在内存中以ASCII码存储,而 str1[3]=JS/10000,表示JS对10000取整,JS是U8类型,最大255,无论如何 JS/10000 结果都为0,但0不是字符数据,需要加上0X30转换ASCII后,即可。 str1[3]=JS/10000+0x30;

1602液晶显示屏与51单片机连接电路图
答:以前做过的作品,保证好用! 上拉电阻用4.7K的,液晶的3脚用一个10K可调电阻接地,调节液晶亮度。

我用51单片机来调试一个液晶显示的程序,为什么液晶显示不出来 1602的...
答:1、write_com(0x80+17);write_com(0xc0+17);中的【17】改成【0】试试。2、P0口需全部上拉电阻。有吗?3、对比度调节电压VL,直接接地试试?4、初始化时,多写数次write_com(0x38);5、断点放在write_com(0x18);执行之前,看看显示情况。0x18干嘛的?

单片机如何用液晶1602 显示 凤平张李四个字
答:1602只能显示数字和字符 不能显示汉字 只能显示很简单的汉字 要么你就用用字符组合成 不过很麻烦 也不一定弄好 劝你还是算了吧 因为1602的分辨率有限 做个LED旋转屏 会比那要更好玩我做过 这是视频 http://v.youku.com/v_show/id_XMTkyMzI5NTY4.html ...

给个单片机液晶1602显示汉字的程序,谢谢
答:writecmd(0x38); //功能设定 8位数据传输 双行显示 writecmd(0x0c);//显示器开关 writecmd(0x01);//清屏 writecmd(0x06);//字符进入模式 每进入一个字符光标向右移动一格 原有字符不动 //我在刚开始学的时候不知道下一个字符显示在哪 是和AC值有关还是和光标位置有关?//最后摸索出来...

单片机1602液晶怎样移屏?怎样设置光标闪烁?谁有没有这样的C程序?_百度...
答:EN=1;//给使能端一个高脉冲, 因为上升源完成指令 xunhuan(5);EN=0; //芯片停止工作 } void write_f(uchar f) //写操作 { RS=1;P1=f;xunhuan(5);EN=1;xunhuan(5);EN=0;} void write_wei(uchar wei, uchar shu ) //一个显示时间,一个现实在液晶屏那个位置 { uchar ...

1602液晶可以接51单片机的P0口马?
答:首先,1602接在P0口是完全可以工作的,哪怕是P0口同时接了其他的原件(如果是同时并接LED的话,建议使用573类的隔离控制);其次,你的1602的液晶控制电路连接方法是否正常?第三,你的软件是否编写有问题?等等以上三点,只要其中一点出现问题,恐怕电路也不能正常工作。