|
[TI首届低功耗设计大赛]+扩展板1+74hc595数码管电位器扩展板+595驱动显示4位数码管
[复制链接]
本帖最后由 IC爬虫 于 2014-9-28 18:03 编辑
发了这几次FR5969的寄存器和库函数版本的片上外设的试验例程貌似没有什么人关注
这里先给我做的74HC595+4位数码管+电位器的launchpad写点驱动,这个扩展板可以试验芯片内的ADC转换试验和片内的RTC试验,这个后续会更新。
这个扩展板最基本的就是需要利用74hc595驱动四位的数码管,至于驱动的原理这里就不做多说的了。
我设置MCLK=SMCLK=8mhz,这样速度快一点,扫描数码管不会出现延迟。简单显示数字1234
上几张图:
- /*******************************************************************************
- // MSP430FR59x Demo -驱动74HC595显示1234
- //
- // Description: 数码管显示数字1234
- // ACLK = n/a, MCLK = SMCLK = 8MHZ
- //
- // MSP430FR5969
- // ---------------
- // /|\| |
- // | | |
- // --|RST |
- // | |
- // | P2.2|
- // SRCLK--|P3.4 P2.4|
- // SER--|P3.5 P2.5|
- // RCLK--|P3.6 P4.3|
- //
- // IC爬虫 QQ:1394024051
- //
- // Sep 2014
- // Built with IAR Embedded Workbench V6.1
- *******************************************************************************/
- #include <msp430.h>
- #define SER ( 1 << 5 ) //也是所谓的DS
- #define SRCLK ( 1 << 4 ) //也是所谓的SHCP
- #define RCLK ( 1 << 6 ) //也是所谓的STCP
- long resultend1=1234; //需要显示的数字
- unsigned char ge,shi,bai,qian;
- /*******************************************************************************
- *函数名 :delay_1ms
- *描述 :延时函数
- *输入 :无
- *输出 :无
- *调用 :内部调用
- ******************************************************************************/
- void delay_1ms(void)
- {
- unsigned int i;
- for (i=0;i<1000;i++);
- }
- /*******************************************************************************
- *函数名 :delay_nms
- *描述 :延时函数
- *输入 :n -- 延时n个ms
- *输出 :无
- *调用 :内部调用
- ******************************************************************************/
- void delay_nms(unsigned int n)
- {
- unsigned int i=0;
- for (i=0;i<n;i++)
- delay_1ms();
- }
- unsigned char table[]={ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71 };
- /*******************************************************************************
- *函数名 :Write595
- *描述 :74HC595写入数字函数
- *输入 :无
- *输出 :无
- *调用 :内部调用
- ******************************************************************************/
- void Write595(unsigned char data)
- {
- unsigned char i;
- P3OUT &= ~RCLK;
- for( i=0;i<8;i++ )
- {
- if(data&0x80)
- {
- P3OUT |= SER;
- }
- else
- {
- P3OUT &= ~SER;
- }
- P3OUT &= ~SRCLK;
- P3OUT |= SRCLK;
- data <<= 1;
- }
- P3OUT |= RCLK;
- }
- /*******************************************************************************
- *函数名 :main
- *描述 :主函数
- *输入 :无
- *输出 :无
- *调用 :
- ******************************************************************************/
- void main(void)
- {
- WDTCTL = WDTPW + WDTHOLD; // Stop WDT
-
- P2DIR |= (BIT2|BIT4|BIT5); // P2.2,P2.4,P2.5设置为输出端口
- P4DIR |= BIT3; // P4.3设置为输出端口
-
- P3DIR |= (BIT4|BIT5|BIT6); // P3.4,P3.5,P3.6设置为输出端口
-
- PJSEL0 |= BIT4 | BIT5; // For XT1
-
- PM5CTL0 &= ~LOCKLPM5; // 关闭上电端口默认输出高阻抗的功能,使能上电保持起始设置
-
- /***************************系统时钟设置**************************************/
-
- CSCTL0_H = CSKEY >> 8; // Unlock CS registers
- CSCTL1 = DCOFSEL_3; // Set DCO to 8MHz
- CSCTL2 = SELA__LFXTCLK | SELS__DCOCLK | SELM__DCOCLK;
- CSCTL3 = DIVA__1 | DIVS__1 | DIVM__1; // MCLK = SMCLK = 1MHz
- CSCTL4 &= ~LFXTOFF; // Enable LFXT1
- do
- {
- CSCTL5 &= ~LFXTOFFG; // Clear XT1 fault flag
- SFRIFG1 &= ~OFIFG;
- }while (SFRIFG1&OFIFG); // Test oscillator fault flag
- CSCTL0_H = 0; // Lock CS registers
- /*****************************************************************************/
-
- while(1)
- {
- qian = resultend1/1000; //千位
- bai = resultend1/100%10; //百位
- shi = resultend1/10%10; //十位
- ge = resultend1%10; //个位
-
- P2OUT |= (( 1 << 2 )|(1<<4)|(1<<5));
- P4OUT |= (1<<3);
- Write595(table[ge]);
- P2OUT &= ~( 1 << 5 );
- delay_nms(1);
- P2OUT |= (( 1 << 2 )|(1<<4)|(1<<5));
- P4OUT |= (1<<3);
- Write595(table[shi]);
- P4OUT &= ~( 1 << 3 );
- delay_nms(1);
- P2OUT |= (( 1 << 2 )|(1<<4)|(1<<5));
- P4OUT |= (1<<3);
- Write595(table[bai]);
- P2OUT &= ~( 1 << 4 );
- delay_nms(1);
- P2OUT |= (( 1 << 2 )|(1<<4)|(1<<5));
- P4OUT |= (1<<3);
- Write595(table[qian]);
- P2OUT &= ~( 1 << 2 );
- delay_nms(1);
- }
- }
复制代码
sn74hc595驱动数码管.rar
(1.45 KB, 下载次数: 8, 售价: 2 分芯积分)
|
|