當前位置:歷史故事大全網 - 故事大全 - LCD1602液晶显示出现乱码,求高手解惑!急!!!谢谢

LCD1602液晶显示出现乱码,求高手解惑!急!!!谢谢

你把跟lcd数据连接的一些外设都去掉程序的话

#include

#include

< p>#define uchar unsigned char

#define uint unsigned int

//这三个引脚参考资料

sbit LCD1602_EN=P2^7; //1602使能引脚

sbit LCD1602_RW=P2^6; //1602读写引脚

sbit LCD1602_RS=P2^5; //1602数据/命令选择引脚

/************************************ **********************************

*名称:LCD1602_delay()

*名称:LCD1602_delay()

p>

*功能:延迟,延迟时间大概为5US。

* 输入:无

* 输出:无

********************* ****************************************************** /

void LCD1602_delay()

{

_nop_();

_nop_();

_nop_ ();

_nop_();

_nop_();

}

void LCD1602_Delay(uint i)

{

uint x,j;

for(j=0;j

for(x=0;x< =148;x++);

}

/************************************ **********************************

* 名称 : bit Busy(void)< /p>

* 功能 : 这是一个读状态函数,读取函数是否忙碌状态

* 输入 : 输入的命令值

* 输出 : 无< /p>

************************************************ **************************/

位忙(无效)

{

位 busy_flag = 0;

LCD1602_RS = 0;

LCD1602_RW = 1;

LCD1602_EN = 1;

LCD1602_delay();

busy_flag = (bit)(P0 & 0x80);

LCD1602_EN = 0;

返回 busy_flag;

}

/******************************************** **************************

* 名称:LCD1602_wcmd(uchar del)

* 功能 : 1602命令函数

* 输入 : 输入的命令值

* 输出 : 无

************* ****************************************************** ********/

void LCD1602_wcmd(uchar del)

{

while(Busy());

LCD1602_RS = 0;

LCD1602_RW = 0;

LCD1602_EN = 0;

LCD1602_delay();

P0 = del;< /p>

LCD1602_delay();

LCD1602_EN = 1;

LCD1602_delay();

LCD1602_EN = 0;

}

/******************************************** **************************

*名称:LCD1602_wdata(uchar del)

* 功能 : 1602 写数据函数

* 输入 : 需要写入 1602 的数据

* 输出 : 无

***** ****************************************************** **************/

void LCD1602_wdata(uchar del)

{

while(Busy()) ;

LCD1602_RS = 1;

LCD1602_RW = 0;

LCD1602_EN = 0;

LCD1602_delay();

< p> P0 = del;

LCD1602_delay();

LCD1602_EN = 1;

LCD1602_delay();

LCD1602_EN = 0;

}

/************************************ **********************************

* 名称:L1602_init()

* 功能 : 1602初始化,请参考1602的数据

* 输入 : 无

* 输出 : 无

***** ****************************************************** **************/

void LCD1602_init(void)

{

LCD1602_wcmd(0x38);// 设置16X2显示

LCD1602_wcmd(0x08);//关闭显示

LCD1602_wcmd(0x0c);//开显示

LCD1602_wcmd(0x0e);//开 显示显示头部

LCD1602_wcmd(0x0f);//开显示显示头部点亮

LCD1602_wcmd(0x06);//读取指针加一

LCD1602_wcmd (0x04);//读写指针减一

//LCD1602_wcmd(0x07);//写入整屏左移

//LCD1602_wcmd(0x05);//写 入整屏右移

LCD1602_wcmd(0x01);//清屏

//LCD1602_wcmd(0x80X10);

}

< p>/**************************************************** *********************

* 名称:LCD1602_char(ucharhang,ucharlie,charsign)

* 功能:改变液晶中某位的值,如果要让第一行,第五个字符显示“b”,调用该函数如下

L1602_char(1,5,'b')

* 输入:行,列,需要输入1602的数据

* 输出:无

**************** ****************************************************** *****/

void LCD1602_char(ucharhang,ucharlie,charsign)

>{

uchar a;

if(hang == 1) a = 0x80;

if(hang == 2) a = 0xc0;

if(hang == 2) a = 0xc0;

p>

a = a + lie - 1;

LCD1602_wcmd(a);

LCD1602_wdata(sign);

}

< p>/**************************************************** *********************

* 名称:LCD1602_string(ucharhang,ucharlie,uchar*p)

* 功能 : 改变液晶中某位的值,如果要让第一行,第五个字符开始显示"ab cd ef" ,调用该函数如下

L1602_string(1,5,"ab cd ef;")

* 输入:行,列,需要输入1602的数据

* 输出:无

********* ****************************************************** ************/

void LCD1602_string(uchar Hang,uchar lie,uchar *p)

{

uchar a ,b=0;

if(hang == 1) a = 0x80;

if(hang == 2) a = 0xc0;

a = a + lie - 1;

while(1)

{

LCD1602_wcmd(a++);

if((*p == '\0')||(b==16)) break;

b++;

LCD1602_wdata(*p );

p++;

}

}

/**************** ****************************************************** ***

* 名称 : Main()

* 功能 : 主函数

* 输入 : 无

* 输出 : 无

************************************************ **************************/

void Main()

{

LCD1602_Delay(30);

LCD1602_init();

LCD1602_string(1,1,"欢迎来到");

LCD1602_string(2,1,"MCU 世界");

LCD1602_char(1,1,'*');

LCD1602_char(1,16,'*');

while(1);

}

尝尝这个有用请给悲伤

  • 上一篇:美容護膚怎麽做?美容護膚的小常識有哪些?
  • 下一篇:紅棗和棗片哪個營養價值高
  • copyright 2024歷史故事大全網