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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
}
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=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;//送高
1.实验报告格式:
一.实验名称
二.实验目的
三.实验内容
四.设计思想
五.硬件设计
六.程序代码
七.参考文献
2.硬件电路原理图用PROTEL等软件画出。
附录:程序源代码:
附录1
#include "reg51.h"
#include "intrins.h"
#define THCO 0xee
#define TLCO 0x0
3.按照设计的电路连线,构建键盘及显示系统,经检查无误方可进入下一步。
4.在指导教师指导下调试LCD显示程序。
5.在指导教师指导下调试按键程序。
6.综合调试直到满足设计要求。
七、实验成绩评定方法
实验成绩包括预习、实验完成质量、实验报告质量4部分组成,各部分所占比例分别为30%、30%、40%。
八、实验报告要求
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;
{
unsigned char hi=0;uchar temp_pin;//字母显示
if(x==0) send_command(0x80+y);
else if(x==1) send_command(0x90+y);
else if(x==2) send_command(0x88+y);
else if(x==3) send_command(0x98+y);
for(hi=0;hi<how;hi++)
{
send_data(*(stri+hi));
}
}
void key(void)
{
unsigned char temp_pin ;
P0=0xf0;//低四位接键盘行,高四位为键盘的列线
if((P0&0xf0)!=0xf0)
{
delay(10);
if((P0&=0xf0)!=0xf0) //消抖
2)ST7920控制器系列中文图形液晶模块资料手册
三、设计指标
利用实验板上提供的键盘电路,LCD显示电路,设计一人机界面,能实现以下功能:
1.LCD上显示“重庆科技学院”
2.按键至少包括0-9的数字键
3.LCD显示按键值
4.电子钟显示:时,分,秒(选作)
四、实验要求
1.以单片机为核心,设计4*4非编码键盘及LCD的硬件电路,画出电路原理图。
send_command(0x06); //点设定:显示字符/光标从左到右移位,DDRAM地址加1
send_command(0x0c); //显示设定:开显示,显示光标,当前显示位反白闪动
send_command(0x04); //显示设定:开显示,显示光标,当前显示位反白闪动
send_command(0x01); //清DDRAM
#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;
default:break;
}
P0=0xfb;
temp_pin=(P0&0xf0);
switch (temp_pin)
{
case 0xe0:tab[0]='7';break;
case 0xd0:tab[0]='6';break;
case 0xb0:tab[0]='5';break;
case 0x70:tab[0]='4';break;
{
unsigned char hi=0;//汉字显示
if(x==0) send_command(0x80+y);//
else if(x==1) send_command(0x90+y);
else if(x==2) send_command(0x88+y);
else if(x==3) send_command(0x98+y);
send_command(0x02); //DDRAM地址归位
send_command(0x80); //把显示地址设为0X80,即为第一行的首位
}
void DispHanzi(unsigned char x,unsigned char y,unsigned char how,unsigned char *stri)
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 InitLCD() //液晶初始化
{
send_command(0x30); //功能设置:一次送8位数据,基本指令集
基于C51单片机的键盘及LCD显示
一、实验目的
1.掌握矩阵式键盘的数字键和功能键的编程方法。
2.掌握LCD的接口技术和编程方法。
3.掌握仪器监控程序设计和ห้องสมุดไป่ตู้试方法。
二、预习与参考
1.结合ST7920控制器系列中文图形液晶模块有关资料手册,详细了解ST7920接口设计技术。
2. 参考资料
1)实验板说明书
default:break;
}
P0=0xf7;
temp_pin=(P0&0xf0);
switch (temp_pin)
{
case 0xe0:tab[0]='3';break;
case 0xd0:tab[0]='2';break;
case 0xb0:tab[0]='1';break;
case 0x70:tab[0]='0';break;
}
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++)
{
P0=0xfe;
temp_pin=(P0&0xf0);
switch (temp_pin)//对按下的键进行判断
{
case 0xe0:tab[0]='F';break;
case 0xd0:tab[0]='E';break;
case 0xb0:tab[0]='D';break;
case 0x70:tab[0]='C';break;
TH0=THCO;
TL0=TLCO;
count++;
if(count>=200)//秒计时,定时器定时5ms,计200次为一秒
{
count=0;
Sec++; flag=1;
if(Sec>=60)//分计时
{
Sec=0;
Min++;
if(Min>=60)//时计时
{
Min=0; Hour++;
if(Hour>=24)Hour=0;
time[3]=Min/10+0x30;
time[4]=Min%10+0x30;
time[6]=Sec/10+0x30;
time[7]=Sec%10+0x30;
DispZimu(3,2,8,time);
}
}
}
void timer0() interrupt 1
{
static unsigned char count=0 ;
2.设计4*4非编码键盘及LCD的控制软件,画出流程图,编写控制程序。
五、实验仪器设备和材料清单
单片机实验板、连接导线、ST7920图形液晶模块、PC机;
Keil c51软件
六、实验设计及实施的指导
1.实验课前布置实验任务,提出实验要求,预习相关资料,完成硬件草图设计和软件流程图备查。
2.经指导教师检查,预习达到要求者进入实验室实验。
default:break;
}
P0=0xfd;
temp_pin=(P0&0xf0);
switch (temp_pin)
{
case 0xe0:tab[0]='B';break;
case 0xd0:tab[0]='A';break;
case 0xb0:tab[0]='9';break;
case 0x70:tab[0]='8';break;
}
}
}
}
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;
{
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;
default:break;
}
}
}
}
main()
{unsigned char time[8]={"00:00:00"};
TMOD=0x11;
TH0=THCO;
TL0=TLCO;
TR0=1;
ET0=1;
EA=1;
InitLCD();
B_light=0;
DispHanzi(0,1,6,"重庆科技学院");
for(hi=0;hi<how;hi++)
{
send_data(*(stri+hi*2));
send_data(*(stri+hi*2+1));
}
}
void DispZimu(unsigned char x,unsigned char y,unsigned char how,unsigned char *stri)
DispHanzi(2,2,4,"北京时间");
DispZimu(3,2,8,time);
while(1)
{key();
DispZimu(1,4,1,tab);
if(flag==1)
{
flag=0;
time[0]=Hour/10+0x30;//数字转为ASCCII值进行显示
time[1]=Hour%10+0x30;
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;
相关文档
最新文档