📄 dispose.c
字号:
#include "MSP430FE427A.h"
#include "dispose.h"
#define Polarity YES//AD的数据格式或者极性
#define automatic_reload YES//自动重装
extern unsigned char pad1_buff[4];//必须都在.c文件中定义,且有一个要加extern,如在touch_pad.c中的定义
extern unsigned char pad1_status;//像#define一样的宏定义,要在头文件中声明,如果用到宏定义,就将其所在的头文件在.c中声明
extern unsigned char pad2_buff[4];
extern unsigned char pad2_status;
void dispose_cpu()
{
WDTCTL=WDTPW+WDTHOLD;//关闭看门狗
FLL_CTL0 |= XCAP18PF;//18pF匹配电容
P1DIR|=BIT1+BIT3+BIT4;//设置P1.1、P1.3、P1.4为输出,如果用到LED,则此句必须有
}
void dispose_lcd()
{
LCDCTL=LCDSG0_1+LCD4MUX+LCDON;//S0~S15作为段驱动,4-MUX模式,打开LCD
BTCTL=BT_fLCD_512;//设置LCD刷新频率为512HZ
LCDM1=0;//刚开始时,要清楚LCD寄存器中的上次值
LCDM2=0;
LCDM3=0;
LCDM4=0;
LCDM5=0;
LCDM6=0;
}
void dispose_led_break()
{
P1DIR&=~(BIT5+BIT6+BIT7);//将P1.5、P1.6、P1.7口设为输入
P1IES|=BIT5+BIT6+BIT7;//中断沿选择,选择下降沿
P1IE|=BIT5+BIT6+BIT7;//允许P1.5、P1.6、P1.7口中断
_EINT();//允许总中断
}
void dispose_frequency_doubling(int Frequency)//时钟频率设置,单位KHZ,最大频率3.2MHZ
{
unsigned char Clock_Multiplier_Factor,n;
FLL_CTL0&=~XTS_FLL;//设置振荡器类型为低频
FLL_CTL0|=XCAP18PF;//设置晶振匹配电容为18PF
if(Frequency<3276.8)
{
Clock_Multiplier_Factor=Frequency/32.768;//倍频系数
SCFQCTL=Clock_Multiplier_Factor-1;//倍频至Clock_Multiplier_Factor*32.768KHZ
SCFI0|=FN_2;//DCO中心频率为2MHZ左右,提高速度(具体情况具体分析改正)
}
else//有待改正,具体情况具体分析改正
{
n=Frequency/(32.768*100);
SCFQCTL=99;
FLL_CTL0|=DCOPLUS;//开启额外倍频
SCFI0|=FLLD_2+FN4;//额外两倍频,DCO中心频率为4MHZ
}
}
void dispose_basic_timer_break()
{
BTCTL=BT_ADLY_8;//时钟为ACLK,中断周期为1/128s
IE2|=BTIE;//允许basic_timer中断
_EINT();//允许总中断
}
void dispose_ad16()
{
SD16CTL|=SD16SSEL_1+SD16DIV_1+SD16VMIDON+SD16REFON;//选择SMCLK作为时钟源,2分频,打开内部基准源
SD16INCTL2|=SD16INCH_0+SD16GAIN_1;//选择输入通道0,2倍增益
#if(Polarity==NO)
SD16CCTL0|=SD16OSR_256+SD16DF;//选择过采样率为256,数据格式为双极性
#endif
#if(Polarity==YES)
SD16CCTL2|=SD16OSR_256;//选择过采样率为256,数据格式为单极性
SD16CCTL2|=SD16DF;
#endif
}
void dispose_timer_break(unsigned int period)
{
#if(automatic_reload==YES)
TACCR0=period-1;//周期设定
TACTL=TASSEL_1+MC_1;//时钟源为ACLK,模式设置为增计数模式(自动重装)
TACCTL0|=CCIE;//开启比较/捕获模块0的中断
_EINT();//开启总中断
#endif
/* #if(automatic_reload==NO)
TAR=65536-period;//周期设定
TACTL=TASSEL_1+MC_2;//时钟源为ACLK,模式设置为连续计数模式(非自动重装)
TACCTL0|=CCIE;//开启比较/捕获模块0的中断
_EINT();//开启总中断
#endif */
}
/*******************************************************************************
如果周期为0.01s,ACLK=32768HZ,则period=(int)(0.01*32768)=328
********************************************************************************/
void pwm_software_output(unsigned int period,unsigned int duty1,unsigned int duty2)
{
P1DIR|=BIT3+BIT4;//P1.3、P1.4设置为输出模式
TACTL|=MC_1+TASSEL_1+ID_0;//选择增量计数模式,ACLK,无分频
TACCR0=period-1;//PWM总周期设置为period个ACLK周期,约为0.01s(period/ACLK)
TACCR1=(int)(period*duty1/100);//通道1占空比duty1
TACCR2=(int)(period*duty2/100);//通道1占空比duty2
TACTL|=TAIE;//打开定时器中断
TACCTL1|=CCIE;//允许比较/定时模块1的中断
TACCTL2|=CCIE;//允许比较/定时模块2的中断
_EINT();//开启总中断
}
void dispose_12864()
{
P1DIR|=BIT0+BIT1+BIT2+BIT3;
P1OUT|=BIT2;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -