⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dispose.c

📁 MSP430ADC采样12864显示
💻 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 + -