是不是和下面的类似:
http://hi.baidu.com/do_sermon/item/44fd5ad18b4abb92270ae76f
----
楼主的题目,也没有说清电路,也没有指定语言。
前面,问了一次,楼主也没有反应。
下面,用C语言,编程实现:
//=======================================================
#include
char disp_buff [4] = {0}; //显示缓冲单元.
//-------------------------------------------------------
delay(unsigned int t) //1ms延时函数
{
unsigned int i, j;
for(i = 0; i < t; i++) for(j = 0; j < 120; j++);
}
//-------------------------------------------------------
void display(void) //显示函数
{
char code table[] = { //共阳段码 0 ~ 9
0xC0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90};
char i;
for (i = 0; i < 4; i++) {
SBUF = table[disp_buff [i]];//输出段码
while(!TI);
TI = 0;
}
}
//-------------------------------------------------------
unsigned char keyboard(void) //扫描键盘函数
{
unsigned char i, tmp1, tmp2;
for(i = 0; i < 4; i++) {
P1 = ~(1 << i); //i = 0 : P1 = 1111 1110
tmp1 = P1 & 0xF0;
if(tmp1 != 0xF0) { //有键按下
delay(10); //延时
tmp2 = P1 & 0xF0; //再读
if(tmp1 == tmp2) { //两次相等,并非抖动
if (tmp1 == 0x70) return i * 4 + 0; //键值
if (tmp1 == 0xb0) return i * 4 + 1;
if (tmp1 == 0xd0) return i * 4 + 2;
if (tmp1 == 0xe0) return i * 4 + 3;
} } }
return 16; //没有键按下
}
//-------------------------------------------------------
void main(void)
{
unsigned char key;
display(); //初始显示.
while(1) { //无限循环.
key = keyboard(); //读出一遍键盘.
if (key < 10) { //如果0~9
//--------------------进行按键处理.
disp_buff [3] = disp_buff [2];
disp_buff [2] = disp_buff [1];
disp_buff [1] = disp_buff [0];
disp_buff [0] = key;
display(); //显示.
//--------------------处理结束,去等待按键释放.
while(key < 16) key = keyboard();//等待按键释放.
} } //无限循环.
}
//=======================================================
仿真截图如下: