首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

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

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

各位大神大家好,我是一只小菜鸟。我要问的问题如题
下面是我在网上找的程序,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);//
在某个屏幕位置上显示一个字符,X0-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;
/*--------------------------------------
;
模块名称                              CD_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);       //
延时清屏,延时函数,延时约n10us
}

/*--------------------------------------
;
模块名称 CD_write_command();
;

CD1602写指令函数
;
占用资源: 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);  //
}

/*--------------------------------------
;
模块名称 CD_write_data();
;

CD1602写数据函数
;
占用资源2.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();
;

:延时函数,延时约n10us
;
占用资源:--
;
参数说明:--
;-------------------------------------*/
void delay_n10us(uint n)  //
延时n10us@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 AreGood");//
显示字符串
      delay(500);//
延时
          LCD_disp_str(5,2," artner!");//
显示字符串
      delay(500);//
延时
        }
}
做人要做懒羊羊啊!
把程序里的液晶驱动程序原封不动的搬过去,然后写一些简单的显示看看结果
返回列表