免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1700 | 回复: 0
打印 上一主题 下一主题

YM1602C液晶驱动 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-20 09:44 |只看该作者 |倒序浏览
 

开发板程序之一(1602液晶C程序含注释)!

/*
***************************************************************************
*     (C) Copyright 2007,单片机初学者园地
*                          All Rights reserved.
*项目名称:    51单片机学习开发系统          
*本文件名称:LCD1602.c  
* 完成作者 : 单片机初学者 QQ:50501160   ahai0306@sina.com
* 当前版本 : V1.0       
* 完成日期 : 2007年4月3日
* 描    述 : 
*                此程序实现,完成液晶的驱动程序,可以显示任意的ASCII字符
*            
我的博客:http://blog.ednchina.com/ahai0306/
*  开发板介绍:http://blog.ednchina.com/ahai0306/84416/message.aspx
淘宝网店铺地址:http://shop35284066.taobao.com/
我的论坛:http://dianzi.5d6d.com/?fromuser=mcu_51          
****************************************************************************
*/

#include  <reg52.h>     //调用头文件(单片机内部的寄存器定义)

/******本段为硬件I/O口定义********/
sbit  KEY0   = P0 ^ 0;  //KEY和发光管复用,请将跳线插到KEY端
sbit  KEY1   = P0 ^ 1;
sbit  KEY2   = P0 ^ 2;
sbit  KEY3   = P0 ^ 3;
sbit  DIG0   = P0 ^ 4;  //数码管位0
sbit  DIG1   = P0 ^ 5;  //数码管位1

sbit  BUZZ   = P3 ^ 3;  //蜂鸣器
sbit  LCD_RW = P3 ^ 6; 
sbit  LCD_RS = P3 ^ 7; 
sbit  LCD_E  = P3 ^ 4;

#define  LED_SEG    P1  //数码管
#define  LCD_DATA   P2   //LCD DATA
#define  LCD_BUSY   0x80  // 用于检测LCD的BUSY标识(本程序中用的延时,未检测)
//LCD显示内容,定义到代码段
 unsigned  char code LcdBuf1[]= {"welcom!"};
unsigned  char code LcdBuf2[]= {"MCU-STUDY-BOARD"};

//函数声明
void  lcd_init(void);
void  display_string(unsigned  char x,unsigned  char y,unsigned  char *s);
void  disp_selec(unsigned  char bit_selec,unsigned  char  seg);


 /**************************************************
** 函数名称: dellay
** 入口参数:h(unsigned int型)
** 出口参数:无
** 功能描述: 短暂延时,使用11.0592晶体,约0.01MS
****************************************************/

void dellay(unsigned int  h)
{
  while(h--);    //0.01MS
}


/************主程序**************/
main()
{
    lcd_init();
 display_string(3,0,LcdBuf1);  //显示第一行,从第3个位置开始
 display_string(0,1,LcdBuf2);  //显示第二行,从第0个位置开始
 
   while(1);     //单片机待机
}

/**************************************************
** 函数名称: WriteDataLcd
** 入口参数:wdata(unsigned  char型)
** 出口参数:无
** 功能描述: 写数据到LCD
****************************************************/

void  WriteDataLcd(unsigned  char wdata)
{
   LCD_DATA=wdata;
   LCD_RS=1;
   LCD_RW=0;
   LCD_E=0;
   dellay(100);     //短暂延时,代替检测忙状态

   LCD_E=1;
}
/**************************************************
** 函数名称: WriteCommandLcd
** 入口参数:wdata(unsigned  char型)
** 出口参数:无
** 功能描述: 写命令到LCD
****************************************************/

void  WriteCommandLcd(unsigned  char wdata)
{
   LCD_DATA=wdata;
   LCD_RS=0;
   LCD_RW=0;
   LCD_E=0;
   dellay(100);      //短暂延时,代替检测忙状态
   LCD_E=1;
}

//LCD初始化
void  lcd_init(void)
{
     LCD_DATA=0;
     WriteCommandLcd(0x38);
     dellay(1000);
     WriteCommandLcd(0x38); //显示模式设置
    WriteCommandLcd(0x08); //关闭显示
    WriteCommandLcd(0x01); //显示清屏
    WriteCommandLcd(0x06); //显示光标移动设置
    WriteCommandLcd(0x0c); //显示开及光标移动设置
}
/**************************************************
** 函数名称: display_xy
** 入口参数:x(unsigned  char型),y(unsigned  char型)
** 出口参数:无
** 功能描述: 设置光标位置, x是列号,y是行号
****************************************************/
void  display_xy(unsigned  char x,unsigned  char y)
{
    if(y==1)
   x+=0x40;
  x+=0x80;
  WriteCommandLcd(x);
}
/********************************************************************
** 函数名称: display_char
** 入口参数:x(unsigned  char型),y(unsigned  char型),dat(unsigned  char型)
** 出口参数:无
** 功能描述: 在具体位置显示单个字符,x是列号,y是行号
*********************************************************************/

void  display_char(unsigned  char x,unsigned  char y,unsigned  char dat)
{
  display_xy(x,y);
  WriteDataLcd(dat);
}

/*********************************************************************
** 函数名称: display_string
** 入口参数:x(unsigned  char型),y(unsigned  char型),s(指针型)
** 出口参数:无
** 功能描述: 在具体位置显示字符串,以/0结束,x是列号,y是行号
**********************************************************************/

void  display_string(unsigned  char x,unsigned  char y,unsigned  char *s)
{
  display_xy(x,y);
  while(*s)
  {
   WriteDataLcd(*s);
   s++;
  }
}

增加硬件原理图:

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP