各位大神大家好,我是一只小菜鸟。我要问的问题如题
下面是我在网上找的程序,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);//延时
}
}
|