当前位置:文档之家› 基于C51单片机的键盘及LCD显示

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

{
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);
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;
}
}
}
{
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;
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 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&=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位数据,基本指令集
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;
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;
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 ;
TH0=THCO;
TL0=TLCO;
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;
基于C51单片机的键盘及LCD显示
一、实验目的
1.掌握矩阵式键盘的数字键和功能键的编程方法。
2.掌握LCD的接口技术和编程方法。
3.掌握仪器监控程序设计和调试方法。
二、预习与参考
1.结合ST7920控制器系列中文图形液晶模块有关资料手册,详细了解ST7920接口设计技术。
2. 参考资料
1)实验板说明书
2.设计4*4非编码键盘及LCD的控制软件,画出流程图,编写控制程序。
五、实验仪器设备和材料清单
单片机实验板、连接导线、ST7920图形液晶模块、PC机;
Keil c51软件
六、实验设计及实施的指导
1.实验课前布置实验任务,提出实验要求,预习相关资料,完成硬件草图设计和软件流程图备查。
2.经指导教师检查,预习达到要求者进入实验室实验。
send_command(0x02); //DDRAM地址归位
send_command(0x80); //把显示地址设为0X80,即为第一行的首位
}
void DispHanzi(unsigned char x,unsigned char y,unsigned char how,unsigned char *stri)
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;
time[3]=Min/10+0x30;
default:break;
}
}
}
}
main()
{unsigned char time[8]={"00:00:00"};
TMOD=0x1ቤተ መጻሕፍቲ ባይዱ;
TH0=THCO;
TL0=TLCO;
TR0=1;
ET0=1;
EA=1;
InitLCD();
B_light=0;
DispHanzi(0,1,6,"重庆");
DispHanzi(2,2,4,"北京时间");
1.实验报告格式:
一.实验名称
二.实验目的
三.实验内容
四.设计思想
五.硬件设计
六.程序代码
七.参考文献
2.硬件电路原理图用PROTEL等软件画出。
附录:程序源代码:
附录1
#include "reg51.h"
#include "intrins.h"
#define THCO 0xee
#define TLCO 0x0
}
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;//送高
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;
}
2)ST7920控制器系列中文图形液晶模块资料手册
三、 设计指标
利用实验板上提供的键盘电路,LCD显示电路,设计一人机界面,能实现以下功能:
相关主题