基于C51单片机的键盘及LCD显示

  • 格式:doc
  • 大小:38.50 KB
  • 文档页数:8

下载文档原格式

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

基于C51单片机的键盘及LCD显示

一、实验目的

1.掌握矩阵式键盘的数字键和功能键的编程方法。

2.掌握LCD的接口技术和编程方法。

3.掌握仪器监控程序设计和调试方法。

二、预习与参考

1. 结合ST7920 控制器系列中文图形液晶模块有关资料手册,详细了解ST7920接口设计技术。

2. 参考资料

1)实验板说明书

2)ST7920 控制器系列中文图形液晶模块资料手册

三、设计指标

利用实验板上提供的键盘电路,LCD显示电路,设计一人机界面,能实现以下功能:

1.LCD上显示“科技学院”

2.按键至少包括0-9的数字键

3.LCD显示按键值

4.电子钟显示:时,分,秒(选作)

四、实验要求

1.以单片机为核心,设计4*4非编码键盘及LCD的硬件电路,画出电路原理图。

2.设计4*4非编码键盘及LCD的控制软件,画出流程图,编写控制程序。

五、实验仪器设备和材料清单

单片机实验板、连接导线、ST7920图形液晶模块、PC机;

Keil c51软件

六、实验设计及实施的指导

1.实验课前布置实验任务,提出实验要求,预习相关资料,完成硬件草图设计和软件流程图备查。

2.经指导教师检查,预习达到要求者进入实验室实验。

3.按照设计的电路连线,构建键盘及显示系统,经检查无误方可进入下一步。

4.在指导教师指导下调试LCD显示程序。

5.在指导教师指导下调试按键程序。

6.综合调试直到满足设计要求。

七、实验成绩评定方法

实验成绩包括预习、实验完成质量、实验报告质量4部分组成,各部分所占比例分别为30%、30%、40%。

八、实验报告要求

1.实验报告格式:

一.实验名称

二.实验目的

三.实验容

四.设计思想

五.硬件设计

六.程序代码

七.参考文献

2.硬件电路原理图用PROTEL等软件画出。

附录:程序源代码:

附录 1

#include "reg51.h"

#include "intrins.h"

#define THCO 0xee

#define TLCO 0x0

#define uchar unsigned char

sbit CS =P1^0;

sbit SID=P1^1;

sbit SCLK=P1^2;

sbit B_light=P2^7; //背光

uchar tab[1] ={'0'} ;

int flag=0;

unsigned char Hour=0,Min=0,Sec=0;

void delay(unsigned int j)

{

unsigned char i;

do{

for(i=0;i<100;i++);

}while(j--);

}

void send_command(unsigned char command_data) //发送命令{

unsigned char i;

unsigned char i_data,temp_data1,temp_data2;

i_data=0xf8; //操作命令,控制指令

delay(10);

CS=1;

SCLK=0;

for(i=0;i<8;i++)

{

SID=(bit)(i_data&0x80);

SCLK=0;

SCLK=1;

i_data=i_data<<1;

}

i_data=command_data;

i_data&=0xf0; //送高

for(i=0;i<8;i++)

{

SID=(bit)(i_data&0x80);

SCLK=0;

SCLK=1;

i_data=i_data<<1;

}

i_data=command_data; //送低

//temp_data1=i_data&0xf0;

temp_data2=i_data&0x0f;

//temp_data1>>=4;

temp_data2<<=4;

//i_data=temp_data1|temp_data2;

i_data=temp_data2;

i_data&=0xf0;

for(i=0;i<8;i++)

{

SID=(bit)(i_data&0x80);

SCLK=0;

SCLK=1;

i_data=i_data<<1;

}

CS=0;

}

void send_data(unsigned char command_data) //发送数据{

unsigned char i;

unsigned char i_data,temp_data1,temp_data2;

i_data=0xfa; //操作命令,显示数据

delay(10);

CS=1;

for(i=0;i<8;i++)

{

SID=(bit)(i_data&0x80);

SCLK=0;

SCLK=1;

i_data=i_data<<1;

}

i_data=command_data;

i_data&=0xf0;

for(i=0;i<8;i++)

{

SID=(bit)(i_data&0x80);

SCLK=0;

SCLK=1;

i_data=i_data<<1;

}

i_data=command_data;

//temp_data1=i_data&0xf0;

temp_data2=i_data&0x0f;

//temp_data1>>=4;

temp_data2<<=4;

//i_data=temp_data1|temp_data2;

i_data= temp_data2;

i_data&=0xf0;

for(i=0;i<8;i++)

{

SID=(bit)(i_data&0x80);

SCLK=0;