51单片机:关于1602液晶和矩阵键盘的显示问题,请高手解决!!
我最近在做液晶的实验,已经做出了万年历,但是在做计算器的时候遇到了一点问题:我通过4X4矩阵键盘输入数字,输入单个的数字可以显示,但是输入多个数字,比如输入“325.4”...
我最近在做液晶的实验,已经做出了万年历,但是在做计算器的时候遇到了一点问题:我通过4X4矩阵键盘输入数字,输入单个的数字可以显示,但是输入多个数字,比如输入“325.4”时,不知道程序该怎么写了,尝试了多种办法都不行,以下是我用的显示函数:
void Lcd_PrintChar(unsigned char x, unsigned char y, unsigned char date) (x,y)
{
write_PlaceXY(x,y);
write_data(date);
}
void Lcd_PrintString(unsigned char x,unsigned char y,unsigned char *date)
{
write_PlaceXY(x,y); //写地址
while(*date)
{
write_data(*date);//写字符串
date++; //指针地址加1
}
}
void write_PlaceXY(unsigned char x, unsigned char y)//指定当前写字符的位置
{
unsigned char address;
if(y==0) //行位置
{
address=0x80 + x;//列位置
}
if(y==1)
{
address=0x80+0x40 + x;
}
write_com(address);//写地址
}
void main()
{
init();
Lcd_PrintString(5,0,"lcd text");
Lcd_PrintString(0,1,"num:");
while(1)
{
bb=keyscan();
if(bb!=0)
{
Lcd_PrintChar(4,1,bb);
}
}
}
这个主函数里可以显示单个的数字,但是怎么才能连续输入数字呢?请高手帮忙解决一下,感激不尽啊!!!! 展开
void Lcd_PrintChar(unsigned char x, unsigned char y, unsigned char date) (x,y)
{
write_PlaceXY(x,y);
write_data(date);
}
void Lcd_PrintString(unsigned char x,unsigned char y,unsigned char *date)
{
write_PlaceXY(x,y); //写地址
while(*date)
{
write_data(*date);//写字符串
date++; //指针地址加1
}
}
void write_PlaceXY(unsigned char x, unsigned char y)//指定当前写字符的位置
{
unsigned char address;
if(y==0) //行位置
{
address=0x80 + x;//列位置
}
if(y==1)
{
address=0x80+0x40 + x;
}
write_com(address);//写地址
}
void main()
{
init();
Lcd_PrintString(5,0,"lcd text");
Lcd_PrintString(0,1,"num:");
while(1)
{
bb=keyscan();
if(bb!=0)
{
Lcd_PrintChar(4,1,bb);
}
}
}
这个主函数里可以显示单个的数字,但是怎么才能连续输入数字呢?请高手帮忙解决一下,感激不尽啊!!!! 展开
2个回答
展开全部
给你个简单的思路:
你上面已经写了个 Lcd_PrintString()函数
你可以定义一个显示缓存数组 digit[N]
还有一个芹好输入位置扒备计数嫌此铅值 n;
bb=keyscan();
if(bb!=0)
{
digit[n]=bb;
digit[++n]='\0'; //初始化,及长度限制之类的你就自己按自己的要求来做
Lcd_PrintString(4,1,digit);
}
你上面已经写了个 Lcd_PrintString()函数
你可以定义一个显示缓存数组 digit[N]
还有一个芹好输入位置扒备计数嫌此铅值 n;
bb=keyscan();
if(bb!=0)
{
digit[n]=bb;
digit[++n]='\0'; //初始化,及长度限制之类的你就自己按自己的要求来做
Lcd_PrintString(4,1,digit);
}
更多追问追答
追问
好像还不行啊,那个Lcd_PrintString()函数,就这句: Lcd_PrintString(4,1,digit);
已经把它固定在了(4,1)那个位置,所以输入数字时,位置还是不变,我把程序写进去显示不正常了,还有更好的办法吗???
追答
4,1是起始位置嘛,输入第一个数1 显示1
输入第二个数2 显示12
输入第三个数3 显示123
显示不正常怎么个不正常法
展开全部
参考如下困数即可:
http://zhidao.baidu.com/question/235395309.html
Key_Value = GetKey();
if (Key_Value < 10) {
sec %= 10;
sec = sec * 10 + Key_Value;
}
Display(sec); //显旅败示汪镇首
http://zhidao.baidu.com/question/235395309.html
Key_Value = GetKey();
if (Key_Value < 10) {
sec %= 10;
sec = sec * 10 + Key_Value;
}
Display(sec); //显旅败示汪镇首
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询