打印

stc单片机驱动1602显示的问题

[复制链接]
3367|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
shanyign|  楼主 | 2013-4-27 10:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位大神大家好,我是一只小菜鸟。我要问的问题如题
下面是我在网上找的程序,keil编译没有问题也没有警告,但是烧到单片机里面就是不显示。很郁闷啊。求大神指点一下。感激不尽
#include<reg52.h>
#include <intrins.h>
#include <math.h>      
#include <stdio.h>   

//*********************LCD1602设置 START************************
#define LCD_DB        P0
        sbit         LCD_RS=P2^3;   
        sbit         LCD_RW=P2^4;   
        sbit         LCD_E=P2^5;   
/******定义函数****************/
#define uchar unsigned char
#define uint unsigned int
void LCD_init(void);                          //初始化函数
void LCD_write_command(uchar command);        //写指令函数
void LCD_write_data(uchar dat);               //写数据函数
void LCD_disp_char(uchar x,uchar y,uchar dat);//在某个屏幕位置上显示一个字符,X(0-15),y(1-2)
void LCD_disp_str(uchar x,uchar y,uchar *str); //LCD1602显示字符串函数
void delay_n10us(uint n);                     //延时函数
uint jishu,jishu1=0,wendu,bb,fen=0,miao=0,fmiao=0;
/*--------------------------------------
;模块名称:LCD_init();
;功    能:初始化LCD1602
;占用资源:--
;参数说明:--
;-------------------------------------*/
void delay(uint z)
{
  uint i,j;
  for(i=z;i>0;i--)
    for(j=100;j>0;j--);
}
void LCD_init(void)
{
delay_n10us(10);
LCD_write_command(0x38);//设置8位格式,2行,5x7
delay_n10us(10);
LCD_write_command(0x0c);//整体显示,关光标,不闪烁
delay_n10us(10);
LCD_write_command(0x06);//设定输入方式,增量不移位
delay_n10us(10);
LCD_write_command(0x01);//清除屏幕显示
delay_n10us(100);       //延时清屏,延时函数,延时约n个10us
}

/*--------------------------------------
;模块名称:LCD_write_command();
;功    能:LCD1602写指令函数
;占用资源: P2.0--RS(LCD_RS),P2.1--RW(LCD_RW),P2.2--E(LCD_E).
;参数说明:dat为写命令参数
;-------------------------------------*/
void LCD_write_command(uchar dat)
{
delay_n10us(10);
LCD_RS=0;         //指令
LCD_RW=0;         //写入
LCD_E=1;          //允许
LCD_DB=dat;
delay_n10us(10);  //
LCD_E=0;
delay_n10us(10);  //
}

/*--------------------------------------
;模块名称:LCD_write_data();
;功    能:LCD1602写数据函数
;占用资源: P2.0--RS(LCD_RS),P2.1--RW(LCD_RW),P2.2--E(LCD_E).
;参数说明:dat为写数据参数
;-------------------------------------*/
void LCD_write_data(uchar dat)
{
delay_n10us(10);
LCD_RS=1;          //数据
LCD_RW=0;          //写入
LCD_E=1;           //允许
LCD_DB=dat;
delay_n10us(10);
LCD_E=0;
delay_n10us(10);
}

/*--------------------------------------
;模块名称:
;功    能:显示一个字符
;占用资源:--
;参数说明:
;-------------------------------------*/
void LCD_disp_char(uchar x,uchar y,uchar dat)
{
  uchar address;
  if(y==1)
         address=0x80+x;
  else
         address=0xc0+x;
  LCD_write_command(address);
  LCD_write_data(dat);
}

/*--------------------------------------
;模块名称:
;功    能:显示一个字符串。
;占用资源:--
;参数说明:
;-------------------------------------*/
void LCD_disp_str(uchar x,uchar y,uchar *str)
{
  uchar address;
  if(y==1)
         address=0x80+x;
  else
         address=0xc0+x;
  LCD_write_command(address);
  while(*str!='\0')
  {
    LCD_write_data(*str);   
    str++;
  }
}

/*--------------------------------------
;模块名称:delay_n10us();
;功    能:延时函数,延时约n个10us
;占用资源:--
;参数说明:--
;-------------------------------------*/
void delay_n10us(uint n)  //延时n个10us@12M晶振
{      
        uint i;           
        for(i=n;i>0;i--)   
        {
        _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  }
}

//*********************LCD1602设置 END****************

//*********主函数*****************
void main()
{
  while(1)
        {
      LCD_init();
      LCD_disp_char(0,1,1+'0');//显示一个字符
      LCD_disp_char(15,1,1+'0');//显示一个字符
          LCD_disp_str(3,1,"We Are Good");//显示字符串
      delay(500);//延时
          LCD_disp_str(5,2,"Partner!");//显示字符串
      delay(500);//延时
        }
}

相关帖子

沙发
huangxz| | 2013-4-27 12:41 | 只看该作者
可能是楼主硬件接的不对啊

使用特权

评论回复
板凳
sigmaqq| | 2013-4-28 10:38 | 只看该作者
同意楼上,有这个可能

使用特权

评论回复
地板
这个名字2| | 2013-4-28 12:25 | 只看该作者
先查硬件,硬件没问题在看软件》

使用特权

评论回复
5
zjs1988| | 2013-6-5 19:39 | 只看该作者
把程序里的液晶驱动程序原封不动的搬过去,然后写一些简单的显示看看结果

使用特权

评论回复
6
anazel| | 2013-6-5 21:22 | 只看该作者
是不是程序根本就没有运行呢

使用特权

评论回复
7
宇容创行| | 2013-6-5 21:49 | 只看该作者
stc的比51的快,会导致延时不准,楼主检查一下时钟的设置

使用特权

评论回复
8
qq173514917| | 2013-7-14 20:05 | 只看该作者
可能是你单片机的引脚和网络上的不一样

使用特权

评论回复
9
冥顽的石头| | 2013-7-14 21:12 | 只看该作者
没看出问题

使用特权

评论回复
10
林志财| | 2013-7-30 18:55 | 只看该作者
硬件问题

使用特权

评论回复
11
ningling_21| | 2013-7-30 19:06 | 只看该作者
1602需要调整对比度电压,电压合适才会显示,否则无显示...

使用特权

评论回复
12
minDragon| | 2013-7-30 22:54 | 只看该作者
最大的可能是硬件的连接问题吧??先找出硬件的连接方式,然后再试一下,若还是不行,仿真试试看~也可能是你的LCD有问题~

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

1

帖子

0

粉丝