初级会员 
  
	- 积分
 - 142
 
        - 金钱
 - 142 
 
       - 注册时间
 - 2016-9-11
 
      - 在线时间
 - 22 小时
 
 
 
 | 
 
1金钱 
最近想用51单片机上的矩阵键盘做个简单的计算器,输入的数字或符号显示在LCD1602上。但是我想不到用什么办法可以连续输入数字显示在LCD1602上,请各位大神指教指教啊!!! 
这是我的主函数代码: 
#include <reg51.h>  
#include <stdio.h> 
#include "lcd.h" 
#include <intrins.h> 
#define uchar unsigned char 
#define uint unsigned int 
#define CHECK_BUSY 
//--定义使用的IO口--//  
#define GPIO_KEY P1 
//--定义全局变量--// 
//unsigned char PuZh[17]="The key value is:"; 
unsigned char KeyValue; 
unsigned char LED; 
//用来存放读取到的键值 
//--声明全局函数--// 
void KeyScan(void); 
unsigned char KeyPro(void); 
void Delay10ms(unsigned int c);   //误差 0us 
void KeyScan(void) 
{ 
 char a = 0; 
 GPIO_KEY=0x0f; 
 if(GPIO_KEY!=0x0f)//读取按键是否按下 
 { 
  Delay10ms(20);//延时20ms进行消抖 
  if(GPIO_KEY!=0x0f)//再次检测键盘是否按下 
  { 
    
   //测试列 
   GPIO_KEY=0XF0; 
   switch(GPIO_KEY) 
   { 
    case(0Xe0): KeyValue=1;break; 
    case(0Xd0): KeyValue=2;break; 
    case(0Xb0): KeyValue=3;break; 
    case(0X70): KeyValue=4;break; 
   } 
   //测试行 
   GPIO_KEY=0X0F; 
   switch(GPIO_KEY) 
   { 
    case(0X0e): KeyValue=KeyValue;break; 
    case(0X0d): KeyValue=KeyValue+4;break; 
    case(0X0b): KeyValue=KeyValue+8;break; 
    case(0X07): KeyValue=KeyValue+12;break; 
   } 
   while((a<50) && (GPIO_KEY!=0xf0))  //检测按键松手检测 
   { 
    Delay10ms(1); 
    a++; 
   } 
  } 
 } 
} 
unsigned char KeyPro(void) 
{  
 KeyScan(); 
 switch(KeyValue) 
 { 
   case 1:return '1';break;//按下相应的键显示相对应的码值 
   case 2:return '2';break; 
   case 3:return '3';break; 
   case 4:return '+';break; 
   case 5:return '4';break; 
   case 6:return '5';break; 
   case 7:return '6';break; 
   case 8:return '-';break; 
   case 9:return '7';break; 
   case 10:return '8';break; 
   case 11:return '9';break; 
   case 12:return 'x';break; 
   case 13:return '0';break; 
   case 14:return '.';break; 
   case 15:return '=';break; 
   case 16:return '/';break; 
   default:return 0xff;break; 
 } 
} 
main() 
{  
   unsigned char num; 
 unsigned char s; 
 unsigned int i, j; 
 LcdInit();     
 
 while(1) 
 { 
        
     Delay10ms(10);  
     GPIO_KEY = 0x0f;  
    num = KeyPro(); 
     if(GPIO_KEY != 0x0f)  
      { 
          LcdWriteCom(0x80 + 0x40); 
       LcdWriteData(num); 
      } 
      
   
       
    } 
} 
现在的效果是只能在原地显示数字,如何连续的显示呢? 
 |   
 
 
最佳答案
查看完整内容[请看2#楼] 
因为你的每次while(1)循环都重新写了一次命令LcdWriteCom(0x80 + 0x40);  这个就导致了每次都在一个地方显示  但是你去掉以后  显示32次后  会出现乱码  建议你可以定位到具体的某一行某一列显示 
 
 
 
 
 
 
 |