原创 WJ-V2.0实验板实验例程九:显示自定义字符

2009-12-13 22:43 1939 2 2 分类: MCU/ 嵌入式

/*********** (C) COPYRIGHT 2009 http://www.wang1jin.com ************
* 文件名称: main.c
* 程序作者: wish_btn(QQ:1323266146 ,Email:wish_btn@qq.com)
* 程序版本: V1.0
* 编制日期: 12-13-2009
* 功能描述: LCD1602液晶测试
* 编译器:Keil C uVision4
* 芯片:STC89C52,11.0592M晶振
* 技术支持:http://www.wang1jin.com
*
* 提供原创51单片机、PROTEL99SE视频教程下载,欢迎大家前往论坛下载。
* 论坛地址: http://www.wang1jin.com/bbs/
******************** http://www.wang1jin.com **********************/


#include <REGX52.H>


sbit LCD_rs = P1^0;
sbit LCD_rw = P1^1;
sbit LCD_en = P1^2; //LCD1602控制信号


unsigned char code Forum[] = "bbs.wang1jin.com";
unsigned char code Author[] = "written:wish_btn";
unsigned char code R[]={0x1f,0x11,0x11,0x1f,0x11,0x11,0x1f,0x00};
unsigned char code Y[]={0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f};


void Delay(unsigned int uiCount); //延时函数
void LCD1602_CheckBusy(void); //忙检测
void LCD1602_WriteInformation(unsigned char Data,bit bComOrData); //写数据或者写命令
void LCD1602_Init(void); //初始化
void LCD1602_MoveTo(unsigned char x,unsigned char y); //坐标指定到位置
void LCD1602_DisplayOneCharOnAddr(unsigned char x,unsigned char y,unsigned char Data); //在指定位置显示字符
void LCD1602_DisplayString(unsigned char *str); //显示字符串
void LCD1602_WriteCGRAM(unsigned char *p); //写入自定义字符


/******************* http://www.wang1jin.com **********************
* 函数名称: main
* 功能描述: main函数,程序入口
* 输入参数: 无
* 返回参数: 无
**********************************************************************/
void main()
{
LCD1602_Init();
LCD1602_DisplayOneCharOnAddr(0,0,'A');
LCD1602_DisplayOneCharOnAddr(0,1,'B');
LCD1602_DisplayOneCharOnAddr(0,2,'C');
LCD1602_DisplayOneCharOnAddr(0,3,'D');
LCD1602_WriteCGRAM(R);
LCD1602_DisplayOneCharOnAddr(0,4,0); //自定义字符显示
/*LCD1602_WriteCGRAM(Y);
LCD1602_DisplayOneCharOnAddr(0,5,0); */
Delay(50000);
Delay(50000);
Delay(50000);
Delay(50000);
LCD1602_MoveTo(0,0);
LCD1602_DisplayString(Forum);
LCD1602_MoveTo(1,0);
LCD1602_DisplayString(Author);
while(1);
}


/******************* http://www.wang1jin.com **********************
* 函数名称: LCD1602_CheckBusy
* 功能描述: 忙检测
* 输入参数: 无
* 返回参数: 无
**********************************************************************/
void LCD1602_CheckBusy(void) //read if busy
{
unsigned char i;
i=250;
P0=0xff; //读之前先置位
LCD_rs=0;
LCD_rw=1;
LCD_en=1;
while((i--) && (P0 & 0x80)); //忙检测
LCD_en=0;
}


/******************* http://www.wang1jin.com **********************
* 函数名称: LCD1602_WriteInformation
* 功能描述: 写信息
* 输入参数: Data;bConOrData
* 返回参数: 无
**********************************************************************/
void LCD1602_WriteInformation(unsigned char Data,bit bComOrData) //rs=0:command; rs="1:data"
{
LCD1602_CheckBusy();
P0 = Data;
LCD_rs = bComOrData;
LCD_rw = 0;
LCD_en = 1;
//delay(5);
LCD_en = 0;
}


/******************* http://www.wang1jin.com **********************
* 函数名称: LCD1602_Init
* 功能描述: 初始化
* 输入参数: 无
* 返回参数: 无
**********************************************************************/
void LCD1602_Init(void) //init 1602
{
LCD1602_WriteInformation(0x38,0);
Delay(1500);
LCD1602_WriteInformation(0x38,0);
Delay(500);
LCD1602_WriteInformation(0x38,0);
Delay(500);
LCD1602_WriteInformation(0x38,0);
Delay(150);
LCD1602_WriteInformation(0x0c,0);
Delay(100);
LCD1602_WriteInformation(0x06,0);
Delay(100);
LCD1602_WriteInformation(0x01,0);
Delay(100);
}


/******************* http://www.wang1jin.com **********************
* 函数名称: LCD1602_MoveTo
* 功能描述: 坐标指定到位置
* 输入参数: x,y
* 返回参数: 无
**********************************************************************/
void LCD1602_MoveTo(unsigned char x,unsigned char y)
{
if(0 == x)
LCD1602_WriteInformation((0x80 | y),0);
if(1 == x)
LCD1602_WriteInformation((0xC0 | y),0);
}


/******************* http://www.wang1jin.com **********************
* 函数名称: LCD1602_DisplayOneCharOnAddr
* 功能描述: 在指定位置显示一个字符
* 输入参数: x,y,Data
* 返回参数: 无
**********************************************************************/
void LCD1602_DisplayOneCharOnAddr(unsigned char x,unsigned char y,unsigned char Data)
{
LCD1602_MoveTo(x,y);
LCD1602_WriteInformation(Data,1);
}


/******************* http://www.wang1jin.com **********************
* 函数名称: LCD1602_DisplayString
* 功能描述: 显示字符串
* 输入参数: *str
* 返回参数: 无
**********************************************************************/
void LCD1602_DisplayString(unsigned char *str)
{
while(*str != '\0')
{
LCD1602_WriteInformation(*str,1);
str++;
}
}


/******************* http://www.wang1jin.com **********************
* 函数名称: LCD1602_WriteCGRAM
* 功能描述: 写入自定义字符
* 输入参数: *p
* 返回参数: 无
**********************************************************************/
void LCD1602_WriteCGRAM(unsigned char *p)
{
unsigned char i;
unsigned char CGRAMAddr = 0x40;
for(i = 0;i < 8; i++)
{
LCD1602_WriteInformation(CGRAMAddr + i,0);
LCD1602_WriteInformation(*(p + i),1);
}
}


/******************* http://www.wang1jin.com **********************
* 函数名称: Delay
* 功能描述: 延时函数
* 输入参数: uiCount
* 返回参数: 无
**********************************************************************/
void Delay(unsigned int uiCount)
{
while(uiCount--);
}

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
2
关闭 站长推荐上一条 /3 下一条