发个完整的LCD1602驱动程序代码(keilc51,AT89S51单片机)
字体: 小 中 大 | 打印 发表于: 2008-8-09 16:29 作者: cpucore 来源: proteus仿真社区
/*******************************************************************************
** 开发板: HX-MCS100DB 51 MCU Development Board
** 目标处理器:AT89S51
** 开发环境: Keil c51 7.04
** 下载工具: USBASP(HX-MCS100DB开发板自带下载工具,USB接口)
** 下载软件: zhifeng下载软件
** 备注:
**-----------------文件信息-----------------------------------------------------
** 文件名: lcd1602.C
** 作 者: 核芯科技 www.cpucore.cn
** 日 期: 2008年8月3日
** 描 述: lcd1602显示本站网址和电话
**
**-----------------历史版本信息-------------------------------------------------
** 作 者:
** 版 本:
** 日 期:
** 描 述:
**
**------------------------------------------------------------------------------
*******************************************************************************/
#include <at89x51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sfr lcd_bus = 0x80; //P0口对应地址0X80,声明lcdbus,控制数码管
sbit seg8con = P2^3; //声明seg8con,控制数码管段码
sbit bit8con = P2^4; //声明bit8con,控制数码管位码
sbit RS = P2^2; //寄存器选择
sbit RW = P2^1; //读/写选择
sbit E = P2^0; //使能信号
uchar code tel[]= //电话:15821637746
{
0x31,0x35,0x38,0x32,0x31,0x36,0x33,0x37,0x37,0x34,0x36
};
uchar code web[]= //网址:www.cpucore.cn
{
0x77,0x77,0x77,0x2e,0x63,0x70,0x75,0x63,0x6f,0x72,0x65,0x2e,0x63,0x6e
};
/*******************************************************************************
** 函数名称:lcd1602_delay
** 功能描述:LCD1602延时函数
** 输入:k
** 输出:无
** 全局变量:无
** 调用模块:无
**
** 作者:HXT
** 日期:2008年8月3日
**------------------------------------------------------------------------
** 修改人:
** 日期:
**------------------------------------------------------------------------
*******************************************************************************/
void lcd1602_delay(uchar k)
{
uchar i,j;
for(i=0;i<k;i++)
{
for(j=0;j<200;j++)
{;}
}
}
/*******************************************************************************
** 函数名称:lcd1602_write_seq
** 功能描述:LCD1602显示器写命令时序函数
** 输入:无
** 输出:无
** 全局变量:无
** 调用模块:lcd1602_delay
**
** 作者:HXT
** 日期:2008年8月3日
**------------------------------------------------------------------------
** 修改人:
** 日期:
**------------------------------------------------------------------------
*******************************************************************************/
void lcd1602_write_seq(void)
{
RS=0;
RW=0;
E=0;
lcd1602_delay(5);
E=1;
}
/*******************************************************************************
** 函数名称:lcd1602_clear
** 功能描述:lcd1602清屏幕函数
** 输入:无
** 输出:无
** 全局变量:无
** 调用模块:lcd1602_write_seq
**
** 作者:HXT
** 日期:2008年8月3日
**------------------------------------------------------------------------------
** 修改人:
** 日期:
**------------------------------------------------------------------------------
*******************************************************************************/
void lcd1602_clear(void)
{
lcd_bus=0x01;
lcd1602_write_seq();
}
/*******************************************************************************
** 函数名称:lcd1602_row_addr
** 功能描述:lcd1602写行地址函数,选择待写字符的显示位置
** 输入:write_addr
** 输出:无
** 全局变量:无
** 调用模块:lcd1602_write_seq
**
** 作者:HXT
** 日期:2008年8月3日
**------------------------------------------------------------------------------
** 修改人:
** 日期:
**------------------------------------------------------------------------------
*******************************************************************************/
void lcd1602_row_addr(uchar write_addr)
{
lcd_bus=write_addr;
lcd1602_write_seq();
}
/*******************************************************************************
** 函数名称:lcd1602_init
** 功能描述:lcd1602初始化
** 输入:无
** 输出:无
** 全局变量:无
** 调用模块:lcd1602_delay,lcd1602_clear,lcd1602_write_seq
**
** 作者:HXT
** 日期:2008年8月3日
**------------------------------------------------------------------------------
** 修改人:
** 日期:
**------------------------------------------------------------------------------
*******************************************************************************/
void lcd1602_init(void)
{
lcd1602_delay(5);
lcd1602_clear();
lcd_bus=0x38;
lcd1602_write_seq();
lcd_bus=0x0c;
lcd1602_write_seq();
lcd_bus=0x06;
lcd1602_write_seq();
}
/*******************************************************************************
** 函数名称:lcd1602_write_onedata
** 功能描述:lcd1602写一个字节函数(一个字符)
** 输入:onebyte
** 输出:无
** 全局变量:无
** 调用模块:lcd1602_delay
**
** 作者:HXT
** 日期:2008年8月3日
**------------------------------------------------------------------------------
** 修改人:
** 日期:
**------------------------------------------------------------------------------
*******************************************************************************/
void lcd1602_write_onedata(uchar onebyte)
{
lcd_bus=onebyte;
RS=1;
RW=0;
E=0;
lcd1602_delay(5);
E=1;
}
/*******************************************************************************
** 函数名称:lcd1602_write_onebyte
** 功能描述:lcd1602写一个字节函数(一个字符)
** 输入:write_addr,onebyte
** 输出:无
** 全局变量:无
** 调用模块:lcd1602_delay,lcd1602_write_seq
**
** 作者:HXT
** 日期:2008年8月3日
**------------------------------------------------------------------------------
** 修改人:
** 日期:
**------------------------------------------------------------------------------
*******************************************************************************/
void lcd1602_write_onebyte(uchar write_addr,uchar onebyte)
{
lcd_bus=write_addr;
lcd1602_write_seq();
lcd_bus=onebyte;
RS=1;
RW=0;
E=0;
lcd1602_delay(5);
E=1;
}
/*******************************************************************************
** 函数名称:lcd1602_write_a_page
** 功能描述:lcd1602写页函数(多个数据)
** 输入:buffer,addr,bytenum
** 输出:无
** 全局变量:无
** 调用模块:lcd1602_row_addr,lcd1602_write_onebyte
**
** 作者:HXT
** 日期:2008年8月3日
**------------------------------------------------------------------------------
** 修改人:
** 日期:
**------------------------------------------------------------------------------
*******************************************************************************/
void lcd1602_write_a_page(uchar *buffer,uchar addr,uchar bytenum)
{
uchar i;
lcd1602_row_addr(addr);
for(i=0;i<bytenum;i++)
{
lcd1602_write_onedata(buffer);
}
}/*******************************************************************************
** 函数名称:main
** 功能描述:主函数
** 输入:无
** 输出:无
** 全局变量:无
** 调用模块:lcd1602_delay,lcd1602_init,lcd1602_clear,lcd1602_write_a_page
**
** 作者:HXT
** 日期:2008年8月3日
**------------------------------------------------------------------------------
** 修改人:
** 日期:
**------------------------------------------------------------------------------
*******************************************************************************/
void main(void)
{
seg8con=1; //不锁存
bit8con=1; //不锁存
lcd_bus=0xff; //初始化,显示码和位选码都为0xff,数码管构不成回路
seg8con=0; //锁存数码管显示码数据
bit8con=0; //锁存数码管位选码数据
lcd1602_delay(10); //延时
lcd1602_init(); //lcd1602初始化
lcd1602_clear(); //lcd1602清屏幕
while(1)
{
lcd1602_write_a_page(web,0x81,14); //显示本站网址
lcd1602_write_a_page(tel,0xc2,11); //显示本站电话
}
}
/*******************************************************************************
End Of File
*******************************************************************************/
LCD1602完整keil工程及更多源代码请到以下地址下载:
http://www.cpucore.cn/bbs/index.asp?boardid=24

最新回复
taiwentaotwt (2008-8-12 08:55:43)
fghjkl (2008-8-20 15:28:24)