|
實驗?zāi)康?/strong>:
學(xué)會矩陣鍵盤的檢測,掌握數(shù)碼管靜態(tài)顯示原理。
實驗現(xiàn)象:
依次按下 4*4 矩陣鍵盤上從第 1 到第 20 個鍵,同時在六位數(shù)碼管上依次顯示 0、1、2、3、 4、5、6、7、8、9、A、B、C、D、E、F
實驗說明:
本開發(fā)板上數(shù)碼管為共陰極。靜態(tài)數(shù)碼管顯示原理(視頻中有詳細(xì)介紹):這里就共陰極數(shù)碼管顯示原理進(jìn)行講解,一位數(shù)碼管內(nèi)一共有 8 個發(fā)光二極管,對共陰極來說其 8 個發(fā)光二極管的陰極在數(shù)碼管內(nèi)部全部接在一起,也就是“共陰”說法的來源,陽極是獨立的,設(shè)計電路時一般把陰極接地,當(dāng)我們從外部給任一個陽極加一個高電平時這個發(fā)光二極管就亮了,如果想要出一個 8 字,并且把右下角的小數(shù)點也點亮的話,那可以給 8 個陽極全送高電平,想讓數(shù)碼管顯示幾就給相對應(yīng)的發(fā)光二極管送高電平,因此我們在顯示數(shù)字的時候首先做的就是給 0-9 十個數(shù)字編好碼,在要它亮什么數(shù)字的時候直接把這個編碼送到它的陽極就行了。另外說一下,一般的數(shù)碼管每一段亮至少需要 10 個毫安的電流,而單片機的 IO 口送不出如此大的電流,所以我們需要加數(shù)碼管的驅(qū)動電路,可以用上拉電阻的方法,也可以使用專門的驅(qū)動芯片,本開發(fā)板使用的 74HC573,其輸出電流較大,足夠點亮數(shù)碼管。本開發(fā)板上的六位數(shù)碼管中每個相同段號(段指 a,b,c,d,e,f,g,h)全部是接在一起的,其中每一個位(陰極)是獨立的,所以在做靜態(tài)顯示的時候所有的數(shù)碼管只能顯示相同的數(shù)字,當(dāng)然可以控制哪幾位顯示,如果讓它們顯示不同的數(shù)字那就得給每一個數(shù)碼管加一套驅(qū)動電路了。但這樣做是沒有必要的,后面我們會講到關(guān)于數(shù)碼管動態(tài)顯示原理。
下面給出本開發(fā)板共陰極數(shù)碼管數(shù)字編碼
1.jpg (19.88 KB, 下載次數(shù): 43)
下載附件
2018-3-25 18:38 上傳
矩陣鍵盤的四行分別與 P3.0-P3.3 連接,四列分別與 P3.4-P3.7 連接。
硬件電路:
2.jpg (101.3 KB, 下載次數(shù): 44)
下載附件
2018-3-25 18:40 上傳
代碼:
- #include<reg51.h>
- sbit beep=P2^3;
- sbit dula=P2^6;
- sbit wela=P2^7;
- unsigned char i=100; unsigned char j,k,temp,key; void delay(unsigned char i) {
- for(j=i;j>0;j--)
- for(k=125;k>0;k--);
- }
- unsigned char code table[]= {
- 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71
- };
- display(unsigned char num) {
- P0=table[num]; dula=1;
- dula=0;
- P0=0xc0;
- wela=1;
- wela=0;
- }
- void main()
- {
- dula=0;
- wela=0;
- while(1)
- {
- P3=0xfe;
- temp=P3;
- temp=temp&0xf0;
- if(temp!=0xf0)
- {
- delay(10);
- if(temp!=0xf0)
- {
- temp=P3;
- switch(temp) {
- case 0xee:
- key=0;
- break;
- case 0xde:
- key=1;
- break;
- case 0xbe:
- key=2;
- break;
- case 0x7e:
- key=3; break;
- }
- while(temp!=0xf0)
- {
- temp=P3;
- temp=temp&0xf0;
- beep=0;
- }
- beep=1;
- display(key);
- P1=0xfe;
- }
- }
- P3=0xfd;
- temp=P3;
- temp=temp&0xf0; if(temp!=0xf0)
- {
- delay(10);
- if(temp!=0xf0) {
- temp=P3;
- switch(temp) {
- case 0xed:
- key=4;
- break;
- case 0xdd:
- key=5;
- break;
- case 0xbd:
- key=5;
- break;
- case 0xbd:
- key=6;
- break;
- case 0x7d:
- key=7; break;
- }
- while(temp!=0xf0) {
- temp=P3;
- temp=temp&0xf0;
- beep=0;
- } beep=1;
- display(key);
- P1=0xfc;
- }
- }
- P3=0xfb;
- temp=P3;
- temp=temp&0xf0;
- if(temp!=0xf0)
- {
- delay(10);
- if(temp!=0xf0)
- {
- temp=P3;
- switch(temp)
- {
- case 0xeb:
- key=8;
- break;
- case 0xdb:
- key=9;
- break;
- case 0xbb:
- key=10;
- break;
- case 0x7b:
- key=11; break;
- }
- while(temp!=0xf0)
- {
- temp=P3;
- temp=temp&0xf0;
- beep=0;
- }
- beep=1;
- display(key);
- P1=0xf8;
- }
- }
- P3=0xf7;
- temp=P3;
- temp=temp&0xf0;
- if(temp!=0xf0)
- {
- delay(10);
- if(temp!=0xf0)
- {
- temp=P3;
- switch(temp)
- {
- case 0xe7:
- key=12;
- break;
- case 0xd7:
- key=13;
- break;
- case 0xb7:
- key=14;
- break;
- case 0x77:
- key=15; break;
- }
- while(temp!=0xf0)
- {
- temp=P3;
- temp=temp&0xf0;
- beep=0;
- }
- beep=1;
- display(key);
- P1=0xf0;
- }
- }
- }
- }
復(fù)制代碼
全部資料51hei下載地址:
代碼.pdf
(271.02 KB, 下載次數(shù): 8)
2018-3-25 18:55 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|
|