标题: LCD1602显示字符乱码!望大神们指点迷津 [打印本页]
作者: keenJS 时间: 2017-11-1 14:41
标题: LCD1602显示字符乱码!望大神们指点迷津
程序如下:#define RS_CLEAR GpioDataRegs.GPACLEAR.bit.GPIO30
#define RS_SET GpioDataRegs.GPASET.bit.GPIO30
#define RW_CLEAR GpioDataRegs.GPACLEAR.bit.GPIO4
#define RW_SET GpioDataRegs.GPASET.bit.GPIO4
#define E_SET GpioDataRegs.GPASET.bit.GPIO5
#define E_CLEAR GpioDataRegs.GPACLEAR.bit.GPIO5
#define D0_SET GpioDataRegs.GPASET.bit.GPIO18
#define D0_CLEAR GpioDataRegs.GPACLEAR.bit.GPIO18
#define D1_SET GpioDataRegs.GPASET.bit.GPIO19
#define D1_CLEAR GpioDataRegs.GPACLEAR.bit.GPIO19
#define D2_SET GpioDataRegs.GPASET.bit.GPIO20
#define D2_CLEAR GpioDataRegs.GPACLEAR.bit.GPIO20
#define D3_SET GpioDataRegs.GPBSET.bit.GPIO59
#define D3_CLEAR GpioDataRegs.GPBCLEAR.bit.GPIO59
#define D4_SET GpioDataRegs.GPBSET.bit.GPIO60
#define D4_CLEAR GpioDataRegs.GPBCLEAR.bit.GPIO60
#define D5_SET GpioDataRegs.GPBSET.bit.GPIO61
#define D5_CLEAR GpioDataRegs.GPBCLEAR.bit.GPIO61
#define D6_SET GpioDataRegs.GPBSET.bit.GPIO58
#define D6_CLEAR GpioDataRegs.GPBCLEAR.bit.GPIO58
#define D7_SET GpioDataRegs.GPCSET.bit.GPIO68
#define D7_CLEAR GpioDataRegs.GPCCLEAR.bit.GPIO68
unsigned int DB; void LCD_change()
{
if((DB&0x01)==0x01)
D0_SET=1;
else
D0_CLEAR=1;
if((DB&0x02)==0x02)
D1_SET=1;
else
D1_CLEAR=1;
if((DB&0x04)==0x04)
D2_SET=1;
else
D2_CLEAR=1;
if((DB&0x08)==0x08)
D3_SET=1;
else
D3_CLEAR=1;
if((DB&0x10)==0x10)
D4_SET=1;
else
D4_CLEAR=1;
if((DB&0x20)==0x20)
D5_SET=1;
else
D5_CLEAR=1;
if((DB&0x40)==0x40)
D6_SET=1;
else
D6_CLEAR=1;
if((DB&0x80)==0x80)
D7_SET=1;
else
D7_CLEAR=1;
}
void init_LCD1602()
{
DELAY_US(15000); //yanshi15ms
// LCD_write_command(0x38);
// DELAY_US(5000);
// LCD_write_command(0x38);
// DELAY_US(5000);
// LCD_write_command(0x38);
LCD_write_command(0x38);
DELAY_US(5000);
LCD_write_command(0x08);
DELAY_US(5000);
LCD_write_command(0x01);
DELAY_US(5000);
LCD_write_command(0x06);
DELAY_US(5000);
LCD_write_command(0x0c);
DELAY_US(5000);
}
void LCD_write_command(uchar command)
{
E_CLEAR=1;
RS_CLEAR=1;
//RW_CLEAR=1;
DB=command;
DELAY_US(500);
E_SET=1;
DELAY_US(1000);
E_CLEAR=1;
}
void LCD_write_dat(uchar dat)
{
E_CLEAR=1;
RS_SET=1;
//RW_CLEAR=1;
DB=dat;
DELAY_US(500);
E_SET=1;
DELAY_US(1000);
E_CLEAR=1;
}
void LCD_1602()
{
init_LCD1602();
LCD_write_command(0x80);
LCD_write_dat('A');
// while(1);
}
-
QQ图片20171101143753.jpg
(465.36 KB, 下载次数: 89)
作者: keenJS 时间: 2017-11-1 14:42
照片拍摄有问题,在第一行的第二格显示了乱码
作者: zl2168 时间: 2017-11-1 18:49
本帖最后由 zl2168 于 2017-11-1 18:51 编辑
实例67 LCD1602显示屏显示
先Proteus仿真一下,确认有效。
若需改变1602显示内容,只须将需显示的内容用ASCII码写入显示数组,即可。
以上摘自张志良编著《80C51单片机仿真设计实例教程——基于Keil C和Proteus》清华大学出版社ISBN 978-7-302-41682-1。书中电路和程序设计有详细说明,程序语句条条有注解。仿真电路和Hex文件能在清华出版社网站免费下载,程序源代码只能到书上看了。到图书馆借,或到新华书店翻阅,或到网上书店打折购买。
作者: 鸟蛤 时间: 2017-11-1 19:13
重写一遍
作者: 3029936164 时间: 2017-11-1 20:43
楼主用的什么单片机,看着这么牛!
欢迎光临 (http://www.51hei.com/bbs/) |
Powered by Discuz! X3.1 |