[C51代码]LCD1602驱动

发布者:Serendipity22最新更新时间:2016-07-28 来源: eefocus关键字:C51代码  LCD1602驱动 手机看文章 扫描二维码
随时随地手机看文章
 /************************************************LCD1602.c*************************************************************************/

#include "Atmel/AT89X51.h"
#include "delay.h"
#include "lcd1602.h"

/*************声明变量****************/

uchar code table[]={0x08,0x0f,0x12,0x0f,0x0a,0x1f,0x02,0x02,    //年
                    0x1f,0x11,0x1f,0x11,0x1f,0x11,0x11,0x00,    //月
                    0x1f,0x11,0x11,0x1f,0x11,0x11,0x1f,0x00,    //日
                    0x10,0x18,0x1c,0x1e,0x1f,0x1c,0x18,0x10 };  //三角符号
 /****************************************************************
 *函数功能:初始化LCD
 *入口参数:无 
 *出口参数:无
 ****************************************************************/
void LCDInit(void)
{ LCDWriteCmd(DispMode);          //显示模示设置
  delay1ms(1);
  LCDWriteCmd(DispSet);           //显示/光标设置
  delay1ms(1);
  LCDWriteCmd(InputSet);         //输入设置
  delay1ms(1);
  LCDWriteCmd(DispClear);        //清除LCD的显示内容
  delay1ms(2);
  WriteMychar(table);
 }
 /****************************************************************
 *函数功能:写入指令数据到LCD
 *入口参数:指令数据uchar cmd 
 *出口参数:无
 ****************************************************************/
 void LCDWriteCmd(uchar cmd)
 { LCDBusy();
   RS=0;
   RW=0;
   P0=cmd;
   EP=1;
   delay1ms(1);;//延时1ms
   EP=0;
 }
/****************************************************************
 *函数功能:写入字符显示数据到LCD
 *入口参数:要显示字符的ASCII码uchar dat 
 *出口参数:无
 ****************************************************************/
void LCDWriteData(uchar dat)
{  LCDBusy();
   RS=1;
   RW=0;
   P0=dat;
   EP=1;
   delay1ms(1);//延时1ms
   EP=0;

}
/****************************************************************
 *函数功能:测试LCD忙碌状态
 *入口参数:无 
 *出口参数:1:忙;0 不忙
 ****************************************************************/
void LCDBusy(void)
{  RS=0;
   RW=1;
   while (1) 
   { 
    EP=1; 
    if (StatusBusy==0) EP=0;
                    delay1ms(1);
                    break;
    } 
}
/****************************************************************
 *函数功能:光标定位(x,y)
 *入口参数:地址指针x,y 
 *出口参数:无
 ****************************************************************/
void LCDGet_xy(uchar x,uchar y)
{  y&=0x1;   
   x&=0xf;//限制X不能大于15,Y不能大于1
   if (y==0) x+=0x80;//当要显示第二行时地址码+0x40;
   else      x+=0xc0;// 算出指令码
   LCDWriteCmd(x);

}
/****************************************************************
 *函数功能:输出单个字符
 *入口参数:数据SingalChar
 *出口参数:无
 ****************************************************************/
 void LCDDispOneChar(uchar x,uchar y,uchar SingalChar)
{      
       LCDGet_xy(x,y);

       LCDWriteData(SingalChar);
 
           
         
}
/****************************************************************
 *函数功能:输出字符串
 *入口参数:地址指针*p
 *出口参数:无
 ****************************************************************/
void LCDDispListChar(uchar x,uchar y,uchar *p)
{      
       LCDGet_xy(x,y); 
       while (*p!='\0')   
       {
        LCDWriteData(*p);
        p++;
       }   
           
         
}

/********************************************************************
 *函数功能:写入自定义字符到CGRAM,共64字节
 *入口参数:character:要显示的字符的列表地
            址,(0x00-0x07)为字符保存的RAM 
 *出口参数:无
 ********************************************************************/
void WriteMychar(uchar *s)
{  
    uchar m;
    LCDWriteCmd(0x40);             //设定CGRAM地址 
    for(m=0;m     { 
      LCDWriteData(*s);
      s++;           
    }

}

 /********************************************************************
 *函数功能:显示CGRAM的自定义字符
 *入口参数:k(0x00-0x07)为字符保存的RAM 
 *出口参数:无
 ********************************************************************/
void DispMychar(uchar x,uchar y,uchar k)
{  
   LCDGet_xy(x,y);
   LCDWriteData(k);
 }

 /****************************************************************************************************************************************/

 /************************************************LCD1602.h*************************************************************************/

 /****************************************************************************************************************************************/

#ifndef _LCD1602_h_
#define _LCD1602_h_
#include "link.h"

/*******************端口连接定义********************/
sbit RS=P2^0;
sbit RW=P2^1;
sbit EP=P2^2;

#define DataPort P0

/*******************初始化命令字定义********************/
#define N 24
#define DispMode 0x38                 // 8位数据线,16*2,5*8点阵 --0x38
                                      // DL-bit4: 1 8位显示;0 4位显示
                                      // N-bit3:  1 二行显示;0 一行显示
                                      // F-bit2:  1 5*11点阵显示;0 5*8点阵显示


#define DispSet 0x0c                 // 显示/光标设置 --0x0c
                                     // D-bit2:1 开显示;  0 关显示
                                     // C-bit1:1 显示光标;0 不显示光标
                                     // B-bit0:1 光标闪烁;0 光标不闪烁
#define InputSet 0x06                // 输入设置:    --0x06
                                     // I/D-bit1:1 读写一个字符后指针+1,且光标+1;0 读写一个字符后指针-1,且光标-1
                                     // S-bit0:1 当写一个字符后,整屏显示左移(N=1)或右移(N=0),以得到光标不动而屏幕移动的效果;
                                     //        0 写一个字后整屏显示不移动

#define DispMov  0x10|0<<3|1<<2      // S/C-bit3:1 画面平移一个字符位;0 光标平移一个字符位
                                     // R/L-bit2:1 右移;0 左移
#define DispClear 0x01               // 显示清屏

#define DispEnter 0x02               // 显示回车

#define StatusBusy P0^7              // bit7:1 忙状态


/*************声明函数****************/

extern void LCDInit(void);                     //初始化函数
extern void LCDWriteCmd(uchar cmd);            //写指令函数
extern void LCDWriteData(uchar dat);           //写数据函数
extern void LCDBusy(void);                     //检查忙函数
extern void LCDGet_xy(uchar x,uchar y);        //光标定位(x,y)
extern void LCDDispListChar(uchar x,uchar y,uchar *p);//显示字符串
extern void WriteMychar(uchar *s);
extern void DispMychar(uchar x,uchar y,uchar k);
extern void LCDDispOneChar(uchar x,uchar y,uchar SingalChar);

#endif

关键字:C51代码  LCD1602驱动 引用地址:[C51代码]LCD1602驱动

上一篇:[C51代码]DS1302驱动
下一篇:[C51代码]串口通信

推荐阅读最新更新时间:2024-03-16 15:02

C51/C52单片机的串口原理及参考代码
一、什么是串口(RS232 9针串口) 串口是我们的大多数微控制单元(MCU)都具有的基本的外部接口,一般串口最基本的功能就是调试,又能做数据通信的接口(数据量要小一些)。 二、串口通信原理 一条信息的各位数据按位依次顺序的通信方式称为串行通信,传信通信可以是串口也可以是其他(74LS164移位寄存器)。 根据传输方式又分为单工、半双工和全双工三种,如图所示: 串口传输如下图所示: 三、串口相关寄存器介绍 1、串口控制寄存器SCON 2、电源控制寄存器PCON 四、串口示例代码 1、串口发送单个数据 /********************
[单片机]
<font color='red'>C51</font>/C52单片机的串口原理及参考<font color='red'>代码</font>
msp430单片机驱动LCD1602 C语言程序
/*******************************************************************************/ 1.msp430单片机C语言 /*************************************************************************/ #include msp430f6638.h /******************************************* P5.3----E P57 P56 P55 P54 P53 P52 P51 P50 P5.4----RS
[单片机]
非常简单的8*8LED点阵c51代码
/* 实验目的:学会8*8点阵动态扫描方法. */ /* 实验现象:8*8点阵光柱先从0-9每隔一定的时间动态显示。 */ /*【版权】Copyright(C)铁牛 All Rights Reserved */ /*【声明】此程序仅用于学习与参考,引用请注明版权和作者信息!*/ /*************************************************************/ #include reg52.h #include intrins.h #define uchar unsigned char #define uint unsigned int uch
[单片机]
Keil C51初始化代码 Startup.a51的中文说明
;------------------------------------------------------------------------------ ; STARTUP.A51: 用户上电初始化程序 ;------------------------------------------------------------------------------ ; ; 用户定义需上电初始化的内存空间 ; ; 使用以下EQU命令可定义在CPU复位时需用0进行初始化的内存空间 ; ;; ; IDATA 存储器的空间的绝对起始地址总是0.; IDATALEN EQU 80H ; 需用0进行初始化的IDATA存储器空间的字节
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved