|
发表于 2012-4-17 16:53:47
|
显示全部楼层
利用两个普通的IO口作为按键接口就行了,我大致写了个程序,不知合不合你的要求:
#include "reg51.h"
#define uchar unsigned char
#define uint unsigned int
sbit rs = P3^5;
//sbit rw = P2^6;
sbit en = P3^4;
sbit key1=P3^6;
sbit key2=P3^7;
unsigned char code str1[]={"2011-04-13"};
unsigned char code str2[]={"WANGHAIMING!"};
void delay_1ms(unsigned int xms)
{
unsigned int i,j;
for(i=0;i<xms;i++)
for(j=0;j<110;j++);
}
void wr_com(unsigned char com) //写指令
{
delay_1ms(1);
rs=0;
//rw=0;
en=0;
P0=com;
delay_1ms(1);
en=1;
delay_1ms(1);
en=0;
}
void wr_dat(unsigned char dat) //写数据
{
delay_1ms(1);
rs=1;
//rw=0;
en=0;
P0=dat;
delay_1ms(1);
en=1;
delay_1ms(1);
en=0;
}
void lcd_init()
{
delay_1ms(15);
wr_com(0x38); delay_1ms(5);
wr_com(0x08); delay_1ms(5);
wr_com(0x01); delay_1ms(5);
wr_com(0x06); delay_1ms(5);
wr_com(0x0c); delay_1ms(5);
}
void displcd(unsigned char *p)
{
while(*p!='\0')
{
wr_dat(*p);
p++;
delay_1ms(1);
}
}
void keyscan()
{
uchar keynum=0;
if(key1==0)
{
delay_1ms(5);
if(key1==0)
{
keynum=1;
}
while(!key1);
}
if(key2==0)
{
delay_1ms(5);
if(key2==0)
{
keynum=2;
}
while(!key2);
}
switch(keynum)
{
case 1:wr_com(0x01);wr_com(0x80);displcd(str1); break;
case 2:wr_com(0x01);wr_com(0x80);displcd(str2); break;
}
}
void main()
{
lcd_init();
wr_com(0x80);
displcd(str1);
while(1)
{
keyscan();
}
} |
|