一、實驗目的 1.學習矩陣式鍵盤工作原理 2.學習矩陣式接口的電路設計和程序設計 二、實驗內容與結果 1.USB 線 2.單片機最小系統實驗教學模塊 3.矩陣式鍵盤實驗模塊 4.動態掃描數碼管顯示模塊 題目: 在矩陣式鍵盤中的某個鍵被按下時,8 位 LED 動態顯示器上最低位顯示該鍵對應的字符,以前的字符向高位推進 1 位(即類似于計算器)。 程序: (1)源代碼 //頭文件包含 #include <reg51.h> #include <intrins.h> //宏定義 #define uchar unsigned char #define uint unsigned int //共陰極數碼管0-F的段碼列表,表中最后一個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; //關閉數碼管的段選 P0=0x00; //關閉數碼管的位選 P2=0xff; while(1) { num=kscan(); if(num!=16) { for(k=1;k<8;k++) { //顯示向前移動一位 Display_Buffer[k-1]=Display_Buffer[k]; } //最低位顯示當前按鍵值 Display_Buffer[7]=num; num=16; } //循環顯示8位 for(k=0;k<8;k++) { m=_crol_(m,1); P2=m; P0=table[Display_Buffer[k]]; DelayM(2); } }
} 附件包含protues原理圖和代碼
|