机电之家资源网
单片机首页|单片机基础|单片机应用|单片机开发|单片机文案|软件资料下载|音响制作|电路图下载 |嵌入式开发
培训信息
赞助商
F149+AD+PCF8576CT显示程序
F149+AD+PCF8576CT显示程序
 更新时间:2009-12-3 16:36:08  点击数:0
【字体: 字体颜色
分享MSP430F149配合PCF8576CT做AD转换液晶显示--程序
这只是实验程序,尽供参考!
//MSP430F149与液晶驱动芯片PCF8576CT的连接程序
#include  "msp430x14x.h"
#define uint unsigned int
#define uchar unsigned char
unsigned int A[8];
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;
float d_data;
float v_data;
float vcc;
uchar n=0;
uchar i;
uint j;
uchar k;
uchar tmp[5];
#define SDA   BIT3      // P2.3 controls SDA line (pull-up used for logic 1)
#define SCL   BIT4      // 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;
}
/*----------------------------------------------------------------------
; 子程序
;名称:cack
;描述:应答位检查
;---------------------------------------------------------------------*/
void cack(void) /* 应答位检查 */
{
P2OUT |= SDA;
P2OUT |= SCL;
P2DIR &= ~SDA;
_NOP();
P2OUT &= ~SCL;
P2DIR |= SDA;
}
/*----------------------------------------------------------------------
; 子程序
;名称:delay
;描述:延迟
;---------------------------------------------------------------------*/
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();   //应答位检查
}
/***********************************************************
;发送数据程序
;名称:Display_Data
;描述:发送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();  //停止I2C 总线
delay(100);   //延迟
}
/***********************************************************
;清除
***********************************************************/
void ClearLcd(void)
{
uchar size=ByteCnt;
START();           //启动I2C 总线
SendByte(SlvAdr);  //送器件地址
SendByte(SubAdr);  //发送单元地址
SendByte(0x70);
do
{
  SendByte(0x00); //发送数据
} while(--size!=0);
STOP();           //停止I2C 总线
delay(100);       //延迟
}
/***********************************************************
发送方式命令字
***********************************************************/
void PCF8576SET(void)
{
START();              //发送I2C 总线起始条件
SendByte(SlvAdr);     //送器件地址
SendByte(MODE2);      //取方式命令字
SendByte(Bank_sel);
STOP();               //停止I2C 总线
}
/***********************************************************
主程序
***********************************************************/
void main(void)
{
P2DIR |= SDA; //SDA输出
P2DIR |= SCL; //SCL输出
P2OUT &= ~SDA;  //SDA=0
P2OUT &= ~SCL;  //SCL=0
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();//设置方式
ClearLcd();  //清空
//**************AD转换^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
P6SEL|=0x01;                    //使能A/D通道A0(P6.0)
ADC12CTL0=ADC12ON+SHT0_2+MSC+REFON+REF2_5V;   //打开ADC12、8倍ADC12CLK、多次转换
ADC12CTL1=SHP+CONSEQ_2;         //多次采样、单通道多次转换模式
ADC12MCTL0=0x10;                //参考电压Vref+、AVss
ADC12IE=0x01;                   //使能中断ADC12IFG.0
ADC12CTL0|=ENC;                 //使能转换
_EINT();                        //中断允许                      
ADC12CTL0|=ADC12SC;             //开始转换
_BIS_SR(LPM0_bits);             //进入低功耗LPM0模式
}
//----------------------------------
#pragma vector=ADC_VECTOR
__interrupt void ADC12ISR (void)//ADC中断处理程序
{
A[n]=ADC12MEM0;
n++;
if(n==8)
{
d_data=(A[0]+A[1]+A[2]+A[3]+A[4]+A[5]+A[6]+A[7])/8;
n=0;
vcc=2627;
v_data=vcc/4095;

tmp_data=v_data*d_data;
for(i=0;i<ByteCnt;i++)  //数据的每一位送到相应的缓存位
   {
   k=tmp_data%10;
   tmp_data=tmp_data/10;
XmtDat=Digit[k];
tmp=k;
   }
for(i=ByteCnt-1;i!=0;i--)  //数值为0时不显示(减少功耗)
   {
   if( tmp == 0 )
   XmtDat=0x00;
   else
   break;
   }
XmtDat[4] |= 0x40;
Display_Data();
 }
}
  • 上一篇: 单片机的状态迁移与复位操作
  • 下一篇: 没有了
  • 发表评论   告诉好友   打印此文  收藏此页  关闭窗口  返回顶部
    热点文章
     
    推荐文章
     
    相关文章
    网友评论:(只显示最新5条。)
    关于我们 | 联系我们 | 广告合作 | 付款方式 | 使用帮助 | 机电之家 | 会员助手 | 免费链接

    点击这里给我发消息66821730(技术支持)点击这里给我发消息66821730(广告投放) 点击这里给我发消息41031197(编辑) 点击这里给我发消息58733127(审核)
    本站提供的机电设备,机电供求等信息由机电企业自行提供,该企业负责信息内容的真实性、准确性和合法性。
    机电之家对此不承担任何保证责任,有侵犯您利益的地方请联系机电之家,机电之家将及时作出处理。
    Copyright 2007 机电之家 Inc All Rights Reserved.机电之家-由机电一体化网更名-声明
    电话:0571-87774297 传真:0571-87774298
    杭州滨兴科技有限公司提供技术支持

    主办:杭州市高新区(滨江)机电一体化学会
    中国行业电子商务100强网站

    网站经营许可证:浙B2-20080178-1