微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > MSP430与PCF8576驱动程序(可以借鉴IIC的使用方法)

MSP430与PCF8576驱动程序(可以借鉴IIC的使用方法)

时间:11-13 来源:互联网 点击:
数模
_BIS_SR(LPM3_bits+GIE); //进入LPM3模式,开中断允许,等待延时时间结束

TACCTL0&=~CCIE;

P2SEL|=BIT3; //设P2.3为Time_A out1 输出功能
P2DIR|=0x08; // 设P2.3为输出
TACCR0=7; //初始化TACCR0,采样时钟源周期=CCR0J+1;

TACCR1=4;// TACCR1, TimerA,out1 ADc12

TACCTL1=OUTMOD_3;//CCR1 OUT1

TACTL=TACLR|MC_1|TASSEL_1;// 定时器时钟=ACLK,清除TA,增计数模式
}
/****************************************************************************
;Time_A0 CCR0中断服务程序
***************************************************************************/
#pragma vector=TIMERA0_VECTOR
__interrupt void ta0_isr(void)
{
TACTL=0;
LPM3_EXIT;
}
/*****************************************************************************
;ADC12中断服务程序
***************************************************************************
#pragma vector=ADC_VECTOR
__interrupt void ADC12ISR(void)
{
static unsigned int index=0; //静态变量 

results[index]=ADC12MEM0; //移动ADC结果去往results数组
}
*/
/***********************************************************
主程序
***********************************************************/
void main(void)
{
P2DIR |= SDA; //SDA输出
P2DIR |= SCL; //SCL输出
P2OUT &= ~SDA; //SDA=0
P2OUT &= ~SCL; //SCL=0
P2DIR |=BIT1;
P2OUT |=BIT1;
WDTCTL = WDTPW+WDTHOLD;
Digit[0]=0xFC; //0
Digit[1]=0x60; //1
Digit[2]=0xDA; //2
Digit[3]=0xF2; //3
Digit[4]=0x66; //4
Digit[5]=0xB6; //5
Digit[6]=0xBE; //6
Digit[7]=0xE0; //7
Digit[8]=0xFE; //8
Digit[9]=0xF6; //9
SubAdr=0x80; //数据起始地址(总线地址)
SlvAdr=PCF8576;//总线从地址
ByteCnt=5; //位设置
PCF8576SET();//设置方式
AD_Init();
ADC12CTL0|=ENC;//使能转换
//ADC12CTL0|=ADC12SC;
ClearLcd(); //清空
}
//----------------------------------
#pragma vector=ADC_VECTOR
__interrupt void ADC12ISR(void)
{
static unsigned int index=0;
results[index]=ADC12MEM0;

tmp_data=results[index];
for(i=0;i{
k=tmp_data%10;
tmp_data=tmp_data/10;

XmtDat=Digit[k];
tmp=k;
}
for(i=ByteCnt-1;i!=0;i--)
{

if(tmp==0)
XmtDat=0x00;
else
break;
}
XmtDat[4] |=0x40;
Display_Data();
index=(index+1)%Num_of_Results;
}
/*ADC12CTL1 |= CSTARTADD_0; //转换的起始地址为:ADCMEM0
ADC12MCTL0 = INCH_0 + EOS; //设置参考电压分别为AVSS和AVCC,输入通道为A0

ADC12CTL0 |= ADC12ON;
ADC12CTL0 |= MSC;

ADC12CTL1 |= CONSEQ_1; //转换模式为:多通道、单次转换

ADC12CTL1 |= ADC12SSEL_1; //SMCLK
ADC12CTL1 |= ADC12div_0; //时钟分频为1
ADC12CTL1 |= (SHP); //采样脉冲由采用定时器产生

ADC12CTL0 |= ENC; //使能ADC转换
return;
}
void Init_TimerA(void)
{
TACTL = TASSEL1 + TACLR; // 选择SMCLK,清除TAR
TACTL += ID1;
TACTL += ID0; // 1/8 SMCLK
CCTL0 = CCIE; // CCR0 中断允许
CCR0 = 4000; // 时间间隔为 250Hz
TACTL |= MC0; // 增记数模式

return;
}
void main(void)
{
uint out_data;
uint tmp_data;
uchar i;
uchar k;
uchar tmp[5];
P2DIR |= SDA; //SDA
P2DIR |= SCL; //SCL
P2OUT &= ~SDA;
P2OUT &= ~SCL;
WDTCTL = WDTPW+WDTHOLD;
Digit[0]=0x7E; //0
Digit[1]=0x18; //1
Digit[2]=0xB6; //2
Digit[3]=0xBC; //3
Digit[4]=0xD8; //4
Digit[5]=0xEC; //5
Digit[6]=0xEE; //6
Digit[7]=0x38; //7
Digit[8]=0xFE; //8
Digit[9]=0xFC; //9
SubAdr=0x80;
SlvAdr=PCF8576;
ByteCnt=4;
PCF8576SET();
ClearLcd();
AD_Init();
TIME_Init();
out_data=0;
while(1)
{
tmp_data=out_data;
for(i=0;i{
k=tmp_data%10;
tmp_data=tmp_data/10;

XmtDat=Digit[k];
tmp=k;
}
XmtDat[2] |= 0x01;
for(i=ByteCnt-1;i!=0;i--)
{
if( tmp == 0 )
XmtDat=0x00;
else
break;
}
Display_Data();
out_data++;
}
}*/

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top