MSP430与PCF8576驱动程序(可以借鉴IIC的使用方法)
时间:11-13
来源:互联网
点击:
#define uint unsigned int #define uchar unsigned char #define Num_of_Results 8 unsigned int results[Num_of_Results]; uchar PCF8576=0x70;//器件地址 //内存数据定义 uchar ByteCnt; //I2C 数据字节计数器 uchar SlvAdr; //被控器地址 uchar SubAdr; //被控器单元地址 uchar XmtDat[5]; //发送数据缓冲区 uchar MODE2=0xCD; uchar Bank_sel=0x78; uchar flag; uchar Digit[10]; uint tmp_data; uchar n=0; uchar i; uint j; uchar k; uchar tmp[5]; #define SDA BIT6 // P2.3 controls SDA line (pull-up used for logic 1) #define SCL BIT7 // P2.4 controls SCL line (pull-up used for logic 1) /****************************************************************************** ; 子程序 ;名称:START ;描述:启动I2C 总线子程序--发送I2C 起始条件 ;;*****************************************************************************/ void START(void) { P2OUT |= SDA; //SDA=1 _NOP(); P2OUT |= SCL; //SCL=1 _NOP(); P2OUT &= ~SDA; //SDA=0 _NOP(); P2OUT &= ~SCL; //SCL=0 } /*-------------------------------------------------------------------------- ;名称:STOP ;描述:停止I2C 总线子程序--发送I2C 总线停止条件 ;-------------------------------------------------------------------------*/ void STOP(void) { P2OUT &= ~SDA; //SDA=0 _NOP(); P2OUT |= SCL; _NOP(); P2OUT |= SDA; _NOP(); P2OUT &= ~SCL; } void cack(void) /* 应答位检查 */ { P2OUT |= SDA; P2OUT |= SCL; P2DIR &= ~SDA; _NOP(); P2OUT &= ~SCL; P2DIR |= SDA; } void delay(uchar time) { uchar i; do{ for(i=100;i!=0;i--); } while(--time!=0); } /*---------------------------------------------------------------------- ;名称:SendByte ;描述:字节数据传送子程序发送一个字节数据或地址给被控器PCF8576 ;要发送的数据在ACC 中 ;发送数据正常返回标志F0=0 F0=1 表示被控器无应答或损坏 ;------------------------------------------------------------------------*/ void SendByte(uchar Data) { uchar i=8; do { if((Data&0x80)==0x80) P2OUT |= SDA; else P2OUT &= ~SDA; P2OUT |= SCL; _NOP (); P2OUT &= ~SCL; Data=Data<1; } while(--i!=0); cack(); } /*********************************************************** ;发送数据程序 ;名称:SendData ;描述:发送ByteCnt 个字节给被控器PCF8576 ;被控器地址在SlvAdr 中单元地址在SubAdr 中 ;所发送数据的字节数ByteCnt 在中发送的数据在XmtDat 缓冲区中 ;发送数据正常返回标志F0=0 F0=1 表示被控器无应答或损坏 ;**********************************************************/ void Display_Data(void) { uchar i=0; uchar size=ByteCnt; START(); //发送I2C 总线起始条件 SendByte(SlvAdr); //发送被控器总线地址 SendByte(SubAdr); //发送单元地址 // SendByte(0x73); //闪烁方式为正常,闪烁频率为0.5Hz 的命令字送缓冲区首址, //如果不需要闪烁应将数#70H 送入缓冲区首址 SendByte(0x70); //不闪烁 do { SendByte(XmtDat); //发送数据 i++; } while(--size!=0); STOP(); delay(100); } void ClearLcd(void) { uchar size=ByteCnt; START(); //启动I2C 总线 SendByte(SlvAdr); //送器件地址 SendByte(SubAdr); //发送单元地址 SendByte(0x70); do { SendByte(0x00); //发送数据 } while(--size!=0); STOP(); delay(200); } void PCF8576SET(void) { START(); SendByte(SlvAdr); //送器件地址 SendByte(MODE2); //取方式命令字 SendByte(Bank_sel); STOP(); } /********************************************************** ;ad初始化 *********************************************************/ void AD_Init(void) { P6SEL |= 0X01; //设置P6.0为模拟输入通道 ADC12CTL0 &= ~(ENC); //设置ENC为0,从而修改ADC12寄存器的值 ADC12CTL0=ADC12ON+SHT0_1+REF2_5V+REFON; //AD内核打开+采样保持时间系数(2)+选择内部参考电压+打开内部参考电压发生器 ADC12CTL1=SHP+CONSEQ_2+SHS_1; //采样触发源来自采样定时器,由采样输入信号(ADC12CLK)的上升沿触发采样定时器 //+单通道多次采样+采样触发源Time_A的输出单元out1输出的信号(由ccr1定时器产生) ADC12MCTL0=INCH_0+SREF_1; // 选择AD通道0+正参考电压=Vref,负参考电压源AVss; ADC12IE=0x0001; //开中断允许-ADC12IFG.0; TACCR0=1500; TACCTL0|=CCIE; //TA 为比较模式(TA和CCRO比较),TA中断允许 TACTL=TASSEL_1|MC_1; //TACLK=ACLK,定时器A为增计 |
MSP430PCF8576II 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)