簡介
時鐘收音機,錄像機,微波爐,玩具和許多其他家用物品中經(jīng)常發(fā)現(xiàn)七段LED顯示屏。它們主要用于顯示十進制數(shù)字,但也可以顯示一些字母和其他字符。該實驗描述了將七段式LED顯示器連接到PIC16F688單片機的方法。您將創(chuàng)建一個從0(00h)到15(0Fh)的十六進制計數(shù)器,并在七段LED顯示屏上顯示該值。
要求的理論
七段式LED顯示屏是由7個LED元件組成的特殊布置,在每側(cè)使用兩個垂直段,在頂部,中部和底部使用一個水平段來形成矩形。通過分別打開或關(guān)閉分段,可以顯示0到9之間的數(shù)字和一些字母。有時七段顯示也有第八段顯示小數(shù)點。因此,一個七段顯示器將需要微控制器的七個輸出來顯示一個數(shù)字,如果還要顯示小數(shù)點,則還需要一個輸出。
這些段用非大寫字母標記: a,b,c,d,e,f,g和dp,其中dp是小數(shù)點。顯示器內(nèi)部的8個LED可以配置為共陰極或共陽極配置。對于公共陰極顯示器,所有分段LED的陰極都綁在一起,并且該公共點必須接地。然后,通過向其陽極施加邏輯1來打開所需的LED段。在公共陽極顯示器中,所有陽極連接在一起,并且公共陽極連接到電源電壓Vcc。通過將邏輯0施加到其陰極來打開各個段。
當使用七個以上的段顯示時,將使用一種多路復(fù)用技術(shù)來最大限度地減少所需的微控制器引腳數(shù)。
在此實驗中,將使用LT543模型共陰極七段顯示器。分段LED指示燈亮起時呈紅色。該模塊有10個引腳,其配置如下所示。
所有陰極都連接在一起,并且公共陰極點在引腳3和8處可用。陽極通過帶有限流電阻器的微控制器的I/O引腳驅(qū)動。要顯示數(shù)字,需要打開和關(guān)閉適當?shù)亩蜭ED。例如,要顯示數(shù)字7,僅應(yīng)打開段a,b和c。
電路圖
用于連接的電路圖PIC16F688單片機端口的共陰極七段LED顯示屏如下所示。微控制器的I/O引腳提供段LED所需的電流。串聯(lián)在微控制器pina和段LED之間的限流電阻為330Ω。每。段a-f通過RC0-RC5驅(qū)動,段g由RA2驅(qū)動。不使用小數(shù)點。請檢查制造商的數(shù)據(jù)表以標識您的七段顯示模塊的段引腳。
七段顯示接口電路圖
電路板上的電路設(shè)置
軟件
分段LED通過PORTC和PORTA驅(qū)動,因此它們被定義為數(shù)字輸出。這些引腳上的任何比較器功能也必須禁用。程序從0到15計數(shù),間隔為1秒,然后再次翻轉(zhuǎn)為0。計數(shù)值在七段顯示器上顯示為0、1、2、3、4、5、6、7、8、9,A,B,C,D,E和F。使用以下命令編譯以下程序來自MikroElektronika的用于PIC編譯器的MikroC Pro,并將HEX文件加載到PIC16F688微控制器中。閱讀第一個實驗會話, 實驗1:使LED閃爍 ,以了解微控制器的時鐘和配置位設(shè)置。
/*
Lab 6: Seven segment display
Copyright @ Rajendra Bhatt
November 13, 2010
*/
// Define seven segment connections
sbit seg_a at RC0_bit;
sbit seg_b at RC1_bit;
sbit seg_c at RC2_bit;
sbit seg_d at RC3_bit;
sbit seg_e at RC4_bit;
sbit seg_f at RC5_bit;
sbit seg_g at RA0_bit;
unsigned short count=0;
void main() {
ANSEL = 0b00000000; //All I/O pins are configured as digital
CMCON0 = 0x07 ; // Disbale comparators
TRISC = 0b00000000; // PORTC All Outputs
TRISA = 0b00001000; // PORTA All Outputs, Except RA3
do {
switch (count) {
case 0 : seg_a=1; seg_b=1; seg_c=1;
seg_d=1; seg_e=1; seg_f=1; seg_g=0;
break;
case 1 : seg_a=0; seg_b=1; seg_c=1; seg_d=0;
seg_e=0; seg_f=0; seg_g=0;
break;
case 2 : seg_a=1; seg_b=1; seg_c=0; seg_d=1;
seg_e=1; seg_f=0; seg_g=1;
break;
case 3 : seg_a=1; seg_b=1; seg_c=1; seg_d=1;
seg_e=0; seg_f=0; seg_g=1;
break;
case 4 : seg_a=0; seg_b=1; seg_c=1; seg_d=0;
seg_e=0; seg_f=1; seg_g=1;
break;
case 5 : seg_a=1; seg_b=0; seg_c=1; seg_d=1;
seg_e=0; seg_f=1; seg_g=1;
break;
case 6 : seg_a=1; seg_b=0; seg_c=1; seg_d=1;
seg_e=1; seg_f=1; seg_g=1;
break;
case 7 : seg_a=1; seg_b=1; seg_c=1; seg_d=0;
seg_e=0; seg_f=0; seg_g=0;
break;
case 8 : seg_a=1; seg_b=1; seg_c=1; seg_d=1;
seg_e=1; seg_f=1; seg_g=1;
break;
case 9 : seg_a=1; seg_b=1; seg_c=1; seg_d=0;
seg_e=0; seg_f=1; seg_g=1;
break;
case 10 : seg_a=1; seg_b=1; seg_c=1; seg_d=0;
seg_e=1; seg_f=1; seg_g=1;
break;
case 11 : seg_a=0; seg_b=0; seg_c=1; seg_d=1;
seg_e=1; seg_f=1; seg_g=1;
break;
case 12 : seg_a=1; seg_b=0; seg_c=0; seg_d=1;
seg_e=1; seg_f=1; seg_g=0;
break;
case 13 : seg_a=0; seg_b=1; seg_c=1; seg_d=1;
seg_e=1; seg_f=0; seg_g=1;
break;
case 14 : seg_a=1; seg_b=0; seg_c=0; seg_d=1;
seg_e=1; seg_f=1; seg_g=1;
break;
case 15 : seg_a=1; seg_b=0; seg_c=0; seg_d=0;
seg_e=1; seg_f=1; seg_g=1;
break;
} //case end
count ++;
if(count ==16) count =0;
Delay_ms(1000); // Wait for 1 sec before updating the display
} while(1); // Infinite Loop
}
下載十六進制文件
輸出
將程序加載到微控制器后,打開電源并查看十六進制計數(shù)器的計數(shù)從0到F。
責任編輯:wv
-
LED顯示屏
+關(guān)注
關(guān)注
35文章
1821瀏覽量
98745
發(fā)布評論請先 登錄
相關(guān)推薦
評論