新手上路
- 积分
- 29
- 金钱
- 29
- 注册时间
- 2014-7-8
- 在线时间
- 0 小时
|
楼主 |
发表于 2014-7-22 21:22:45
|
显示全部楼层
总的来说就是先初始化,然后设置初始地址,然后就是在循环按键和显示
下面是程序
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
void init12864();
sbit E=P2^0;
sbit RS=P2^2;
sbit RW=P2^1;
uchar key,k;
uchar code table[16]={'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'} ;
void delay(uint m)//延时
{
uint i,j;
for(i=m;i>0;i--)
for(j=110;j>0;j--);
}
key_scan()
{
uchar t;
 3=0x7f; //第一行
t=P3;
t=t&0x0f;
delay(10);
if(t!=0x0f)
{
t=P3;
t=t&0x0f;
delay(10);
if(t!=0x0f)
{
delay(10);
t=P3;
switch(t)
{
case 0x77:key=0;break;
case 0x7b:key=1;break;
case 0x7d:key=2;break;
case 0x7e:key=3;break;
}
while(t!=0x0f)
{
t=P3;
t=t&0x0f;
}
}
}
 3=0xbf; //第二行
t=P3;
t=t&0x0f;
delay(10);
if(t!=0x0f)
{
t=P3;
t=t&0x0f;
delay(10);
if(t!=0x0f)
{
delay(10);
t=P3;
switch(t)
{
case 0xb7:key=4;break;
case 0xbb:key=5;break;
case 0xbd:key=6;break;
case 0xbe:key=7;break;
}
while(t!=0x0f)
{
t=P3;
t=t&0x0f;
}
}
}
 3=0xdf; //第三行
t=P3;
t=t&0x0f;
delay(10);
if(t!=0x0f)
{
t=P3;
t=t&0x0f;
delay(10);
if(t!=0x0f)
{
delay(10);
t=P3;
switch(t)
{
case 0xd7:key=8;break;
case 0xdb:key=9;break;
case 0xdd:key=10;break;
case 0xde:key=11;break;
}
while(t!=0x0f)
{
t=P3;
t=t&0x0f;
}
}
}
 3=0xef; //第四行
t=P3;
t=t&0x0f;
delay(10);
if(t!=0x0f)
{
t=P3;
t=t&0x0f;
delay(10);
if(t!=0x0f)
{
delay(10);
t=P3;
switch(t)
{
case 0xe7:key=12;break;
case 0xeb:key=13;break;
case 0xed:key=14;break;
case 0xee:key=15;break;
}
while(t!=0x0f)
{
t=P3;
t=t&0x0f;
}
}
}
return key;
}
void write_date(uchar date) //写显示数据
{
RS=1;
RW=0;
E=0;
delay(10);
E=1;
 1=date;
delay(10);
E=0;
}
void write_com(uchar com) //写指令
{
RS=0;
RW=0;
E=0;
delay(10);
E=1;
 1=com;
delay(10);
E=0;
}
void init12864() //初始化
{
delay(10);
write_com(0x30);//基本指令 ,8位数据
delay(10);
write_com(0x0c);//开显示
delay(10);
write_com(0x01);//清除显示
delay(10);
}
void set_ADD(uchar x,uchar y)//设置文字地址
{
uchar add;
if(x==0) x=0x80;
else if(x==1) x=0x90;
else if(x==2) x=0x88;
else x=0x98;
add=x+y;
write_com(add);
}
void display()
{
k=key_scan();
write_date(table[k]);
}
void main()
{
delay(10);
init12864(); //初始化
delay(10);
set_ADD(1,0);//设置地址
while(1)
{
delay(20);
display();
}
} |
|