網站控制面板網站查詢
數碼管中有8位數字,從右往左分別為LED1、LED2、...、LED8,如下圖所示?
如何實現(xiàn)點亮單個數字,用下圖中的ABC來實現(xiàn)??
P2.2管腳控制A,P2.3管腳控制B,P2.4管腳控制C
//定義數碼管位選管腳
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;???? ?for(i=0;i<8;i++){
?? ??? ?//位選
?? ??? ?switch(i){
?? ??? ??? ?case 0:
?? ??? ??? ??? ?LSC=1,LSB=1,LSA=1; ?//7:LED8
?? ??? ??? ??? ?break;
?? ??? ??? ?case 1:
?? ??? ??? ??? ?LSC=1,LSB=1,LSA=0; ?//6:LED7
?? ??? ??? ??? ?break;
?? ??? ??? ?case 2:
?? ??? ??? ??? ?LSC=1,LSB=0,LSA=1; ?//5:LED6
?? ??? ??? ??? ?break;
?? ??? ??? ?case 3:
?? ??? ??? ??? ?LSC=1,LSB=0,LSA=0; ?//4:LED5
?? ??? ??? ??? ?break;
?? ??? ??? ?case 4:
?? ??? ??? ??? ?LSC=0,LSB=1,LSA=1; ?//3:LED4
?? ??? ??? ??? ?break;
?? ??? ??? ?case 5:
?? ??? ??? ??? ?LSC=0,LSB=1,LSA=0; ?//2:LED3
?? ??? ??? ??? ?break;
?? ??? ??? ?case 6:
?? ??? ??? ??? ?LSC=0,LSB=0,LSA=1; ?//1:LED2
?? ??? ??? ??? ?break;
?? ??? ??? ?case 7:
?? ??? ??? ??? ?LSC=0,LSB=0,LSA=0; ?//0:LED1
?? ??? ??? ??? ?break;
?? ??? ?}
?? ?}?
每一位有8段,如下圖所示?
eg顯示0:0? ? 0? ? 1? ? 1? ? 1? ? 1? ? 1? ? 1
------------------------------------------------------
DP(小數點)? ? G? ?F? ? E? ? D? ?C? ?B? ? A?
//段碼數據?
u8 gsmg_code[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};?//0? ? ? ?1? ? ? ?2? ? ? ?3? ? ? 4? ? ? ?5? ? ? ?6? ? ? 7? ? ? ?8? ? ? 9? ? ? ?A? ? ? B? ? ? C? ? ? D? ? ? ?E? ? ? ?F
P0端控制數碼管
1、靜態(tài)數碼管實驗
#include "reg51.h"
typedef unsigned int u16;
typedef unsigned char u8;
//數碼管顯示數字的數組(共陰數碼管)
u8 gsmg_code[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; ?//0-F
#define SMG_A_DP_PORT P0
//控制靜態(tài)數碼管顯示數字0,即讓P0端口輸出數字0的段碼0x3f(共陰)
void main(){
?? ?while(1){
?? ??? ?//顯示數字0
?? ??? ?SMG_A_DP_PORT=gsmg_code[0];
?? ?}
}
2、動態(tài)數碼管實驗?
?#include "reg51.h"
typedef unsigned int u16;
typedef unsigned char u8;
//段碼數據?
u8 gsmg_code[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
#define SMG_A_DP_PORT P0
//定義數碼管位選管腳
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
void delay(u16 time){
?? ?while(time--);
}
//動態(tài)數碼管
void smg_display(){
?? ?u16 i=0;
?? ?for(i=0;i<8;i++){
?? ??? ?//位選
?? ??? ?switch(i){
?? ??? ??? ?case 0:
?? ??? ??? ??? ?LSC=1,LSB=1,LSA=1; ?//7
?? ??? ??? ??? ?break;
?? ??? ??? ?case 1:
?? ??? ??? ??? ?LSC=1,LSB=1,LSA=0; ?//6
?? ??? ??? ??? ?break;
?? ??? ??? ?case 2:
?? ??? ??? ??? ?LSC=1,LSB=0,LSA=1; ?//5
?? ??? ??? ??? ?break;
?? ??? ??? ?case 3:
?? ??? ??? ??? ?LSC=1,LSB=0,LSA=0; ?//4
?? ??? ??? ??? ?break;
?? ??? ??? ?case 4:
?? ??? ??? ??? ?LSC=0,LSB=1,LSA=1; ?//3
?? ??? ??? ??? ?break;
?? ??? ??? ?case 5:
?? ??? ??? ??? ?LSC=0,LSB=1,LSA=0; ?//2
?? ??? ??? ??? ?break;
?? ??? ??? ?case 6:
?? ??? ??? ??? ?LSC=0,LSB=0,LSA=1; ?//1
?? ??? ??? ??? ?break;
?? ??? ??? ?case 7:
?? ??? ??? ??? ?LSC=0,LSB=0,LSA=0; ?//0
?? ??? ??? ??? ?break;
?? ??? ?}
?? ??? ?SMG_A_DP_PORT=gsmg_code[i];
?? ??? ?delay(5000);
?? ??? ?SMG_A_DP_PORT=0x00; ?//消隱
?? ?}
}
void main(){
?? ?while(1){
?? ??? ?smg_display();
?? ?}
}