標(biāo)題: 51單片機(jī)矩陣式鍵盤輸入實(shí)驗(yàn) [打印本頁]
作者: zxm870973 時(shí)間: 2020-6-15 21:46
標(biāo)題: 51單片機(jī)矩陣式鍵盤輸入實(shí)驗(yàn)
一、實(shí)驗(yàn)?zāi)康?/font>
1.學(xué)習(xí)矩陣式鍵盤工作原理
2.學(xué)習(xí)矩陣式接口的電路設(shè)計(jì)和程序設(shè)計(jì)
二、實(shí)驗(yàn)內(nèi)容與結(jié)果
1.USB 線
2.單片機(jī)最小系統(tǒng)實(shí)驗(yàn)教學(xué)模塊
3.矩陣式鍵盤實(shí)驗(yàn)?zāi)K
4.動態(tài)掃描數(shù)碼管顯示模塊
題目: 在矩陣式鍵盤中的某個(gè)鍵被按下時(shí),8 位 LED 動態(tài)顯示器上最低位顯示該鍵對應(yīng)的字符,以前的字符向高位推進(jìn) 1 位(即類似于計(jì)算器)。
程序:
(1)源代碼
//頭文件包含
#include <reg51.h>
#include <intrins.h>
//宏定義
#define uchar unsigned char
#define uint unsigned int
//共陰極數(shù)碼管0-F的段碼列表,表中最后一個(gè)0x00是顯示為暗的斷碼表
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x53,0x79,0x71,0x00};
uchar Display_Buffer[]={16,16,16,16,16,16,16,16};
void DelayM(uint x)
{
uchar t;
while(x--)
{
for(t=0;t<120;t++);
}
}
uchar kscan()
{
uchari,temp,num=16;
for(i=0;i<4;i++)
{
//逐行掃描
P1=_cror_(0x7f,i);
//讀取鍵值
temp=P1;
//讀取鍵值,屏蔽高四位行值
temp=temp&0x0f;
//低四位列值
if(temp!=0x0f)
{
DelayM(5);
temp=P1;
temp=temp&0x0f;
if(temp!=0x0f)
{
temp=P1;
switch(temp)
{
case0x77:num=0;break;
case0x7b:num=1;break;
case0x7d:num=2;break;
case0x7e:num=3;break;
case0xb7:num=4;break;
case0xbb:num=5;break;
case0xbd:num=6;break;
case0xbe:num=7;break;
case0xd7:num=8;break;
case0xdb:num=9;break;
case0xdd:num=10;break;
case0xde:num=11;break;
case0xe7:num=12;break;
case0xeb:num=13;break;
case0xed:num=14;break;
case0xee:num=15;break;
default:break;
}
}
//等待按鍵釋放
while((temp&0x0f)!=0x0f)
{
temp=P1;
temp=temp&0x0f;
}
}
DelayM(5);
}
returnnum;
}
void main()
{
uchark,m=0x7f,num;
//關(guān)閉數(shù)碼管的段選
P0=0x00;
//關(guān)閉數(shù)碼管的位選
P2=0xff;
while(1)
{
num=kscan();
if(num!=16)
{
for(k=1;k<8;k++)
{
//顯示向前移動一位
Display_Buffer[k-1]=Display_Buffer[k];
}
//最低位顯示當(dāng)前按鍵值
Display_Buffer[7]=num;
num=16;
}
//循環(huán)顯示8位
for(k=0;k<8;k++)
{
m=_crol_(m,1);
P2=m;
P0=table[Display_Buffer[k]];
DelayM(2);
}
}
}
附件包含protues原理圖和代碼
-
-
實(shí)驗(yàn)6.zip
2020-6-15 21:46 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
42.72 KB, 下載次數(shù): 20, 下載積分: 黑幣 -5
歡迎光臨 (http://www.torrancerestoration.com/bbs/) |
Powered by Discuz! X3.1 |