基于C51单片机的键盘及LCD显示
- 格式:doc
- 大小:38.50 KB
- 文档页数:8
基于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;