標題: 求問?控制8255完成鍵盤掃描及數(shù)碼顯示 [打印本頁]
作者: 安迪 時間: 2016-12-1 14:40
標題: 求問?控制8255完成鍵盤掃描及數(shù)碼顯示
控制8255完成鍵盤掃描及數(shù)碼顯示
鍵盤采用4×4鍵盤,每個數(shù)碼管顯示值可為0~F16個數(shù)。鍵盤編號為0~F,當按下其中一個按鍵時,將該按鍵對應的編號在一個數(shù)碼管上顯示出來,當再按下一個按鍵時,便將這個按鍵的編號在下一個數(shù)碼管上顯示出來,數(shù)碼管上可以顯示最近6次按下的按鍵編號。
參考程序#include "Absacc.h"
#define C8255_A XBYTE[0x7F00] //8255端口地址定義
#define C8255_B XBYTE[0x7F01]
#define C8255_C XBYTE[0x7F02]
#define C8255_CON XBYTE[0x7F03]
//共陰極七段碼
unsigned char a[] = {0x3f, 0x06, 0x5b,0x4f, 0x66, 0x6d, 0x7d, 0x07,
0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79,0x71};
unsigned char b[] = {0x00, 0x00, 0x00,0x00};
unsigned char key_down;
unsigned char key_value;
unsigned char key_count;
void delay(unsigned int time)
{
unsignedint i;
for(i=0;i<time; i++);
}
void keyscan() //按鍵掃描函數(shù)
{
unsignedchar cc;
C8255_A= 0x00; //X1~X4置0
cc= C8255_C; //得到Y1~Y4的值
key_down= (~cc) & 0x0f;
}
void display() //顯示函數(shù)
{
unsignedchar i, j = 0xF7;
for(i=0;i<4; i++)
{
C8255_A= j;
C8255_B= a[b]; //查表輸出顯示
delay(0x100);
j>>= 1;
}
}
void clear()
{
C8255_B= 0x00;
}
void writebuffer()
{
b[key_count]= key_value;
key_count--;
if(key_count== -1)
key_count= 3;
display();
clear();
keyscan();
while(key_down) //鍵盤消抖
{
display();
clear();
keyscan();
}
}
void getkey() //得到按鍵值
{
unsignedchar value;
unsignedchar i, j = 0xFE;
for(i=0;i<4; i++)
{
C8255_A= j;
value= C8255_C;
if(!(value& 0x01))
{
key_value= i + 0;
writebuffer();
return;
}
if(!(value& 0x02))
{
key_value= i + 4;
writebuffer();
return;
}
if(!(value& 0x04))
{
key_value= i + 8;
writebuffer();
return;
}
if(!(value& 0x08))
{
key_value= i + 12;
writebuffer();
return;
}
j<<= 1;
}
}
void main()
{
C8255_CON= 0x81; //8255初始化
key_count= 3;
while(1)
{
display(); //顯示
clear(); //清屏
keyscan(); //按鍵掃描
if(key_down) //判是否有鍵按下
{
display();
delay(0x100);
clear();
keyscan();
if(key_down)
{
getkey(); //得到按鍵值
}
}
}
}
14.png (23.3 KB, 下載次數(shù): 61)
下載附件
2021-9-29 10:11 上傳
這是我根據(jù)程序畫的仿真圖,但是現(xiàn)象出不來,求路過的各路大神幫我看一下程序和電路圖。。。
作者: gemxie 時間: 2018-3-16 22:24
我也需要這個。。!
歡迎光臨 (http://www.torrancerestoration.com/bbs/) |
Powered by Discuz! X3.1 |