分享

1602液晶屏字符串的显示

 户外驴行 2012-03-22

//改程序将实现静态字符串在液晶屏上的显示
//程序员:徐茂龙
//完成时间:2012.03.22

#include <reg52.h>
#include <intrins.h>
#include <stdio.h>

#define uchar unsigned char
#define Data P0

//管脚的定义
sbit RS = P2^1;
sbit RW = P1^5;
sbit E = P1^6;
sbit BF = P0^7;
sbit WEI = P2^7;
sbit DUAN = P2^6;

uchar code string[] = {"I love WangLele!"};

//函数声明
void Delay(uchar);   //延时函数
void Init();         //初始化函数
void Busy();         //忙时检测函数
void Write(uchar, bit);    //写入函数
void Display(uchar);


void main()
{
    uchar i;
 //关闭所有数码管
 Data = 0x0;
 WEI = 1;
 WEI = 0;
 Data = 0xff;
 DUAN = 1;
 DUAN = 0;

 Init();
 Display(0x0);
 while(1)
 {
     Write(string[i], 1);
  i ++;
  if(i == '!')
      while(1);
 }
}

void Delay(uchar i)
{
    uchar j;
 for(; i > 0; i --)
     for(j = 155; j > 0; j --);      //最少延时1ms
}


void Busy()
{
    Delay(5);
 RS = 0;         //根据规定:当RS = 0; RW = 1时才能读取指令
 RW = 1;
 E = 1;          //E = 1才允许读写
 _nop_();
 _nop_();        //两个空操作,给硬件反应时间
 while(BF);  //忙时检测
 E = 0;
}

void Write(uchar i, bit flag)
{
    Delay(5);
 Busy();       //当不是忙时时,
 RS = flag;          //flag的值将决定是对数据操作还是对指令操作
 RW = 0;
 E = 0;              //在写指令或者数据时,E要处于高脉冲,就是说E要从0状态转为1
 _nop_();
 _nop_();        //两个空操作,给硬件反应时间
 Data = i;
 _nop_();
 _nop_();        //两个空操作,给硬件反应时间
 E = 1;
 _nop_();
 _nop_();        //两个空操作,给硬件反应时间
 E = 0;          //当E由高电平转为低电平时,开始执行指令操作
}

void Init()          //初始化函数
{
    Delay(15);          //第一次进行操作时,延时时间稍长一点
 Busy();
 Write(0x01, 0);     //清平指令
 Delay(5);
 Write(0x06, 0);     //【输入方式设置命令】光标从左向右移动,内容不移动
 Delay(5);
 Write(0x0f, 0);     //【显示开关设置命令】显示开,光标显示,字符闪烁
 Delay(5);
 Write(0x38, 0);     //【功能设置命令】8位数据,双行显示,5*7点阵
 Delay(5);
}

void Display(uchar temp)
{
    Write(temp | 0x80, 0);
}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多