1602显示程序(菜单)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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;
}