例程 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 } }