/****************晶体管显示数字1.0***************/ /* P2.0 a P2.1 b P2.2 c P2.3 d P2.4 e P2.5 f P2.6 g P2.7 dp 共阴数码管,com接地 abcdef按逆时针旋转,g为中间一横,dp为点 */ void display(int i) { if(i == 0) { P2DIR |= 0xFF; P2OUT |= 0xFF; P2OUT &= ~(BIT6 + BIT7) //显示数字零,g dp不亮 } if(i == 1) { P2DIR |= 0xFF; P2OUT |= 0xFF; P2OUT &= ~(BIT6 + BIT7) } if(i == 2) { P2OUT |= 0xFF; P2DIR |= 0xFF; P2OUT &= ~(BIT6 + BIT7) } if(i == 3) { P2OUT |= 0xFF; P2DIR |= 0xFF; P2OUT &= ~(BIT6 + BIT7) } if(i == 4) { P2OUT |= 0xFF; P2DIR |= 0xFF; P2OUT &= ~(BIT6 + BIT7) } if(i == 5) { P2OUT |= 0xFF; P2DIR |= 0xFF; P2OUT &= ~(BIT6 + BIT7) } if(i == 6) { P2OUT |= 0xFF; P2DIR |= 0xFF; P2OUT &= ~(BIT6 + BIT7) } if(i == 7) { P2OUT |= 0xFF; P2DIR |= 0xFF; P2OUT &= ~(BIT6 + BIT7) } if(i == 8) { P2OUT |= 0xFF; P2DIR |= 0xFF; P2OUT &= ~(BIT6 + BIT7) } if(i == 9) { P2DIR |= 0xFF; P2OUT |= 0xFF; P2OUT &= ~(BIT6 + BIT7) //显示数字9,e dp 不亮 } } int main() { display(0); display(8); int n,i; for(i = 0; i < 10; i++) { display(i); for(n = 0;n < 60000; n++) } }
/*************数码管显示数字2.0(查表)*****************/ #include <msp430f169.h> /* 查表方式实现(共阴极)将十六进制转换成二进制,对应下面个字母 举例 0->3F dp g f e d c b a 0 0 1 1 1 1 1 1 */ void main (void) { unsigned char table[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; unsigned int n,i; WDTCTL =WDTPW + WDTHOLD; P1DIR |= 0xFF; P1OUT |= 0; while(1) { for(n = 0;n < 10; n++) { P1OUT = table[n]; for(i = 0; i < 60000; i++); } } }
/***********数码管显示数字3.0(专用译码芯片)*****************/ //通过四个管脚即四位二进制数表示数字,再经译码器 #include <msp430f169.h> void main(void) { unsigned int n,j; WDTCTL = WDTPW + WDTHOLD; P1DIR |= 0x0F; P1OUT |= 0; while(1) { for(n = 0;n < 10 ; n++) { P1OUT = n; for(i = 0;i < 60000;i++); } } }
/************数码管显示数字4.0(动态显示)**************/ /**********************显示数字2008******************/ #include <msp430f169.h> unsigned char Tab[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; unsigned char Pos[4]={0x0E,0x0D,0x0B,0x07}; unsigned char Buf[4]={2,0,0,8}; void main (void) { unsigned int n,i; WDTCTL = WDTPW + WDTHOLD; P1DIR |= 0xFF; P1OUT |= 0xFF; P2DIR |= 0x0F; P2OUT |= 0x0F; while(1) { for(n = 0;n < 4; n++) { P2OUT = Pos[n]; P1OUT = Tab[Buf[n]]; for(i = 0; i < 6000;i++); } } }
原文:https://www.cnblogs.com/xinguihu/p/12713973.html