国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

MSP430與PCF8576驅動程序

發布時間:2008-8-8 22:06    發布者:MSP430
關鍵詞: MSP430 , PCF8576 , 驅動程序
#i nclude "MSP430x14x.h" #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為增計數模式 _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++; } }*/
本文地址:http://m.qingdxww.cn/thread-2862-1-1.html     【打印本頁】

本站部分文章為轉載或網友發布,目的在于傳遞和分享信息,并不代表本網贊同其觀點和對其真實性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問題,我們將根據著作權人的要求,第一時間更正或刪除。
您需要登錄后才可以發表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區
  • 了解一下Microchip強大的PIC18-Q24 MCU系列
  • 無線充電基礎知識及應用培訓教程3
  • PIC18-Q71系列MCU概述
  • 基于CEC1712實現的處理器SPI FLASH固件安全彈性方案培訓教程
  • 貿澤電子(Mouser)專區

相關在線工具

相關視頻

關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 婷婷久| 99影视在线视频免费观看 | 亚洲欧美综合日韩字幕v在线 | 国产一级片免费 | 日韩精品福利视频一区二区三区 | 99久久精品免费看国产 | 国产日韩精品一区二区在线观看 | 春日迟迟再出发最新一期在线观看 | 日本久久中文字幕 | 国产91激情对白露脸全程 | 在线精品日韩一区二区三区 | 九九免费观看全部免费视频 | 一区视频在线播放 | 国产精品素人搭讪在线播放 | 中国欧美日韩一区二区三区 | 欧美日韩国产在线一区 | 大蕉久久伊人中文字幕 | 国产综合精品日本亚洲777 | 午夜日批| 久久精品福利视频 | 亚洲综合极品香蕉久久网 | 夜夜操网 | www视频在线观看天堂 | 欧美黄色片在线 | 九九在线 | 成年人三级视频 | 五月天六月婷婷开心激情 | 国产欧美精品区一区二区三区 | 欧美日韩一区二区三区在线观看 | 亚洲手机在线观看 | www.亚洲综合 | 天堂在线91 | 自拍偷拍2019 | 国产精品免费看 | 老司机福利精品 | 色www精品视频在线观看 | 成人黄网大全在线观看 | 狠狠色丁香久久综合网 | 欧美久 | 一区二区三区四区日韩 | 看全色黄大色黄大片视频 |