发个完整的LCD1602驱动程序代码(keilc51,AT89S51单片机)


/*******************************************************************************
** 开发板:    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)

    顶一下,!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!