点阵式字符型LCD显示器

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

项目名称:点阵式字符型LCD显示器

班级:09电二姓名:解健学号:09020313

一.实验目的

1.掌握单片机系统扩展点阵式字符型液晶显示器LCD1602电路原理。

2.掌握单片机系统点阵式字符型液晶显示器LCD1602驱动程序的编写。

二.实验电路

元器件编号元器件名称说明

U2 74HC573 8位数据锁存器

U3 74HC00 2输入与非门

U1 AT89C52.BUS AT89C52单片机

LCD1 LM032L 点阵式字符型液晶显示器

四.实验步骤

第一步:先在Proteus软件中设计仿真电路原理图。

第二步:再在Keil C51软件中编写且编译程序,程序后缀必须是.c。然后在打开的“Option for Target‘Target 1’”选项卡,“Target”标签下频率设置为“11.0592”,“Output”标签下,将“Creat HEX File”项打勾选中,设置生成一个.hex文件。

第三步:接着将.hex文件导入原理图中U1芯片。双击U1,打开Edit Component对话框,选择生成的hex文件。

第四步:最后观察设计的电路图是否能得到预想的效果,若不能,进行检查,找到毛病且纠正。

流程图

实验现象:

在LCD1602显示“A T89C52LcdDriver”;显示保持约2s;然后再第二行循环显示ASCII可打印字符。

附:程序

#include

#include

#include

#include

#include

#include

#define byte unsigned char

#define uchar unsigned char

#define word unsigned int

#define uint unsigned int

#define ulong unsigned long

#define BYTE unsigned long

#define WORD unsigned int

#define TRUE 1

#define FALSE 0

void initUart(void);

void time(unsigned int ucMs);

uchar xdata Lcd1602CmdPort _at_ 0x8000;

uchar xdata Lcd1602StatusPort _at_ 0x8001;

uchar xdata Lcd1602WdataPort _at_ 0x8002;

uchar xdata Lcd1602RdataPort _at_ 0x8003;

#define BUSY 0x80

code uchar exampl[]="AT89C52LcdDriver";

void LcdWriteData(char dataW);

void LcdWriteCommand(uchar CMD,uchar AttribC); void LcdReset(void);

void Display(uchar dd);

void DispOneChar(uchar x,uchar y,uchar Wdata); void Putstr(uchar x,uchar y,uchar code *ptr);

void main(void)

{uchar temp;

initUart();

LcdReset();

temp=32;

Putstr(0,0,exampl);

time(2000);

while(1){

temp&=0x7f;

if(temp<32)temp=32;

Display(temp++);

time(400);}}

void Putstr(uchar x,uchar y,uchar code *ptr) {uchar i,l=0;

while (ptr[l]>31){l++;};

for(i=0;i

DispOneChar(x++,y,ptr[i]);

if(x==16){x=0;y^=1;}}}

void Display(uchar dd)

{uchar i;

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

DispOneChar(i,1,dd++);

dd&=0x7f;

if(dd<32)dd=32;}}

void LocateXY(char posx,char posy)

{uchar temp;

temp=posx&0xf;

posy&=0x1;

if(posy)temp|=0x40;

temp|=0x80;

LcdWriteCommand(temp,0);}

void DispOneChar(uchar x,uchar y,uchar Wdata) {LocateXY(x,y);

LcdWriteData(Wdata);}

void LcdReset(void){

time(400);

LcdWriteCommand(0x38,0);

while(Lcd1602StatusPort&BUSY); LcdWriteCommand(0x08,1); LcdWriteCommand(0x06,1); LcdWriteCommand(0x0f,1); LcdWriteCommand(0x01,1); }

void LcdWriteCommand(uchar CMD,uchar AttribC) {if( AttribC)while(Lcd1602StatusPort&BUSY); Lcd1602CmdPort=CMD;}

void LcdWriteData(char dataW)

{while(Lcd1602StatusPort&BUSY);

Lcd1602WdataPort=dataW;}

void delay_5us(void)

{_nop_();

_nop_();}

void delay_50us(void)

{unsigned char i;

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

delay_5us(); }}

void delay_100us(void)

{delay_50us();

delay_50us();}

void time(unsigned int ucMs)

{unsigned char j;

while(ucMs>0){

for(j=0;j<10;j++) delay_100us();

ucMs--; }}

void initUart(void)

{SCON=0x50;

RCAP2H=(65535-(3456/96))>>8;

RCAP2L=(65535-(3456/96))%256;

T2CON=0x34;

TI=1;}

相关文档
最新文档