Led.c
上传用户:xs588588
上传日期:2021-03-30
资源大小:242k
文件大小:2k
- #include <msp430x14x.h>
- #include "led.h"
- unsigned char seg[]={
- 0x3f,0x06,0x5b,0x4f, /* 0 1 2 3*/
- 0x66,0x6d,0x7d,0x07, /* 4 5 6 7 */
- 0x7f,0x6f,0x77,0x7c, /* 8 9 A B */
- 0x39,0x5e,0x79,0x71 /* C D E F */
- };
- void Init_Port(void)
- {
- //将P1口所有的管脚在初始化的时候设置为输入方式
- P1DIR = 0;
-
- //将P1口所有的管脚设置为一般I/O口
- P1SEL = 0;
-
- // 将P1.0 P1.1 P1.2 设置为输出方向
- P1DIR |= BIT0;
- P1DIR |= BIT1;
- P1DIR |= BIT2;
- return;
- }
- void SHCLK_Hi(void)
- {
- //P1.2管脚输出高电平
- P1OUT |= BIT2;
- return;
- }
- void SHCLK_Lo(void)
- {
- //P1.2管脚输出低电平
- P1OUT &= ~(BIT2);
- return;
- }
- void STCLK_Hi(void)
- {
- //P1.1管脚输出高电平
- P1OUT |= BIT1;
- return;
- }
- void STCLK_Lo(void)
- {
- //P1.1管脚输出低电平
- P1OUT &= ~(BIT1);
- return;
- }
- void DataOut(unsigned char nValue)
- {
- int i;
- int j;
- for(i = 0;i < 8;i++)
- {
- if ((nValue & 0x01) == 1)
- {
- P1OUT |= BIT0;//输出高电平
- }
- else
- {
- P1OUT &= ~(BIT0);//输出低电平
- }
- SHCLK_Hi();//时钟高电平,上升沿有效
- for(j = 10; j > 0; j--) ;//延迟一点时间
- SHCLK_Lo();//时钟低电平
- for(j = 10; j > 0; j--) ;
- nValue >>= 1;
- }
- return;
- }
- void main(void)
- {
- unsigned char nValue;
- //初始化时钟
- Init_CLK();
- //端口初始化
- Init_Port();
- //清除锁存信号
- STCLK_Lo();
-
- //输出0
- nValue = 0;
- DataOut(seg[nValue]);
- //输出2
- nValue = 2;
- DataOut(seg[nValue]);
- //给锁存信号,显示上面的两位数据
- STCLK_Hi();
- return;
- }
- void Init_CLK(void)
- {
- unsigned int i;
- BCSCTL1 = 0X00; //将寄存器的内容清零
- //XT2震荡器开启
- //LFTX1工作在低频模式
- //ACLK的分频因子为1
-
- do
- {
- IFG1 &= ~OFIFG; // 清除OSCFault标志
- for (i = 0x20; i > 0; i--);
- }
- while ((IFG1 & OFIFG) == OFIFG); // 如果OSCFault =1
-
- BCSCTL2 = 0X00; //将寄存器的内容清零
- BCSCTL2 += SELM1; //MCLK的时钟源为TX2CLK,分频因子为1
- BCSCTL2 += SELS; //SMCLK的时钟源为TX2CLK,分频因子为1
- }