单片机键盘输入问题

不知道怎样写在键盘输入1在接着输2,在数码管上就显示12(就是不知道怎样用键盘输入两个数且在数码管上显示),不知大家明白没?希望大家帮忙用C语写一个

这是单片机入门最基本问题之一,建议看看单片机入门的书,例如单片机C语言等。
需要注意的是,绝大多数书籍和网上的程序都是原理类型的源代码,可靠、实用的代码一般是不会轻易发表的。这需要你在编程实践中不断体会、理解,最终编出自己的实用代码。
目前流行的键盘处理代码一般分为键检测、抗干扰滤波、键值分析和命令处理几个子程序,而且这些程序全部要求能够与其它程序一道,满足高速准实时处理任务要求。所以在代码精简的同时,需要严格控制程序的执行时间,以免影响其他程序的响应速度。
一般原理上的键盘检测和抗干扰程序很多采用最原始的发现按键后立即软件延迟10ms,此时单片机不得不在此等待,不能执行其他代码,这样的程序只能称为原理程序。它的问题是:其一,大量占有单片机时间,但是不能有效执行代码;单片机的效率无法发挥,特别是高速单片机更明显;其二,这样的抗干扰处理不可靠,容易出现按一次键,得到多次按键的多动情况。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-10-25
首先你有几个数码管?
其次你的数码管怎么接的?
然后我再看看程序要怎么写。
第2个回答  2009-10-25
明白你的意思,建议到编程区发帖!
第3个回答  2009-10-25
以下程序如需电路图,请给我留言

/************************************************************
*Author:findmu
*Found Date:2009-01-15
*Revision:v1.0.0
*Modify Date:
*E-mail:[email protected]
*function:Display the key value
************************************************************/
#include "reg52.h"

sbit LED=P1^0; //LED锁存器
sbit DUAN=P1^1; //数码管段选锁存器
sbit WEI=P1^2; //数码管位选锁存器

//**********************数码管显示函数************************
void display(unsigned char W, unsigned char D)
//数码管显示数字,W显示数字,D为显示数字
{
unsigned char D_Code[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x67,
/*A*/0x77,0x7C,0x39,0x5E,0x79,0x71,/*空白*/0x00};
unsigned char W_Code[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};

P0=0xFF;
WEI=1;
P0=W_Code[W];;
WEI=0;
P0=0x00;
DUAN=1;
P0=D_Code[D];
DUAN=0;
}

//**********************延迟函数,1ms************************
void delay(unsigned int ms)
{
unsigned char i,j;
for(i=0;i<ms;i++)
for(j=0;j<100;j++)
;
}

//*********************键盘扫描函数*************************
unsigned char keyscan(void)
{
unsigned char i,msk,keyin;
unsigned char num=16;
msk=1;

for(i=0;i<4;i++)
{
P3=~msk;
msk<<=1;
keyin=P3;
if((keyin&0xF0)!=0xF0)
{
delay(5);
keyin=P3;
if((keyin&0xF0)!=0xF0)
{
keyin=P3;
keyin>>=4;
switch(keyin)
{
case 0x0E: num=0+4*i; break;
case 0x0D: num=1+4*i; break;
case 0x0B: num=2+4*i; break;
case 0x07: num=3+4*i; break;
}
while(keyin!=0xF0)
{
keyin=P3;
keyin=keyin&0xF0;
delay(10);
}
}
}
}
return num;
}

void main()
{
unsigned char i,j,n;
unsigned char a,k;
unsigned char shu[8];
LED=0;

n=0;

while(1)
{
a=keyscan();
if(a!=16)
{
if(!a&&!i)
;
else
{
shu[i]=a;
n=i;
i++;
if(i==8)
{
i=0;
}
}
}
k=n;
for(j=0;j<=n;j++)
{
display(j,shu[k]);
delay(5);
k--;
}
}
}
相似回答