A. 单片机LCD左移显示字符显示不全
#include<reg52.h>
unsigned char code s[]={"Hello everyone! Welcome to Beijing"}; //显示字符
sbit rs=P2^0;
sbit rw=P2^1;
sbit e=P2^2;
void delay(int i)//延时函数
{
while(i--);
}
void w_command(unsigned char w) //写入指令
{
rs=0;
rw=0;
P3=w;
e=1;
delay(3000);
e=0;
}
void init_lcd() //1602液晶初始化设定
{
w_command(0x38);// 16*2显示,5*7点阵,8位数据接口
w_command(0x0c);// 开显示,关光标,不闪烁
w_command(0x06);// 指针加1,显示不移动
w_command(0x01);// 清屏
}
void w_data(unsigned char num)//写入字符显示
{
rs=1;
rw=0;
P3=num;
e=1;
delay(3000);
e=0;
}
void main()
{
int i;
init_lcd();
while(1)
{
w_command(0x80);
i=0;
while(s[i]!='\0')
{
w_data(s[i]);
delay(6000);
w_command(0x1c);
i++;
if(i==16)w_command(0xc0);
}
}
}
B. 单片机如何驱动LCD显示字符
首先你要确定你的LCD是什么型号,是否有字库 等等, 而后对应找这个型号的datasheet 查看怎么驱动他。一般都会有例子,多逛逛单片机论坛吧 有用的。别老来网络问些不知道怎么回答的问题
下面我给一个单片机驱动1602液晶的部分代码,希望有用。
/*******************************************************************************
1602LCD
*******************************************************************************/
#include <reg51.h>
#include <intrins.h>
#define unit unsigned int
#define char unsigned char
sbit rs = P2^1;
sbit rw = P2^2;
sbit ep = P2^0;
char code ask[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0xb0};
/* 0 1 2 3 4 5 6 7 8 9 - */
char code dis1[] = {"welcome!"};
char code dis2[] = {"pzowen love you!"};
//***********************************************//
//***********************************************//
///////////////////////////////////////////////////
///////////////////////////////////////////////////
delay(char ms)
{ // 延时子程序
char i;
while(ms--)
{
for(i = 0; i<250; i++)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
lcd_wcmd(char cmd)
{ // 写入指令数据到LCD
delay(1);
rs = 0;
rw = 0;
ep = 0;
_nop_();
_nop_();
P0 = cmd;
_nop_();
_nop_();
_nop_();
_nop_();
ep = 1;
_nop_();
_nop_();
_nop_();
_nop_();
ep = 0;
}
lcd_pos(char pos)
{ //pos=0x40; //设定显示位置
lcd_wcmd(pos|0x80);
//lcd_wcmd(pos);
}
lcd_wdat(char dat)
{ //写入字符显示数据到LCD
delay(1);
rs = 1;
rw = 0;
ep = 0;
_nop_();
_nop_();
P0 = dat;
_nop_();
_nop_();
_nop_();
_nop_();
ep = 1;
_nop_();
_nop_();
_nop_();
_nop_();
ep = 0;
}
lcd_init()
{
delay(1); //LCD初始化设定
lcd_wcmd(0x38); //显示模式设置:单行,8字符,5x7点阵
delay(1);
delay(1);
lcd_wcmd(0x0c); //开显示,关光标,不闪烁
delay(1);
delay(1);
lcd_wcmd(0x06); //设置输入模式:光标增量移动,显示不移位
delay(1);
delay(1);
//lcd_wcmd(0x01); //清除LCD显示的内容
//delay(1);
}
void main()
{
char i;
char k;
lcd_init(); // 初始化LCD
delay(10);
lcd_pos(0x04); // 设置显示位置为第一行的第5个字符
i = 0;
while(dis1[i]!='\0')
{ // 显示字符"welcome!"
lcd_wdat(dis1[i]);
//lcd_wdat(ask[xianshi[i]]);
delay(30);
i++;
}
//lcd_wdat(xianshi[1]);
//delay(30);
delay(20);
lcd_init();
delay(10);
lcd_pos(0x40); // 设置显示位置为第二行第二个字符
delay(10);
i = 0;
while(dis2[i]!='\0')
{
lcd_wdat(dis2[i]); // 显示字符" "
//lcd_wdat(ask[xianshi[i]]);
delay(30);
i++;
}
C. 单片机做1602液晶显示,显示字符错误,代码如下:
你好,只要说你的单片机能工作起来,就没有问题,如果单片机都没有工作起来,那就谈不上驱动了!在单片机能动作的前提下,要是保证程序没有错的情况下,应该是液晶屏的那个调压电阻没有调好的原因,使液晶的显示对比度不好,看不见字符的原因。驱动1602的程序网上很多的,下一个就可以用的,主要是硬件的那个液晶的显示对比调节要调节好才能看到!希望能帮上你!这个链接是程序:
http://download.csdn.net/source/1580412
D. 单片机怎么把整型数据转化成字符型由LCD屏显示
将整形数据转换为字符型很简单,就是将数字变成ASCII形态就可以了。如果是汇编的话,方法是:
1、将数据转换为BCD码。
2、将每一个BCD码加30H。
3、将结果送显示
如果是C语言的话,更简单,直接分离每一位数,然后加0x30就可以了。
举例如下。
比如无符号整型量送显。
disp(unsigned
int
x)
{
unsigned
char
a,b,c,d,e;
a=x/10000+0x30;
b=(x/1000)%10+0x30;
c=(x/100)%10+0x30;
d=(x/10)%10+0x30;
e=x%10+0x30;
......................
}
E. 上位机给51单片机传送ASCII码,单片机如何在液晶中显示出来对应的字符呀
如果液晶能直接显示ASCII码的啊,比如上位机向单片机传送‘HELLO’字符串,这就是ASCII码组成的,即直接送到液晶上显示即可。
但是有的液晶不能直接显示,那就把ASCII码对应的字模送到屏幕上显示了。
F. 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);
}
}
G. 单片机中 LCD1602不能显示字符
#include<reg52.h>//51单片机相关库
typedefunsignedintuint;//数据类型重新定义
typedefunsignedcharuchar;
sbitLCD_RS=P2^0;//数据/命令选择位
sbitLCD_RW=P2^1;//读/写选择位
sbitLCD_EN=P2^2;//使能信号
ucharlcd_tab[]={"www.mcuc.com.cn"};//第一行显示的字符串
ucharlcd_tab1[]={"ILOVEMCU"};//第二行显示的字符串
/**********************************************************************
*函数名称:_delay_ms
*输入:uintx
*输出:无
*功能:延时函数
**********************************************************************/
void_delay_ms(uintx)
{
uchari;
while(x--)
{
for(i=0;i<120;i++);
}
}
/**********************************************************************
*函数名称:LCD_Write_Command
*输入:ucharcmd
*输出:无
*功能:向LCD1602写指令
**********************************************************************/
voidLCD_Write_Command(ucharcmd)
{
LCD_RS=0;//根据规定,RS和R/W同时为低电平时,可以写入指令
LCD_RW=0;
LCD_EN=0;//EN置低电平
P0=cmd;//将数据送入P2口,即写入指令或地址
LCD_EN=1;//EN置高电平
_delay_ms(1);//稍延时,给硬件反应时间
LCD_EN=0;//当EN由高电平跳变成低电平时,液晶模块开始执行命令
}
/**********************************************************************
*函数名称:LCD_Write_Data
*输入:uchardat
*输出:无
*功能:向LCD1602写数据
**********************************************************************/
voidLCD_Write_Data(uchardat)
{
LCD_RS=1;//RS为高电平,RW为低电平时,可以写入数据
LCD_RW=0;
LCD_EN=0;//EN置低电平
P0=dat;//将数据送入P0口,即将数据写入液晶模块
LCD_EN=1;//EN置高电平
_delay_ms(1);//稍延时,给硬件反应时间
LCD_EN=0;//当EN由高电平跳变成低电平时,液晶模块开始执行命令
}
/**********************************************************************
*函数名称:Init_LCD
*输入:无
*输出:无
*功能:初始化LCD1602
**********************************************************************/
voidInit_LCD(void)
{
LCD_Write_Command(0x38);//显示模式设置:16×2显示,5×7点阵,8位数据接口
_delay_ms(1);
LCD_Write_Command(0x06);//显示模式设置:光标右移,字符不移
_delay_ms(1);
LCD_Write_Command(0x0c);//显示模式设置:显示开,无光标,光标不闪烁
_delay_ms(1);
LCD_Write_Command(0x01);//清屏幕指令,将以前的显示内容清除
_delay_ms(1);
}
/**********************************************************************
*函数名称:LCD_POS
*输入:ucharpos
*输出:无
*功能:字符显示位置
**********************************************************************/
voidLCD_POS(ucharpos)
{
LCD_Write_Command(0x80|pos);//显示位置的确定方法规定为"80H+地址码x"
}
/**********************************************************************
*函数名称:Show_String
*输入:uchar*str
*输出:无
*功能:LCD1602显示字符串处理函数
**********************************************************************/
voidShow_String(uchar*str)
{
while(*str!='