| 网站首页 | 精品文章 | 下载中心 | 本站教程 | 邮购须知 | 电子商城 | 网站简介 | 常见问题集锦 | 
您现在的位置: 新启点单片机 >> 本站教程 >> 原创教程 >> 本站教程正文 用户登录 新用户注册
V2.0教程五:LCD1602显示          【字体:
V2.0教程五:LCD1602显示
作者:江在流    本站教程来源:本站原创    点击数:    更新时间:2006-7-2

/*******************************************************************************
  Title:  演示程序 -LCD 1602 显示打印效果           *     
  Name:   LCD.c                                                              *
  Date:   2006-4-15                                                             *
  Ver:    1.0                                                                   *                                                *
  web:   http://www.mcu99.com                                               *
********************************************************************************
  从左至右,分2行打印  WELCOME TO   WWW.MCU99.COM
********************************************************************************/

#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char

typedef bit BOOL ;

sbit rs = P3^5;
sbit rw = P3^6;
sbit ep = P3^7;

void delay(uchar);
void lcd_wcmd(uchar);
BOOL lcd_bz();
void lcd_pos(uchar);
void lcd_wdat(uchar);
void display(uchar,uchar *);

uchar code dis1[] = {"    WELCOME TO"};
uchar code dis2[] = {"WWW.MCU99.COM"};

void longdelay(uchar s)  //长延时
{
 while(s--)
 {
  delay(80);
 }
}

void delay(uchar ms)
{       // 延时子程序
 uchar i;
 while(ms--)
 {
  for(i = 0; i< 250; i++);
 }
}

BOOL lcd_bz()
{       // 测试LCD忙碌状态
 BOOL result;
 rs = 0;
 rw = 1;
 ep = 1;
 result = (BOOL)(P0 & 0x80);
 ep = 0;
 return result;
}

void lcd_wcmd(uchar cmd)
{       // 写入指令数据到LCD
 while(lcd_bz());
  rs = 0;
  rw = 0;
  ep = 0;
  P0 = cmd;
  ep = 1;
  ep = 0; 
}

void lcd_pos(uchar pos)
{       //设定显示位置
 lcd_wcmd(pos | 0x80);
}

void lcd_wdat(uchar dat)
{       //写入字符显示数据到LCD
 while(lcd_bz());
  rs = 1;
  rw = 0;
  ep = 0;
  P0 = dat;
  ep = 1;
  ep = 0;
}

void lcd_init()
{       //LCD初始化设定
 lcd_wcmd(0x38);   //function set
 delay(1);
 lcd_wcmd(0x38);   //function set
 delay(1);
 lcd_wcmd(0x08);   //display on/off
 delay(1);
 lcd_wcmd(0x01);   //清除LCD的显示内容
 delay(1);
 lcd_wcmd(0x06);   //entry mode set
 delay(1);
 lcd_wcmd(0x0d);   //开显示,并显示光标
 delay(1);
}

/*---------------
函数名称:display()
功能 :在LCD上显示数组的数据 ,打印模式
说明 :先写显示地址,后写显示数据
调用 :lcd_wcmd(), lcd_pos()
入口参数:pos 写入的位置,q指向要写入的数据所在的数组
返回值 :无
----------------*/
void display(uchar pos, uchar *q)
{
// uchar i;
 //lcd_wcmd(0x01); //clear
 delay(10);
 lcd_pos(pos);
 while(*q != '\0')
 {
  lcd_wdat(*q);
  q++;
  longdelay(2);
 }
}

main()
{
 lcd_init();    // 初始化LCD  
 delay(10);
 display(0x00,dis1);

 display(0x42,dis2);
 display(0x14,dis1);
 lcd_wcmd(0x07);   //entry mode set
 delay(1);
 while(1)
 {
 }
}

本站教程录入:江在流    责任编辑:江在流 
  • 上一篇本站教程:

  • 下一篇本站教程:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关本站教程
    没有相关本站教程
    网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)