LCD160225无法显示!!

5被浏览538分享邀请回答0添加评论分享收藏感谢收起0添加评论分享收藏感谢收起503 Service Temporarily Unavailable
503 Service Temporarily Unavailable查看: 1226|回复: 6
LCD1602无法显示问题
主题帖子精华
新手上路, 积分 28, 距离下一级还需 22 积分
在线时间0 小时
之前移植了一个1602的程序,对照手册改了I/0配置和初始化程序,但是仍然无法显示,卡了3天了,请大神帮忙看下。
=======================================
======================================================
#ifndef __LCD162A_H
#define __LCD162A_H & & &&
#include "sys.h"
#include "stdlib.h" & &&
/*=====================================================
连接线定义:&
DB0-----Pb8 &DB4-----Pb12 &RS-------PB3
DB1-----Pb9 &DB5-----Pb13 &RW-------PB4
DB2-----Pb10 &DB6-----Pb14 &E--------PB5
DB3-----Pb11 &DB7-----Pb15 &VLCD(Vee)接1K2电阻到GND
VSS-----GND &VCC-----+5v &
======================================================*/
//-----------------LCD162A端口定义---------------- & & & &&
#define LCD162A_RS PBout(3)
#define LCD162A_RW PBout(4) & &
#define LCD162A_E &nbspBout(5)
//PB8~15,作为数据线
#define DATAOUT(x) GPIOB-&ODR=(GPIOB-&ODR&0X00FF)|((u16)(x&&8)&0xFF00);
//lcd162a控制用函数
void lcd162a_Reset(void); //复位lcd162a&
void lcd162a_DispOneChar(u8 x,u8 y,u8 Wdata);//在指定位置显示一个字符//x:0~15 //y:0~1
void lcd162a_cls(void); & &//清屏
void lcd162a_Display(u8 dd); &//显示 & & &&
void lcd162a_Init(void); //初始化lcd162a
void lcd162a_LocateXY(u8 posx,u8 posy); &//显示光标位置
void lcd162a_WriteCommand(u8 CMD);
void lcd162a_WriteData(u8 dataW);
void lcd162a_ePutstr(u8 x,u8 y,u8 *ptr); //显示字符串
=======================================
======================================================
#include "lcd162a.h"
#include "stdlib.h" &&
#include "delay.h"
#include "stdio.h"
void lcd162a_cls(void)
&lcd162a_WriteCommand(0x01); // & & & & & &&
void lcd162a_Display(u8 dd)
{ & & & & & &&
&for(i=0;i&16;i++)
& lcd162a_DispOneChar(i,1,dd++);
& dd &=0x7f;
& if (dd&32) dd=32;
&} & & & &&
//显示光标位置
void lcd162a_LocateXY(u8 posx,u8 posy)
{ & & & & & &&
&temp=posx & 0
&posy &= 0x01;
&if(posy) temp |=0x40;
&//temp |=0x80;
&lcd162a_WriteCommand(temp); & & & &&
//在指定位置显示一个字符
void lcd162a_DispOneChar(u8 x,u8 y,u8 Wdata)
{ & & & & & &&
&lcd162a_LocateXY(x,y);
&lcd162a_WriteData(Wdata); & & & &&
//显示字符串
void lcd162a_ePutstr(u8 x,u8 y,u8 *ptr)
{ & & & & & &&
&u8 i,l=0;
&while (ptr[l] &31)
&for (i=0;i&l;i++)
& lcd162a_DispOneChar(x++,y,ptr);
& if ( x == 16 )
& &x = 0;&
& &y ^= 1;//异或,换行
&} & & & &&
void lcd162a_Reset(void)
&lcd162a_WriteCommand(0x38); //
&delay_ms(15);
&lcd162a_WriteCommand(0x38); //
&delay_ms(15);
&lcd162a_WriteCommand(0x38); //
&delay_ms(15);
&lcd162a_WriteCommand(0x38); //
&lcd162a_WriteCommand(0x08); //
&lcd162a_cls(); //clear device
&lcd162a_WriteCommand(0x06); //
&lcd162a_WriteCommand(0x0c); //
& & & & & & &&
//写入控制字。
void lcd162a_WriteCommand(u8 CMD)
&delay_ms(2); &//等待控制器完成指令
&LCD162A_RS=0;
&LCD162A_RW=0;
&LCD162A_E=1;
&DATAOUT(CMD); //送控制字
&delay_us(2);
&LCD162A_E=0; & & & & & & &&
//写入一个字节。
//dataW:要写入的数据/命令
void lcd162a_WriteData(u8 dataW)
&delay_ms(2); //等待控制器完成指令
&LCD162A_RS=1;
&LCD162A_RW=0;
&LCD162A_E=1;
&DATAOUT(dataW);
&delay_us(2);
&LCD162A_E=0; & & & & & & &
//初始化lcd162a & & & &
void lcd162a_Init(void)
{ & & & & & & & & &&
&RCC-&APB2ENR|=1&&3; & &//使能PORTB时钟
&//RCC-&APB2ENR|=1&&0; & &//开启辅助时钟&
& //JTAG_Set(SWD_ENABLE);
&GPIOB-&CRH=0X; //pb8-pb15 &
&GPIOB-&CRL&=0X0F000FFF;//屏蔽pb3,4,5,7设定值
&GPIOB-&CRL|=0X;//更改pb3,4,5,7设定值
&GPIOB-&ODR|=0XFFB8;//pb3,4,5,7,pb8-pb15全部输出高电平
&lcd162a_Reset();
&lcd162a_cls();
////////////////////////////////////////////////////////////////
=================================================================
===================================================================
#include &stm32f10x_lib.h&
#include "sys.h"
#include "usart.h" &
#include "delay.h"&
#include "led.h"&
#include "key.h"
#include "exti.h"
#include "wdg.h"
#include "timer.h"
#include "lcd162a.h" &&
#include "stdio.h"
////待显示的字符串//
u8 *p1="Hello,world.";
int main(void)
& int temp=0;
&Stm32_Clock_Init(9); &//系统时钟设置
&delay_init(72); & & & //延时初始化
&uart_init(72,9600); & //串口初始化&
&lcd162a_Init(); & //初始化与lcd162a连接的硬件接口
&//lcd162a_cls();
&lcd162a_ePutstr(0,0,p1);
&delay_ms(1000);
&lcd162a_cls();
& while(1)
& p1[temp] &= 0x7f; & // 只显示ASCII字符
& if (p1[temp]&32)p1[temp]=32; // 屏蔽控制字符,不予显示
& lcd162a_Display(p1[temp] );
& delay_ms(400);
检查了几遍硬件应该没有问题。。不知道哪里错了。。。
原程序最后写的是这样的,我不太理解,所以改了下,2种都试过,但是LCD就只是背板亮。。P.S.:如果我改错了,是否可以解释下下面那段儿程序,菜鸟尚未入门,请大神们指点。
& temp &= 0x7f; & // 只显示ASCII字符
& if (temp&32)temp=32; // 屏蔽控制字符,不予显示
& lcd162a_Display(temp );//“扫描屏幕”
& delay_ms(400);
是延时要长,还要加忙检测才行。1602属于低速器件,在51中没啥问题,但是由于M3是高速器件,直接移植51的程序的话会导致不可用。所以需要按照时序调整好时间。
懒惰是发明之母。智力不足,体力补。
主题帖子精华
新手上路, 积分 38, 距离下一级还需 12 积分
在线时间2 小时
是延时要长,还要加忙检测才行。1602属于低速器件,在51中没啥问题,但是由于M3是高速器件,直接移植51的程序的话会导致不可用。所以需要按照时序调整好时间。
主题帖子精华
金钱118462
在线时间926 小时
帮顶。。。。
我是开源电子网站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺:
微信公众平台:正点原子& &
主题帖子精华
在线时间311 小时
这厮直接用51的代码移植过来即可使用,没必要这么折腾吧,不过要注意通讯频率,应为M3的主频比51高很多
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
主题帖子精华
新手上路, 积分 28, 距离下一级还需 22 积分
在线时间0 小时
回复【3楼】八度空间:
---------------------------------
意思是。。应该把延时缩短?
懒惰是发明之母。智力不足,体力补。
主题帖子精华
新手上路, 积分 28, 距离下一级还需 22 积分
在线时间0 小时
回复【5楼】liaolinhui:
---------------------------------
哦,明白了。。去试下。。谢了。。
懒惰是发明之母。智力不足,体力补。
主题帖子精华
新手上路, 积分 28, 距离下一级还需 22 积分
在线时间0 小时
刚刚解决了问题,解决方法简单粗暴,我把控制线换到了PC口。。然后就好使了。。估计是PB高位和低位互相影响了,因为实在没找到哪里影响的,所以就屈服了,直接换端口好了。。感谢大家。。
懒惰是发明之母。智力不足,体力补。
Powered by查看: 1444|回复: 10
刚刚开始学LCD1602编了一个程序,但怎么不显示??
刚刚开始学LCD1602编了一个程序,但怎么不显示??
#include&reg52.h&
#define&&uint&&unsigned&&int
#define&&uchar&&unsigned char
uchar code table[]=&I miss you!&;/////第一行显示
uchar&&code table1[]=&YOU!!&;/////第二行显示
sbit lcden=P3^4;& && &&&//////申明引脚
sbit lcdrs=P3^5;
sbit&&dula=P2^6;
sbit&&wela=P2^7;
uchar&&a,x;
void&&delayms(uint);
void delayms(uint&&xms)& && && &///////延时
&&uint i,j;
&&for(i=x&0;x--)
&&for(j=110;j&0;j--);
void write_com(uchar&&com)& && &&&//////////命令操作
&&lcdrs=1;
&&delayms(5);
&&lcden=1;
&&delayms(5);
&&lcden=0;
void write_date(uchar&&date) /////////数据操作
& & lcdrs=1;
& && && &P0=
& && && &delayms(5);
& && && &lcden=1;
& && && &delayms(5);
& && && &lcden=0;
void init()& &//////////////初始化
& & dula=0;
& && &&&wela=0;
& && &&&lcden=0;
& && &&&write_com(0x38);
& && &&&write_com(0x0c);
& && &&&write_com(0x06);
& && &&&write_com(0x01);
&&void main() ////////////主函数
& & init();
& && &&&write_com(0x80);
& && &&&for(a=0;a&11;a++)
& && && & {
& && && && &write_date(table[a]);
& && && && && & delayms(1000);
& && && & }
& && &&&write_com(0x38+0x40);
& && &&&for(a=0;a&5;a++)
& && && &&&write_date(table1[a]);
& && && &&&delayms(1000);
显示乱码 还是黑色的方块? 有背光吗&&检查焊接了没有?
回帖助人的奖励!
它只显示方块。。。
我想是背光的问题调一下电阻,最好先仿真一下看是否是软件的问题
回帖助人的奖励!
我仔细看了一下,你的程序也有问题,有些马虎了数据操作和命令操作的第一个指令有一个是错误的
我仔细看了一下,你的程序也有问题,有些马虎了数据操作和命令操作的第一个指令有一个是错误的
用仿真可以显示。但用实际电路板只显示命令。不显示数据。
用仿真可以显示。但用实际电路板只显示命令。不显示数据。
既然仿真正确,那就证明程序没错,可是就你贴上的程序有几次错误,1就是void write_com(uchar&&com)& && &&&//////////命令操作
&&lcdrs=1;
lcdrs应该=0;
2就是write_com(0x38+0x40);
位置错误write_com(0x80+0x40);
硬件的话没看到实物.猜测1是p0口上拉电阻,2lcd的电位器没调好,3连线有虚线&&我只能帮这么多了
既然仿真正确,那就证明程序没错,可是就你贴上的程序有几次错误,1就是void write_com(uchar&&com)& && &...
感谢!!!我也发现了。
三个使能端你只用两个,真的可以仿真出来?做实物还需要写忙检测。
回帖助人的奖励!
问题跟你一样多
Powered by1602显示屏能亮,但是不能显示东西 - 单片机/MCU论坛 -
中国电子技术论坛 -
最好最受欢迎电子论坛!
后使用快捷导航没有帐号?
1602显示屏能亮,但是不能显示东西
16:55:19  
10764&查看
我自己焊的板子,1602终于焊好了,显示屏能亮,但是不能显示东西,
我想电源是没有问题,不能显示东西是不是只有D0-D7数字输入的那几个PIN有问题,如果是焊接有问题的话,一两条短路应该还是有显示东西才对的吧?还是我的单片机有问题,晶振?
随便问一下,晶振很容易烧坏的吗??
10:23:18  
有没有哪位大虾帮帮我呢?希望有人清明神祭祖回到家上电子技术论坛而且看到我的帖子了,呵呵
09:06:35  
PCB在线计价下单
板子大小:
板子数量:
PCB 在线计价
也遇到过,当时换了51的接口就好了
09:28:52  
仔细看说明书,或者找个试例程序先确认液晶书不是好的,还有就是那个调对比度的电阻,好好检查电路。
14:25:03  
首先就是要看电路连接是否正确,检查检查!
15:20:17  
我的1602 在开发板可以显示 自己焊的板不显示&&烧的同意程序 电路也无错 求解
15:50:20  
一个一个的测管脚是否断、短路,测电压,51出来的电压是否有或接近5v,接地可调电阻是否管脚无错。
13:31:37  
BUJIDABJJFJFTGFSKJHURWIKG;.AVJGIFHSLFJEWOIUOHDKSA
等待验证会员
20:56:49  
怎么解决的???
助理工程师
21:17:25  
看看调对比度的引脚是否接对了
18:11:31  
我想现在您已经绝对是高手级别的了,现在小弟遇到了同样的问题,希望大神指导下,您是怎么解决的,小弟先谢过了!!!小弟邮箱
发表于 5&小时前  
请问后来怎么解决的?我也遇到了同样的问题,电路程序都没问题,能检查的都检查了
发表于 5&小时前  
解决方法能不能分享一下?
Powered by
供应链服务
版权所有 (C) 深圳华强聚丰电子科技有限公司

我要回帖

更多关于 液晶显示大屏 的文章

 

随机推荐