1. 程式人生 > >例程 15 數碼管

例程 15 數碼管

數碼管介紹 

數碼管是一種半導體發光器件,其基本單元是發光二極體。數碼管按段數分為七段數碼管和八段數碼管,八段數碼管比七段數碼管多一個發光二極體單元(多一個小數點顯示),本實驗所使用的是八段數碼管。按發光二極體單元連線方式分為共陽極數碼管和共陰極數碼管。共陽數碼管是指將所有發光二極體的陽極接到一起形成公共陽極(COM)的數碼管。共陽數碼管在應用時應將公共極COM 接到+5V,當某一欄位發光二極體的陰極為低電平時,相應欄位就點亮。當某一欄位的陰極為高電平時,相應欄位就不亮。共陰數碼管是指將所有發光二極體的陰極接到一起形成公共陰極(COM)的數碼管。共陰數碼管在應用時應將公共極COM 接到地線GND 上,當某一欄位發光二極體的陽極為高電平時,相應欄位就點亮。當某一欄位的陽極為低電平時,相應欄位就不亮。(注意和普通二極體使用一樣需要限流)

本實驗用的是共陰極的數碼管,共陰數碼管在應用時應將公共極接到GND,當某一欄位發光二極體的陽極為低電平時,相應欄位就點熄滅。當某一欄位的陽極為高電平時,相應欄位就點亮。介紹完原理,我們開始準備實驗用元器件:

八段數碼管*1 

220Ω直插電阻*8

麵包板*1 麵包板跳線*1 扎

按照數碼管共有七段顯示數字的段,還有一個顯示小數點的段。當讓數碼管顯示數字時,只要將相應的段點亮即可。例如:讓數碼管顯示數字1,則將b、c 段點亮即可。將每個數字寫成一個子程式。在主程式中每隔1s 顯示一個數字,讓數碼管迴圈顯示1~9數字。每一個數字顯示的時間由延時時間來決定,時間設定的大些,顯示的時間就長些,時間設定的小些,顯示的時間就短。

按照右圖連結好電路後,就可以開始編寫程式了。

int a=7;//定義數字介面7 連線a 段數碼管         數碼管7腳 int b=6;// 定義數字介面6 連線b 段數碼管        數碼管6腳 int c=5;// 定義數字介面5 連線c 段數碼管        數碼管4腳 int d=11;// 定義數字介面11 連線d 段數碼管      數碼管2腳 int e=10;// 定義數字介面10 連線e 段數碼管      數碼管1腳 int f=8;// 定義數字介面8 連線f 段數碼管        數碼管9腳 int g=9;// 定義數字介面9 連線g 段數碼管        數碼管10腳 int dp=4;// 定義數字介面4 連線dp 段數碼管      數碼管5腳 void digital_1(void) //顯示數字1 {     unsigned char j;     digitalWrite(c,HIGH);//點亮c段     digitalWrite(b,HIGH);//點亮b段     for(j=7;j<=11;j++)//7~11口相應段拉低:a,f,g,e,d         digitalWrite(j,LOW);     digitalWrite(dp,LOW);//小數點不點亮 } void digital_2(void) //顯示數字2 { unsigned char j; digitalWrite(b,HIGH); digitalWrite(a,HIGH); for(j=9;j<=11;j++) digitalWrite(j,HIGH); digitalWrite(dp,LOW); digitalWrite(c,LOW); digitalWrite(f,LOW); } void digital_3(void) //顯示數字3 { unsigned char j; digitalWrite(g,HIGH); digitalWrite(d,HIGH); for(j=5;j<=7;j++) digitalWrite(j,HIGH); digitalWrite(dp,LOW); digitalWrite(f,LOW); digitalWrite(e,LOW); } void digital_4(void) //顯示數字4 { digitalWrite(c,HIGH); digitalWrite(b,HIGH); digitalWrite(f,HIGH); digitalWrite(g,HIGH); digitalWrite(dp,LOW); digitalWrite(a,LOW); digitalWrite(e,LOW); digitalWrite(d,LOW); } void digital_5(void) //顯示數字5 { unsigned char j; for(j=7;j<=9;j++) digitalWrite(j,HIGH); digitalWrite(c,HIGH); digitalWrite(d,HIGH); digitalWrite(dp,LOW); digitalWrite(b,LOW); digitalWrite(e,LOW); } void digital_6(void) //顯示數字6 { unsigned char j; for(j=7;j<=11;j++) digitalWrite(j,HIGH); digitalWrite(c,HIGH); digitalWrite(dp,LOW); digitalWrite(b,LOW); } void digital_7(void) //顯示數字7 { unsigned char j; for(j=5;j<=7;j++) digitalWrite(j,HIGH); digitalWrite(dp,LOW); for(j=8;j<=11;j++) digitalWrite(j,LOW); } void digital_8(void) //顯示數字8 { unsigned char j; for(j=5;j<=11;j++) digitalWrite(j,HIGH); digitalWrite(dp,LOW); }

void digital_9(void) //顯示數字9 { digitalWrite(a,HIGH); digitalWrite(b,HIGH); digitalWrite(c,HIGH); digitalWrite(d,HIGH); digitalWrite(e,LOW); digitalWrite(f,HIGH); digitalWrite(g,HIGH); digitalWrite(dp,LOW); } void digital_a(void) //顯示字母a { digitalWrite(a,HIGH); digitalWrite(b,HIGH); digitalWrite(c,HIGH); digitalWrite(d,LOW); digitalWrite(e,HIGH); digitalWrite(f,HIGH); digitalWrite(g,HIGH); digitalWrite(dp,LOW); } void setup() {     int i;//變數宣告     for(i=4;i<=11;i++)         pinMode(i,OUTPUT);//設定4-11為輸出口 } void loop() {   while(1)   {     digital_1();//顯示數字1     delay(1000);//延時1s     digital_2();//顯示數字2     delay(1000); //延時1s     digital_3();//顯示數字3     delay(1000); //延時1s     digital_4();//顯示數字4     delay(1000); //延時1s     digital_5();//顯示數字5     delay(1000); //延時1s     digital_6();//顯示數字6     delay(1000); //延時1s     digital_7();//顯示數字7     delay(1000); //延時1s     digital_8();//顯示數字8     delay(1000); //延時1s     digital_9();//顯示數字9     delay(1000); //延時1s     digital_a();     delay(1000); //延時1s   } }