LCD显示矩阵键盘输入的任意两位数
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
{
uchari;
uchari_dat;
i_dat=0xf8;
LCD_CS=1;
LCD_SCLK=0;
for(i=0;i<8;i++)
{
LCD_SID=(bit)(i_dat&0x80);
LCD_SCLK=0;
LCD_SCLK=1;
i_dat=i_dat<<1;
}
i_dat=cmd_dat;
i_dat&=0xf0;
#include<reg52.h>
#include<intrins.h>
#defineucharunsignedchar
#defineuintunsignedint
#defineNOP_nop_();
sbitLCD_CS=P1^0;//片选,高电平有效(RS)
sbitLCD_SID=P1^1;//串行数据输入端(R/W)
LCD_CS=1;
for(i=0;i<8;i++)
{
LCD_SID=(bit)(i_dat&0x80);
LCD_SCLK=0;
LCD_SCLK=1;
i_dat=i_dat<<1;
}
i_dat=cmd_dat;
i_dat&=0xf0;
for(i=0;i<8;i++)
{
LCD_SID=(bit)(i_dat&0x80);
{
dis_buf[1]=dis_buf[0];//第一个键值移位显示
dis_buf[0]=keynum;//获得第二个键值
display();//显示改变后的键值
while(keynum<10)//松手检测
{
keynum=getkey();
}
}
}
voidmain()
{
P1=0xff;
LCD_INIT();
LCD_SCLK=0;
LCD_SCLK=1;
i_dat=i_dat<<1;
}
i_dat=cmd_dat;
i_dat<<=4;
for(i=0;i<8;i++)
{
LCD_SID=(bit)(i_dat&0x80);
LCD_SCLK=0;
LCD_SCLK=1;
i_dat=i_dat<<1;
}
LCD_CS=0;
{
if(!(P2&k))//如果有键按下
return(row*4+col);//返回按键位置
k<<=1;
}
}
return99;//无键按下返回99
}
voidkey_dispos()//按键处理并显示程序
{
display();//显示第一行和初始键值
keynum=getkey();//获取键值
if(keynum<10)//
sbitLCD_SCLK=P1^2;//串行同步时钟,上升沿读取SID数据(E)
sbitLCD_PSB=P1^3;//并/串选择H并行L串行
sbitLCD_RST=P1^4;//复位,低电平有效
ucharkeynum;
ucharcodedis1[]={"请输入任意两位数"};
ucharcode
uchardis_buf[]={0,0};
send_cmd(0x01);//清除LCD显示内容
delay(5);
}
uchargetkey()
{
unsignedcharrow,col,k;
for(row=0;row<4;row++)//行值依次为0xfe,0xfd,0xfb,0xf7
{
P2=~(1<<row);
k=0x10;
for(col=0;col<4;col++)//列值扫描
send_dat(dis2[dis_buf[0]]);
}
delay(10);
}
voidLCD_INIT()
{
LCD_PSB=0;//串行方式操作
send_cmd(0x30);//基本指令操作
delay(5);
send_cmd(0x0c);//显示开,关游标,游标位置反白禁止
delay(5);
send_cmd(0x06);//光标右移,整体显示不移动
delay(5);
while(1)
{
key_dispos();
}
}
voiddisplay()
{
uinti;
send_cmd(0x80);//第一行显示
i=0;
while(dis1[i]!='\0')
{
send_dat(dis1[i]);
i++;
}
send_cmd(0x90);//第二行显示数据
send_dat(dis2[dis_buf[1]]);
LCD_SCLK=1;
i_dat=i_dat<<1;
}
LCD_CS=0;
delay(10);
}
/*写数据程序,指令由3个字节组成,第一个为写数据*/
/*第二个为数据高4位,第三个为数据低4位*/
voidsend_dat(ucharcmd_dat)
{
uchari;
uchari_dat;
i_dat=0xfa;
for(i=0;i<8;i++)
{
LCD_SID=(bit)(i_dat&0x80);
LCD_SCLK=0;
LCD_SCLK=1;
i_dat=i_dat<<1;
}
i_dat=cmd_dat;
i_dat<<=4;
for(i=0;i<8;i++)
{
LCD_SID=(bit)(i_dat&0x80);
LCD_SCLK=0;
/*******************来自百度文库**************************************
用矩阵按键输入任意两位数并显示在12684上。如先输入2,再输入5
液晶上显示25。用矩阵按键0-9共10个按键。LCD12864用串行方式操作,
如果用并行,请自行修改。
***********************************************************/
uchargetkey();
voiddisplay();
voiddelay(uintx)
{
uchari;
while(x--)
{
for(i=0;i<110;i++);
}
}
/*写指令程序,指令由3个字节组成,第一个为写指令*/
/*第二个为指令高4位,第三个为指令低4位*/
voidsend_cmd(ucharcmd_dat)
uchari;
uchari_dat;
i_dat=0xf8;
LCD_CS=1;
LCD_SCLK=0;
for(i=0;i<8;i++)
{
LCD_SID=(bit)(i_dat&0x80);
LCD_SCLK=0;
LCD_SCLK=1;
i_dat=i_dat<<1;
}
i_dat=cmd_dat;
i_dat&=0xf0;
#include<reg52.h>
#include<intrins.h>
#defineucharunsignedchar
#defineuintunsignedint
#defineNOP_nop_();
sbitLCD_CS=P1^0;//片选,高电平有效(RS)
sbitLCD_SID=P1^1;//串行数据输入端(R/W)
LCD_CS=1;
for(i=0;i<8;i++)
{
LCD_SID=(bit)(i_dat&0x80);
LCD_SCLK=0;
LCD_SCLK=1;
i_dat=i_dat<<1;
}
i_dat=cmd_dat;
i_dat&=0xf0;
for(i=0;i<8;i++)
{
LCD_SID=(bit)(i_dat&0x80);
{
dis_buf[1]=dis_buf[0];//第一个键值移位显示
dis_buf[0]=keynum;//获得第二个键值
display();//显示改变后的键值
while(keynum<10)//松手检测
{
keynum=getkey();
}
}
}
voidmain()
{
P1=0xff;
LCD_INIT();
LCD_SCLK=0;
LCD_SCLK=1;
i_dat=i_dat<<1;
}
i_dat=cmd_dat;
i_dat<<=4;
for(i=0;i<8;i++)
{
LCD_SID=(bit)(i_dat&0x80);
LCD_SCLK=0;
LCD_SCLK=1;
i_dat=i_dat<<1;
}
LCD_CS=0;
{
if(!(P2&k))//如果有键按下
return(row*4+col);//返回按键位置
k<<=1;
}
}
return99;//无键按下返回99
}
voidkey_dispos()//按键处理并显示程序
{
display();//显示第一行和初始键值
keynum=getkey();//获取键值
if(keynum<10)//
sbitLCD_SCLK=P1^2;//串行同步时钟,上升沿读取SID数据(E)
sbitLCD_PSB=P1^3;//并/串选择H并行L串行
sbitLCD_RST=P1^4;//复位,低电平有效
ucharkeynum;
ucharcodedis1[]={"请输入任意两位数"};
ucharcode
uchardis_buf[]={0,0};
send_cmd(0x01);//清除LCD显示内容
delay(5);
}
uchargetkey()
{
unsignedcharrow,col,k;
for(row=0;row<4;row++)//行值依次为0xfe,0xfd,0xfb,0xf7
{
P2=~(1<<row);
k=0x10;
for(col=0;col<4;col++)//列值扫描
send_dat(dis2[dis_buf[0]]);
}
delay(10);
}
voidLCD_INIT()
{
LCD_PSB=0;//串行方式操作
send_cmd(0x30);//基本指令操作
delay(5);
send_cmd(0x0c);//显示开,关游标,游标位置反白禁止
delay(5);
send_cmd(0x06);//光标右移,整体显示不移动
delay(5);
while(1)
{
key_dispos();
}
}
voiddisplay()
{
uinti;
send_cmd(0x80);//第一行显示
i=0;
while(dis1[i]!='\0')
{
send_dat(dis1[i]);
i++;
}
send_cmd(0x90);//第二行显示数据
send_dat(dis2[dis_buf[1]]);
LCD_SCLK=1;
i_dat=i_dat<<1;
}
LCD_CS=0;
delay(10);
}
/*写数据程序,指令由3个字节组成,第一个为写数据*/
/*第二个为数据高4位,第三个为数据低4位*/
voidsend_dat(ucharcmd_dat)
{
uchari;
uchari_dat;
i_dat=0xfa;
for(i=0;i<8;i++)
{
LCD_SID=(bit)(i_dat&0x80);
LCD_SCLK=0;
LCD_SCLK=1;
i_dat=i_dat<<1;
}
i_dat=cmd_dat;
i_dat<<=4;
for(i=0;i<8;i++)
{
LCD_SID=(bit)(i_dat&0x80);
LCD_SCLK=0;
/*******************来自百度文库**************************************
用矩阵按键输入任意两位数并显示在12684上。如先输入2,再输入5
液晶上显示25。用矩阵按键0-9共10个按键。LCD12864用串行方式操作,
如果用并行,请自行修改。
***********************************************************/
uchargetkey();
voiddisplay();
voiddelay(uintx)
{
uchari;
while(x--)
{
for(i=0;i<110;i++);
}
}
/*写指令程序,指令由3个字节组成,第一个为写指令*/
/*第二个为指令高4位,第三个为指令低4位*/
voidsend_cmd(ucharcmd_dat)