基于51单片机-5110显示的计算器:最近在做基于51单片机-5110显示的计算器 这样一个小项目,由于水平有限,遇到一些问题,愿与大家一同探讨!
在显示部分:由矩阵键盘扫描子程序返回的 字符型 数据,将其写入5110时,总会出现刷屏的现象,也就是按一下键,整个屏幕上都是那个字符,而实际上我们只想要一个,然后等待下一个字符。这个问题一直未能解决。恳请大家帮帮忙,分析一下程序。(等做成以后与大家分享) ?程序如下:
#include "nokia_5110.h"
#define uchar unsigned char
#define uint unsigned int
int judge_hitkey()
{
uchar temp;
P1=0x0f;
temp=P1;
while(1)
{
if(temp==0x0f)
return (0);
else
{
delay_nms(20);
temp=P1;
if(temp!=0x0f)
return (1);
else
return (0);
}
}
}
uint manage_key()
{
uchar keycode,scancode;
uchar n;
// while(judge_hitkey==0); ?//等待有键按下
scancode=0xef;
P1=scancode;
keycode=P1;
while( (keycode&0x0f) == 0x0f )
{
scancode=(scancode<<1 | 0x0f);
P1=scancode;
keycode=P1;
}
if( (keycode&0x0f)!=0x0f )
{
switch(keycode)
{
case 0xee:n='1';break;
case 0xed:n='2';break;
case 0xeb:n='3';break;
case 0xe7:n='4';break;
case 0xde:n='5';break;
case 0xdd:n='6';break;
case 0xdb:n='7';break;
case 0xd7:n='8';break;
case 0xbe:n='9';break;
case 0xbd:n='0';break;
case 0xbb:n='*';break;
case 0xb7:n='/';break;
case 0x7e:n='+';break;
case 0x7d:n='-';break;
case 0x7b:n='?';break;
case 0x77:n='!';break;
}
}
while(judge_hitkey==1); ? ? ? ? ? ? ? ? ?//等待松开按键
return (n);
}
void main()
{
uchar c;
LCD_init(); ? ?//初始化液晶 ? ?
LCD_clear();
delay_nms(50);
while(1)
{
c=manage_key();
LCD_write_char(c);
}