基于单片机的数字安匝仪的制作方法_4

文档序号:9373595阅读:来源:国知局
i=0;i〈8;i++) {Rom-OUT=I;Rom-SCK=O;ret-data=ret-data〈〈I; if ( Rom-OUT ) ret_data=ret_data+l;else ret_data=ret_data+0;Rom_SCK=l;}return(ret_ data);} void get_n_bytes_data_from_ROM(unsigned char addrHigh,unsigned char addrMid,unsigned char addrLow,unsigned char 5^pBuffj unsigned char DataLen ) {unsigned char i;Rom-CS = 0;LCD-CS=I;Rom-SCK=O; send-command-to_R0M (0x03) ; send_command_to_ROM(addrHigh) ; send_command_to_ ROM(addrMid); send-command-to_R0M(addrLow);for(i = 0; i < DataLen; i++ )*(pBuff+i) =get_ data-from-ROM () ; Rom-CS = I;} void display-GB2312_string(unsigned char y, unsigned char x, unsigned char 木text) {unsigned char i= 0; unsigned char addrHigh,addrMid,addrLow ;unsigned char fontbuf[32]; while ((text [i] >0x00)) {if (((text [i] >=0xb0)&&(text [i] <=0xf7) )&&(text [i+1] >= Oxal)) { fontaddr = (text[i]- OxbO)^94;fontaddr += (text[i+1]-〇xal)+846;fontaddr = (unsigned long) (fontaddr木32); addrHigh = (fontaddr&OxffOOOO)>>16;addrMid = (fontaddr&OxffOO)>>8;addrLow =fontaddr&Oxff; get_n-bytes_data-from-ROM(addrHigh,addrMid,addrLow,fontbuf,32 );display_ graphic-16x16 (y,x,fontbuf);i+=2;x+=16;} else if (((text[i]>=0xal) &&(text[i]<=0 xa3))&&(text[i+l]>=0xal)){ fontaddr = (text[i]_ 0xal)*94; fontaddr += (text[i + I]-〇xa I) ;fontaddr = (unsigned long) (fontaddr*32);addrHigh = (fontaddr&OxffOOOO)>>16; addrMid = (fontaddr&OxffOO)>>8;addrLow = fontaddr&Oxff; get_n_bytes_data_from_R0M (addrHigh,addrMid, addrLow, fontbuf, 32 );display_graphic_16xl6(y, x, fontbuf) ;i+=2;x+=16;} else if ((text[i]>=0x20) &&(text[i]< = 0x7e)) {unsigned char fontbuf [16] ;fontaddr = (text [i]-0x20);fontaddr = (unsigned long) (fontaddr木16);fontaddr=(unsigned long)(fontadd r+0x3cf80);addrHigh=(fontaddr&OxffOOOO) >>16; addrMid = (fontaddr&OxffOO)>>8;addrLow = fontaddr&Oxff; get_n-bytes_data-from-ROM(addrHigh,addrMid,addrLow,fontbuf,16 );display_ graphic_8xl6(y, x, fontbuf) ;i+=l; x+=8;}else i++;} } void display_string_5x7 (unsigned char y,unsigned char x,unsigned char 5^text) {unsigned char i= 0; unsigned char addrHigh, addrMid, addrLow ;while ((text [i]>0x00)) {if ((text[i]>=0x20) &&(text[i]<=0x7e)) {unsigned char fontbuf[8]; fontaddr = (text[i]- 0x20);fontaddr = (unsigned long)(fontaddr木8);fontaddr =(unsigned long) (fontaddr+0x3bfc0); addrHigh = (fontaddr&OxffOOOO)>>16;addrMid = (fontaddr&OxffOO)>>8;addrLow =fontaddr&Oxff; get_n-bytes_data-from-ROM(addrHigh,addrMid,addrLow,fontbuf,8);display_gra phic_5x7(y, x, fontbuf);i+=l;x+=6;} else i++;} } void DisplayFloatVariable5x7(u8 row,u8 col,const s8 ^format, float dat){s8 array[21]; display_string_5x7(row, col, array) ; } void DisplayFloatVariable2312(u8 row,u8 col,const s8 ^format, float dat){s8 array[21]; display-GB2312_string(row,col,array); } unsigned int GetSmoothADValueO(unsigned int original_ad_value){static unsigned int ad-value_buffer[SMOOTH-NUM];static unsigned char current_count;unsigned char i; unsigned long ad_value_sum;unsigned int smooth_ad_value;ad_value_ buffer[current-count++]= original_ad_value;if(current_count>=SMOOTH_NUM)current_count=0;ad_value_ sum=0; for(i=0;i〈SM00TH-NUM;i++)ad-value-sum+=ad-value-buffer[i];smooth-ad- value= (unsigned int) (ad_value_sum/SMOOTH_NUM);return smooth_ad_value;}float Average (u8 num,float *dat) {u8 i;float sum; sum=0;for(i=0;i〈num;i++) sum+=dat[i];sum/=num;return sum;}float CalculatePressure (unsigned int ad_ value){ float temp,pressure;temp=((float)ad-value木5/4096-0. 5)/0. 016+0. 5;temp=temp -6; pressure= (temp<0)?(0) : (temp); return pressure; } float CalculateVacuumDegree(unsigned int ad_value) { float voltage,vacuum-degree; voltage=(float) ad_value*5/4096;vacuum_degree=-25*voItage+12.5;return vacuum-degree;} float CalculateCurrent (unsigned int ad_value) {float U_is,R_is,K_ iI is,current;U-is=(float)ad-value氺5/4096; R-is=1000;K-ilis=19500/3;current=K-ilis氺U-is/R-is;return current;} float CalculateSensitivity (u8 mod,unsigned int DA_Data) { float voltage, current, sensitivity; voltage = (float)DA-Data/4096 * (-REFERENCE-VOLTAGE-N15V);current = voltageAR-CURRENT-UMITING-I + R-CURRENT-UMITING-2 + R-COIL); sensitivity = current ^ COIL_TURNS;if(mod==l)return sensitivity氺0· 9455;else return sensitivity^O. 8592;} float CalculateDAOutVoltage (ul6 dat) { float U;U=(float)dat*REFERENCE- VOLTAGE-P5V/4096*( R_CURRENT_LIMITING_1 + R_CURRENT_LIMITING_2 + R_COIL)/R_CURRENT_ LIMITING_1;return U; } ul6 CalculateDAOutData(float at) {float da-current,da-voltage;ul6 da-out_ dat;da-current= at/COIL-TURNS;da-voltage=da-current*(R-CURRENT-LIMITING-I + R-CURRENT_ UMITING-2 + R-COIL); da-out-dat=(ul6)(sl6)(da-voltage/(-REFERENCE-VOLTAGE-N15V)*4096);return da-out-dat;} float MedianFilter(u8 num,float *value_buf){u8 i,j;float temp;for (j=〇;j〈num_l;j++){for (i=0;i〈num-j_l;i++){ if ( value-buf[i]>value-buf[i+l]){temp = value-buf[i];value-buf[i]=value_ buf[i+l];value-buf[i+l] = temp;} }}return value-buf[(num_l)/2];} void SampleInit (void) {REED-NOT-INSERT-STATUS-DIR=O ; REED-NOT-BREAKOVER- STATUS-DIR=O;} unsigned int CRC16_Calculate(unsigned char 氺ptr,unsigned char len,unsigned int weight) {unsigned int crc =0; unsigned char i ; while (len- >0) {crc =( crc"(((unsigned int)^ptr)<<8));for(i=0;i<8;i++) {if(crc&0x8000)crc=((crc<<l)"weight);else crc <<= I;}ptr++;!return crc;} void SerialProtoco I Send(unsigned char* SendDataj unsigned char Length,unsigned char Mode){ unsigned char i,CRC16H,CRC16L;unsigned short int CRC16;if (Mode==O) CRC16=CRC16-Calculate (SendData,Length,0x1021);else CRC16 = CRC16-Calculate (SendDataj Length,0x8005); CRC16L = (unsigned char)CRC16;CRC16H = CRC16>>8;for(i=0;i<Length;i++) SCISendByte(0,SendData[i]); SCISendByte(0, CRC16H);SCISendByte(0, CRC16L) ;} void ControlInit (void) {GPI0-InitO ; DA-SetData(O) ;} void DA-SetData(ul6 dat){ PORTAB = dat;} void AD_Init(void) {ATD0CTL2 = OxcO;ATD0CTL1_SRES=2;ATD0CTL3 = 0x88; ATD0CTL4_PRS = 4;}unsigned int AD_SampIe(unsigned char channel){ATD0CTL5 = channel; while (!ATD0STAT0_SCF);return ATD0DR0;} void DFlash_Init(void){while(FSTAT_CCIF==0);FCLKDIV=0x0F;FCNFG=0x00;while (FCLKDIV_FDIVLD==0) ;} void DFlash_ffrite4fford(unsigned short int ADDR16, unsigned short int dat[]) { while(FSTAT_CCIF==0);if(FSTAT_ACCERR)FSTAT_ACCERR=1;if (FSTAT_FPVIOL) FSTAT_FPVI0L=1; FCC0BIX_CC0BIX = 0x00;FCC0B = 0xl100 I (DFLASH_START>>16) ; FCC0BIX_ CC0BIX=0x01;FCC0B=ADDR16; FCC0BIX_CC0BIX=0x02;FCC0B=dat[0];FCC0BIX_CC0BIX=0x03;FCC0B=dat[1];FCCOBI X_CC0BIX=0x04; FCC0B=dat[2];FCC0BIX_CC0BIX=0x05;F(X0B=dat[3];FSTAT_CCIF=1;whiIe(FSTAT_ CCIF==O); } unsigned short int DFlash_Readfford(unsigned short int ADDR16){unsigned char lastepage, epage; unsigned short int dat;lastepage = EPAGE;epage = (unsigned char) ((DFLASH_L0ffEST_START_PAGE) + (ADDR16 ?10)); EPAGE=epage;dat = READword((ADDRI6 & (DFLASH_PAGE_SIZE -1)) + DFLASH_ PAGE_ffIND0ff_START); EPAGE= lastepage;return dat;} void DFlash_EraseSector (unsigned short int ADDR16) {whiIe(FSTAT_ CCIF==O);if(FSTAT_ACCERR) FSTAT_ACCERR=1; if(FSTAT_FPVI0L)FSTAT_FPVI0L=1;FCC0BIX_CC0BIX=0x00; FCC0B=0xl200 | (DFLASH_START?16) ; FCCOBIX_CC0BIX=OxOI; FCC0B=ADDR16 ; FSTAT_ CCIF=I; whi
当前第4页1 2 3 4 5 6 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1