OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8353|回复: 5

lcd 1602显示两排黑框

[复制链接]

3

主题

6

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2014-1-24
在线时间
0 小时
发表于 2014-7-28 12:06:32 | 显示全部楼层 |阅读模式
5金钱
最近想要研究一下lcd1602,根据论坛大神的程序代码进行修改,可是最终显示两排黑框,求解释呀。

代码如下
lcd162a.h

#ifndef __LCD162A_H
#define __LCD162A_H       
#include "sys.h"
#include "stdlib.h"     
//////////////////////////////////////////////////////////////////////////////////  
//本程序只供学习使用,未经作者许可,不得用于其它任何用途
//Mini STM32开发板162A驱动代码
//修改日期:2011/07/23
//版本:V0.0.2

 

/*=====================================================
连接线定义: 
7DB0-----PC0   11DB4-----PC4  4RS-------Pc8
8DB1-----PC1   12DB5-----PC5  5RW-------Pc9
9DB2-----PC2   13DB6-----PC6  6E--------Pc10
10DB3-----PC3  14DB7-----PC7  3VLCD(Vee)接1K2电阻到GND
1VSS-----GND   2VCC-----+5v  
======================================================*/
//-----------------LCD162A端口定义----------------         

#define LCD162A_RS PCout(8)
#define LCD162A_RW PCout(9)    
#define LCD162A_E  Cout(10)

//PC0~7,作为数据线
#define DATAOUT(x) GPIOC->ODR=(GPIOC->ODR&0xff00)|(x&0x00FF); //PC0-PC7输出
        
//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); //显示字符串
#endif  



///////////////////////////////////
lcd162a.c
#include "lcd162a.h"
#include "stdlib.h"   
#include "delay.h"
#include "stdio.h"

//清屏
////
void lcd162a_cls(void)
{
 lcd162a_WriteCommand(0x01); //             
}

//显示
void lcd162a_Display(u8 dd)
{             
 u8 i=0;
 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)
{             
 u8 temp;
 temp=posx & 0xf;
 posy &= 0x01;
 if(posy) temp |=0x40;
 temp |=0x80;
 lcd162a_WriteCommand(temp);         
}

//在指定位置显示一个字符
//x:0~15
//y:0~1
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)
 {
  l++;
 };

 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); //
              
}
//写入控制字。
//RS=0,
//RW=0
//E=1
//
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:要写入的数据/命令
//RS=1
//RW=0
//E=1
//
void lcd162a_WriteData(u8 dataW)
{
 delay_ms(2); //等待控制器完成指令

 LCD162A_RS=0;
 LCD162A_RW=0;
 LCD162A_E=1;
 
 DATAOUT(dataW);

 delay_us(2);

 LCD162A_E=0;              
}

    
//初始化lcd162a        
void lcd162a_Init(void)
{                   
RCC->APB2ENR|=1<<4;    //使能PORTC时钟  

RCC->APB2ENR|=1<<0;    //开启辅助时钟 
       
  //JTAG_Set(SWD_ENABLE);
GPIOC->CRL=0X33333333; //pC-pC7
GPIOC->ODR|=0X00FF;  //全部输出高电平 
 
 //pc8-pc10
GPIOC->CRH&=0XFFFFF000;
 GPIOC->CRL&=0XFFFFFFFF;
GPIOC->CRH|=0X00000333;//
 GPIOC->ODR|=0X0700;

  lcd162a_Reset();
  lcd162a_cls();
       
}  
/*//初始化lcd162a        
void lcd162a_Init(void)
{                   
 RCC->APB2ENR|=1<<2;    //使能PORTA时钟 
 RCC->APB2ENR|=1<<4;    //使能PORTC时钟  
 
 //RCC->APB2ENR|=1<<0;    //开启辅助时钟 
       
  //JTAG_Set(SWD_ENABLE);

 GPIOA->CRL=0X33333333; //pa0-pa7
 GPIOA->ODR|=0X00FF;  //全部输出高电平 
 
 //pc6-pc9
  GPIOC->CRH&=0XFFFFFF00;
 GPIOC->CRL&=0X00FFFFFF;
  GPIOC->CRH|=0X00000033;//
 GPIOC->CRL|=0X33000000;
 GPIOC->ODR|=0X03C0;

 lcd162a_Reset();
 lcd162a_cls();
       
} */


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-7-29 00:20:17 | 显示全部楼层
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

37

主题

146

帖子

0

精华

新手入门

积分
18
金钱
18
注册时间
2014-6-4
在线时间
92 小时
发表于 2014-7-29 12:03:49 | 显示全部楼层
试试调整一下对比度!
一路狂奔!
回复

使用道具 举报

6

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
100
金钱
100
注册时间
2014-5-20
在线时间
2 小时
发表于 2014-7-29 17:49:42 | 显示全部楼层
时间问题可能是,这极有可能。
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
22
金钱
22
注册时间
2014-7-14
在线时间
0 小时
发表于 2014-7-29 20:05:19 | 显示全部楼层
3VLCD(Vee)接1K2电阻到GND
试试把这个电阻换换试试,应该是对比度问题
回复

使用道具 举报

3

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
54
金钱
54
注册时间
2014-10-30
在线时间
0 小时
发表于 2014-12-8 15:00:59 | 显示全部楼层
应该是背光电阻调一下就可以了吧
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-28 04:59

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表