1602显示程序(菜单)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1602显示程序(菜单)

2009-08-27 23:41:23| 分类:电子技术| 标签:|字号大中小订阅

在做给予8038的信号发生器的时候因为需要显示部分,所以选定1602.,同时因为要有人机互动也就是你选择要输出地波形,然后会在屏幕上显示波形的名称以及频率。所以自己动手写了这个1602的程序,菜单选项也比较简单,因为1602 不能指定光标的移动位置,所以只能想别的办法去突出显示现在的选择项。程序如下:

连线

RS = P3^7;

RW = P3^6;

E = P3^5;

D0-D7:P0口;

两个按键分别接P3^2和P3^3;

1602.h

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

1602 驱动程序

作者:赵文嘉

版本:1.0

日期:2009年08月23号

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

#ifndef _LCD_1602

#define _LCD_1602

#define DPORT P0

#define uchar unsigned char

#define NoDisp 0

#define NoCur 1

#define CurNoFlash 2

#define CurFlash 3

sbit RS = P3^7;

sbit RW = P3^6;

sbit E = P3^5;

extern void LcdWcn(uchar c); /*检测忙信号的送控制字子程序*/

extern void LcdWc(uchar c); /*检测忙信号的送控制字子程序*/

extern void WriteChar(uchar); /*在指定的行与列显示*/

extern void LcdPos(); /*LCD 的复位程序*/

extern void LcdWd(uchar c); /*带忙检测的写字符子程序*/

extern void LcdWdn(uchar c); /*不检测忙的写字符子程序*/

extern void mDelay(unsigned int Delay);

extern void RstLcd();

extern void ClrLcd(); /*清屏命令*/

extern void WaitIdle(); /*正常读写操作之前检测LCD 控制器*/

extern void WriteString(char s[]);

extern void SetCur(uchar Cur); /*光标设置命令Cur 为设定光标参数*/ extern void Setlocal(uchar Xpos,Ypos); /*设置光标开始显示位置*/

#endif

1602.c

#include "reg51.h"

#include

#include"1602.h"

/*uchar Xpos; //列方向地址指针

uchar Ypos; //行方向地址指针*/

uchar Xpos; //列方向地址指针

uchar Ypos; //行方向地址指针

void Setlocal(uchar Xposz,Yposz)

{

Xpos=Xposz;

Ypos=Yposz;

}

void mDelay(unsigned int Delay)

{ unsigned int i;

for(;Delay>0;Delay--)

{ for(i=0;i<124;i++)

{;}

}

}

/*光标设置命令

Cur 为设定光标参数

*/

void SetCur(uchar Cur)

{ switch(Cur)

{ case 0x0:

{ LcdWc(0x08); //关显示

break;

}

case 0x1:

{ LcdWc(0x0c); //开显示但无光标

break;

}

case 0x2:

{ LcdWc(0x0e); //开显示有光标但不闪烁break;

}

case 0x3:

{ LcdWc(0x0f); //开显示有光标且闪烁break;

}

case 0x4:

{ LcdWc(0x02); //返回

break;

}

default: break;

}

}

/*清屏命令

*/

void ClrLcd()

{ LcdWc(0x01);

}

/*在指定的行与列显示

*/

void WriteChar(uchar c)

{ LcdPos();

LcdWd(c);

}

/*正常读写操作之前检测LCD 控制器*/

void WaitIdle()

{ uchar tmp;

DPORT=0xff;

RS=0;

RW=1;

E=1;

_nop_();

for(;;)

{ tmp=DPORT;

tmp&=0x80;

if(tmp==0)

break;

}

E=0;

}

相关文档
最新文档