历史上的今天
返回首页

历史上的今天

今天是:2025年01月29日(星期三)

2018年01月29日 | MSP430F1121与PCF8576驱动程序

2018-01-29 来源:eefocus

#include  "MSP430x11x1.h" 

#define uint unsigned int 
#define uchar unsigned char 

//器件地址 
uchar    PCF8576=0x70; 

//内存数据定义 


uchar    ByteCnt;     //I2C 数据字节计数器 
uchar    SlvAdr;        //被控器地址 
uchar    SubAdr;        //被控器单元地址 
uchar    XmtDat[5];    //发送数据缓冲区 


//uchar    MODE1=0x45; 
uchar    MODE2=0xCD;        // 
uchar    Bank_sel=0x78; 

uchar    flag; 

uchar    Digit[10]; 

#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; 


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 
;------------------------------------------------------------------------*/ 
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 缓冲区中 
;**********************************************************/ 
void Display_Data(void) 

uchar i=0; 
uchar size=ByteCnt; 

    START();                //发送I2C 总线起始条件 
     
    SendByte(SlvAdr);        //发送被控器总线地址 
         
    SendByte(SubAdr);        //发送单元地址 
     
//    SendByte(0x73);            //闪烁方式为正常,闪烁频率 
为0.5Hz 的命令字送缓冲区首址,其它命令最好单独设 
    SendByte(0x70);            //闪烁方式为正常,闪烁频率 
为0.5Hz 的命令字送缓冲区首址,其它命令最好单独设 
                            //定 
如程序1 如果不需要闪烁应将数#70H 送入缓冲区首址 
     
    do 
      { 
          SendByte(XmtDat[i]);    //发送数据 
          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(); 



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(); 

out_data=0; 

while(1) 

    tmp_data=out_data; 

    for(i=0;i      { 
          k=tmp_data%10; 
          tmp_data=tmp_data/10; 
       
        XmtDat[i]=Digit[k]; 
        tmp[i]=k; 
      } 

    XmtDat[2] |= 0x01; 
     
    for(i=ByteCnt-1;i!=0;i--) 
      { 
          if( tmp[i] == 0 )     
              XmtDat[i]=0x00; 
          else     
              break; 
      } 


    Display_Data(); 

    out_data++; 



}  


推荐阅读

史海拾趣

ASI [ASI Semiconductor, Inc]公司的发展小趣事

ASI Semiconductor, Inc.(以下简称ASI)的故事始于1979年,当时它在美国加利福尼亚州北好莱坞成立。作为一家初创企业,ASI专注于设计、供应和市场先进的高功率、脉冲射频晶体管和托盘。在早期,ASI以其独特的技术视角和市场需求洞察,迅速在行业中站稳了脚跟。通过与摩托罗拉、飞利浦等公司的合作,ASI开始为商用航空电子设备、雷达、医疗和工业应用提供高质量的射频功率晶体管。这种初步的成功为ASI日后的快速发展奠定了坚实的基础。

Fermionics Lasertech Inc公司的发展小趣事

随着技术的不断完善,Fermionics Lasertech Inc公司的产品线逐渐丰富,从单一的激光切割设备扩展到激光打标、焊接、打孔等多个领域。公司开始加大市场推广力度,积极参加国内外各类电子展会,与潜在客户建立联系。同时,公司还注重品牌建设,通过优质的产品和服务赢得了良好的口碑,逐渐在电子行业树立了品牌形象。

Alutronic Kuhlkorper Gmbh & Co Kg公司的发展小趣事

在电子科技日新月异的今天,Fermionics Lasertech Inc公司由一群热衷于激光技术研究的科学家和工程师创立。他们致力于开发新型激光器,以满足电子制造行业对高精度加工的需求。在经历无数次实验和失败后,他们终于研发出了具有划时代意义的超精密激光切割设备,这一技术突破为公司赢得了第一笔大额订单,也为公司的后续发展奠定了坚实的基础。

冠西电子(COSMO)公司的发展小趣事

冠西电子(COSMO)公司成立于1981年,起初便专注于光电元件产品的制造。公司创始人凭借对电子技术的深刻理解和市场需求的敏锐洞察,逐步将冠西电子打造成光电元件领域的专业制造商。通过不断的技术创新和产品质量提升,冠西电子逐渐在电子行业中崭露头角。

HTC Korea(TAEJIN Technology )公司的发展小趣事

HTC Korea(前身为TAEJIN Technology Co., Ltd.)成立于2000年,最初以Linear IC产品的研发及生产为主,逐步在通信、消费类及PC等应用领域稳步发展。然而,公司的真正突破发生在2006年,这一年HTC决定从OEM代工厂转型为自主品牌制造商。这一转型并非易事,面临着合作伙伴转变为竞争对手的风险,导致股价一度暴跌。但HTC坚持下来,推出了HTC Touch和HTC Diamond等经典机型,成功吸引了市场的关注,股价逐渐回升,最终奠定了其在手机市场的重要地位。

3E SECURITY公司的发展小趣事

随着网络安全威胁的不断加剧,电子安全行业面临着前所未有的挑战。3E SECURITY公司紧跟行业趋势,加强了网络安全服务的研发和推广。公司推出了一系列网络安全解决方案,帮助客户有效应对各类网络攻击和数据泄露风险。同时,公司还加强了对客户的安全培训和技术支持,提升了客户的安全意识和应对能力。

问答坊 | AI 解惑

家电十大惊人黑幕 与非门

本帖最后由 jameswangsynnex 于 2015-3-3 20:02 编辑   排名第一 “我们用的是××的第七代液晶屏,所以技术先进,清晰度……”,第七代和第六代有啥区别呢?夏普的一位专业人士表示,这第几代指的是生产线,而不是更新的技术。   越是新 ...…

查看全部问答>

关于三相四线的问题

今天遇到这么一件事:     一台三相四线的仪器,进线的时候接了三个相线,一个地线,仪器不工作。      后来把机器的地线接到零线上,机器能正常工作。      后来发现:1.与大地相连的地线断 ...…

查看全部问答>

DS18B20为何显示I5字符?我就是按照下面电路接法。。DS18B20为何显示I5字符?

DS18B20为何显示I5字符?我就是按照下面电路接法。。DS18B20为何显示I5字符?DS18B20为何显示I5字符?我就是按照下面电路接法。。DS18B20为何显示I5字符?…

查看全部问答>

wince环境的can适配卡驱动设计

摘要:简要介绍了嵌入式实时操作系统WinCE环坑下驱动 程序的设计原理和CAN总线技术,并详细分析了依托PC/ 104总线的CAN适配卡底层驱动程序的设计与实现。…

查看全部问答>

深圳华凯

我司专业从事电子产品克隆,PCB抄板,高速PCB设计,BOM单制作,反推原理图,样机制作,调试,芯片解密,PCB量产,半成品小批量加工等。  确保100%一次性成功,不成功不收任何费用。 您公司需要PCB打样吗? 我司是一家专业生产pcb样板的生产企 ...…

查看全部问答>

你教我嵌入式,我教你VC,可行?上海

我一直做上位机软件开发,VC又占其中的大多数时间。现在感觉嵌入式很重要,想找个人互补一下知识。 受一个帖子《你教我MFC,我教你英语,怎么样》的启发,想找个想学VC、却一直在做嵌入式开发的朋友,你教我嵌入式开发,我教你VC(Web开发我也做过一 ...…

查看全部问答>

Ce6.0的usb同步连接,Ce提示连接成功,PC端activesync提示正在连接一会过后,下面自动断开

使用6.0自带模拟器的2410BSP,移植到自己的平台上了,但USB连接不上,usb定制的是serial功能。 开始是出现如下data abort: UsbFnMdd!UFN_Init: PDD has 5 endpoints UsbFnMdd!UFN_Init: PDD supports speeds 0x1 UsbFnMdd!CUfnBus::CreateChil ...…

查看全部问答>

双核DSP调试问题

自己做了块双核DSP板子,采用两个F2812芯片,调试的时候两个芯片都能检测到,程序编译没有错误,在开发板上能顺利运行通过,但是用双核板调试时,程序就是加载不了,不知是什么问题,请各位大侠指教。…

查看全部问答>

【求助】问个关于看门狗的问题!

关闭看门狗是用 MOV #WDTPW+WDTHOLD,&WDTCTL 这句话的意思是将 HOLD置位吧? 那我用 bis #080H, &WDTCTL,这样可不可以呢? 还有,WDTPW究竟是个什么咚咚?…

查看全部问答>