輸入數組(int[] number)作為sort的參數調用sort 即可實現排序(不減序排列) //或者利用重載的sort方法,輸入參數是(int[] number, 0, number.length-1)
上傳時間: 2017-08-30
上傳用戶:waizhang
#include<stdio.h> void main(void) {int n,k,derivata,a[10],i printf("n=") scanf(" d",&n) for(i=0 i<=n i++) { printf("a[ d]=",i) scanf(" d",&a[i]) } printf("k=") scanf(" d",&k) for(derivata=1 derivata<=k derivata++) { for(i=0 i<=n i++) a[i]=a[i]*(n-i) n-- for(i=0 i<=n i++) printf(" d ",a[i]) printf("\n") }}
標簽: void derivata include printf
上傳時間: 2017-09-17
上傳用戶:duoshen1989
本書闡述了用vc++來開發usb接口的程序。開發環境:vc6.0,格式:pdf-The book described by vc++ To develop procedures for usb int
標簽: writeUSBprogram VC
上傳時間: 2013-07-26
上傳用戶:asdfasdfd
通過對UART技術的研究,提出了一種利用軟件實現UART的單片機擴展方法,沒有使用任何外圍器件,僅僅利用單片機的一個I/O端口、一個T/C技術定時器和一個int外部中斷并通過軟件編程實現,節約了
上傳時間: 2013-08-02
上傳用戶:快樂的小糗糗
電路連接 由于數碼管品種多樣,還有共陰共陽的,下面我們使用一個數碼管段碼生成器(在文章結尾) 去解決不同數碼管的問題: 本例作者利用手頭現有的一位不知品牌的共陽數碼管:型號D5611 A/B,在Eagle 找了一個 類似的型號SA56-11,引腳功能一樣可以直接代換。所以下面電路圖使用SA56-11 做引腳說明。 注意: 1. 將數碼管的a~g 段,分別接到Arduino 的D0~D6 上面。如果你手上的數碼管未知的話,可以通過通電測量它哪個引腳對應哪個字段,然后找出a~g 即可。 2. 分清共陰還是共陽。共陰的話,接220Ω電阻到電源負極;共陽的話,接220Ω電阻到電源+5v。 3. 220Ω電阻視數碼管實際工作亮度與手頭現有原件而定,不一定需要準確。 4. 按下按鈕即停。 源代碼 由于我是按照段碼生成器默認接法接的,所以不用修改段碼生成器了,直接在段碼生成器選擇共陽極,再按“自動”生成數組就搞定。 下面是源代碼,由于偷懶不用寫循環,使用了部分AVR 語句。 PORTD 這個是AVR 的端口輸出控制語句,8 位對應D7~D0,PORTD=00001001 就是D3 和D0 是高電平。 PORTD = a;就是找出相應的段碼輸出到D7~D0。 DDRD 這個是AVR 語句中控制引腳作為輸出/輸入的語句。DDRD = 0xFF;就是D0~D7 全部 作為輸出腳了。 ARDUINO CODECOPY /* Arduino 單數碼管骰子 Ansifa 2011-12-28 */ //定義段碼表,表中十個元素由LED 段碼生成器生成,選擇了共陽極。 inta[10] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90}; voidsetup() { DDRD = 0xFF; //AVR 定義PortD 的低七位全部用作輸出使用。即0xFF=B11111111對 應D7~D0 pinMode(12, INPUT); //D12用來做骰子暫停的開關 } voidloop() { for(int i = 0; i < 10; i++) { //將段碼輸出PortD 的低7位,即Arduino 的引腳D0~D6,這樣需要取出PORTD 最高位,即 D7的狀態,與段碼相加,之后再輸出。 PORTD = a[i]; delay(50); //延時50ms while(digitalRead(12)) {} //如果D12引腳高電平,則在此死循環,暫停LED 跑 動 } }
上傳時間: 2013-10-15
上傳用戶:baitouyu
PID控制器由比例單元(P)、積分單元(I)和微分單元(D)組成。其輸入e (t)與輸出u (t)的關系為 u(t)=kp[e(t)+1/TI∫e(t)dt+TD*de(t)/dt] 式中積分的上下限分別是0和t 因此它的傳遞函數為:G(s)=U(s)/E(s)=kp[1+1/(TI*s)+TD*s] 其中kp為比例系數; TI為積分時間常數; TD為微分時間常數.
上傳時間: 2013-11-04
上傳用戶:jiiszha
MAX29X是美國MAXIM公司生瓣的8階開關電容低通濾波器,由于價格便宜、使用方便、設計簡單,在通訊、信號自理等領域得到了廣泛的應用。本文就其工作原理、電氣參數、設計注意事項等問題作了討論,具有一定的實用參考價值。關鍵詞:開關電容、濾波器、設計 1 引言 開關電容濾波器在近些年得到了迅速的發展,世界上一些知名的半導體廠家相繼推出了自己的開頭電容濾波器集成電路,使形狀電容濾波器的發展上了一個新臺階。 MAXIM公司在模擬器件生產領域頗具影響,它生產MAX291/292/293/294/295/296/297系列8階低通開關電容濾波器由于使用方便(基本上不需外接元件)、設計簡單(頻率響應函數是固定的,只需確定其拐角頻率即截止頻率)、尺寸小(有8-pin DIP封裝)等優點,在ADC的反混疊濾波、噪聲分析、電源噪聲抑制等領域得到了廣泛的應用。 MAX219/295為巴特活思(型濾波器,在通頻帶內,它的增益最穩定,波動小,主要用于儀表測量等要求整個通頻帶內增益恒定的場合。MAX292/296為貝塞爾(Bessel)濾波器,在通頻帶內它的群時延時恒定的,相位對頻率呈線性關系,因此脈沖信號通過MAX292/296之后尖峰幅度小,穩定速度快。由于脈沖信號通過貝塞爾濾波器之后所有頻率分量的延遲時間是相同的,故可保證波形基本不變。關于巴特活和貝塞爾濾波器的特性可能圖1來說明。圖1的蹤跡A為加到濾波器輸入端的3kHz的脈沖,這里我們把濾波器的截止頻率設為10kHZ。蹤跡B通過MAX292/296后的波形。從圖中可以看出,由于MAX292/296在通帶內具有線性相位特性,輸出波形基本上保持了方波形狀,只是邊沿處變圓了一些。方波通過MAX291/295之后,由于不同頻率的信號產生的時延不同,輸出波形中就出現了尖峰(overshoot)和鈴流(ringing)。 MAX293/294/297為8階圓型(Elliptic)濾波器,它的滾降速度快,從通頻帶到阻帶的過渡帶可以作得很窄。在橢圓型濾波器中,第一個傳輸零點后輸出將隨頻率的變高而增大,直到第二個零點處。這樣幾番重復就使阻事賓頻響呈現波浪形,如圖2所示。阻帶從fS起算起,高于頻率fS處的增益不會超過fS處的增益。在橢圓型濾波中,通頻帶內的增益存在一定范圍的波動。橢圓型濾波器的一個重要參數就是過渡比。過渡比定義為阻帶頻率fS與拐角頻率(有時也等同為截止頻率)由時鐘頻率確定。時鐘既可以是外接的時鐘,也可以是自己的內部時鐘。使用內部時鐘時只需外接一個定時用的電容既可。 在MAX29X系列濾波器集成電路中,除了濾波器電路外還有一個獨立的運算放大器(其反相輸入端已在內部接地)。用這個運算放大器可以組成配合MAX29X系列濾波器使用后的濾波、反混濾波等連續時間低通濾波器。 下面歸納一下它們的特點: ●全部為8階低通濾波器。MAX291/MAX295為巴特沃思濾波器;MAX292/296為貝塞爾濾波器;MAX293/294/297為橢圓濾波器。 ●通過調整時鐘,截止頻率的調整范圍為:0.1Hz~25kHz(MAX291/292/293*294);0.1Hz~kHz(MAX295/296/297)。 ●既可用外部時鐘也可用內部時鐘作為截止頻率的控制時鐘。 ●時鐘頻率和截止頻率的比率:10∶1(MAX291/292/293/294);50∶1(MAX295/296/297)。 ●既可用單+5V電源供電也可用±5V雙電源供電。 ●有一個獨立的運算放大器可用于其它應用目的。 ●8-pin DIP、8-pin SO和寬SO-16多種封裝。2 管腳排列和主要電氣參數 MAX29X系列開頭電容濾波器的管腳排列如圖3所示。 管腳功能定義如下: CLK:時鐘輸入。 OP OUT:獨立運放的輸出端。 OP int:獨立運放的同相輸入端。 OUT:濾波器輸出。 IN:濾波器輸入。 V-:負電源 。雙電源供電時搛-2.375~-5.5V之間的電壓,單電源供電時V--=-V。 V+:正電源。雙電源供電時V+=+2.35~+5.5V,單電源供電時V+=+4.75~+11.0V。 GND:地線。單電源工作時GND端必須用電源電壓的一半作偏置電壓。 NC:空腳,無連線。 MAX29X的極限電氣參數如下: 電源(V+~V-):12V 輸入電壓(任意腳):V--0.3V≤VIN≤V++0.3V 連續工作時的功耗:8腳塑封DIP:727mW;8腳SO:471mW;16腳寬SO:762mW;8腳瓷封DIP:640mW。 工作溫度范圍:MAX29-C-:0℃~+70℃;MAX29-E-:-40℃~+85℃;MAX29-MJA:-55℃~+125℃;保存溫度范圍:-65℃~+160℃;焊接溫度(10秒):+300℃; 大多數的形狀電容濾波器都采用四節級連結構,每一節包含兩個濾波器極點。這種方法的特點就是易于設計。但采用這種方法設計出來的濾波器的特性對所用元件的元件值偏差很敏感。基于以上考慮,MAX29X系列用帶有相加和比例功能的開關電容持了梯形無源濾波器,這種方法保持了梯形無源濾波器的優點,在這種結構中每個元件的影響作用是對于整個頻率響應曲線的,某元件值的誤差將會分散到所有的極點,因此不值像四節級連結構那樣對某一個極點特別明顯的影響。3 MAX29X的頻率特性 MAX29X的頻率特性如圖4所示。圖中的fs都假定為1kHz。4 設計考慮 下面對MAX29X系列形狀電容濾波器的使用做些討論。4.1 時鐘信號 MAX29X系列開頭電容濾波器推薦使用的時鐘信號最高頻率為2.5MHz。根據對應的時鐘頻率和拐角頻率的比值,MAX291/MAX292/MAX293/MAX294的拐角頻率最高為25kHz.MAX295/MAX296/MAX297的拐角頻率最高為50kHz 。 MAX29X系列開關電容濾波器的時鐘信號既可幅外部時鐘直接驅動也可由內部振蕩器產生。使用外部時鐘時,無論是采用單電源供電還是雙電源供電,CLK可直接和采用+5V供電的CMOS時鐘信號發生器的輸出相連。通過調整外部時鐘的頻率,可完成濾波器拐角的實時調整。 當使用內部時鐘時,振蕩器的頻率由接在CLK端上的電容VCOSC決定: fCOSC (kHz)=105/3COSC (pF) 4.2 供電 MAX29X系列開關電容濾波器既可用單電源工作也可用雙電源工作。雙電源供電時的電源電壓范圍為±2.375~±5.5V。在實際電路中一般要在正負電源和GND之間接一旁路電容。 當采用單電源供電時,V-端接地,而GND端要通過電阻分壓獲得一個電壓參考,該電壓參考的電壓值為1/2的電源電壓,參見圖5。4.3 輸入信號幅度范圍限制 MAX29X允許的輸入信號的最大范圍為V--0.3V~V++0.3V。一般情況下在+5V單電源供電時輸入信號范圍取1V~4V,±5V雙電源供電時,輸入信號幅度范圍取±4V。如果輸入信號超過此范圍,總諧波失真THD和噪聲就大大增加;同樣如果輸入信號幅度過小(VP-P<1V),也會造成THD和噪聲的增加。4.4 獨立運算放大器的用法 MAX29X中都設計有一個獨立的運算放大器,這個放大器和濾波器的實現無直接關系,用這個放大器可組成一個一階和二階濾波器,用于實現MAX29X之前的反混疊濾波功能鄞MAX29X之后的時鐘噪聲抑制功能。這個運算放大器的反相端已在內部和GND相連。 圖6是用該獨立運放組成的2階低通濾波器的電路,它的拐角頻率為10kHz,輸入阻抗為22Ω,可滿足MAX29X形狀電容濾波器的最小負載要求(MAX29X的輸出負載要求不小于20kΩ)可以通過改變R1、R2、R3、C1、C2的元件值改變拐角頻率。具體的元件值和拐角頻率的對應關系參見表1。
上傳時間: 2013-10-18
上傳用戶:macarco
附件為:LCD12864顯示漢字和數字的程序與電路 /* 自定義延時子函數 */ void delayms(uchar z) { int x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } /* 判斷LCD忙信號狀態 */ void buys() { int dat; RW=1; RS=0; do { P0=0x00; E=1; dat=P0; E=0; dat=0x80 & dat; } while(!(dat==0x00)); } /* LCD寫指令函數 */ void w_com(uchar com) { //buys(); RW=0; RS=0; E=1; P0=com; E=0; } /* LCD寫數據函數 */ void w_date(uchar date) { //buys(); RW=0; RS=1; E=1; P0=date; E=0; } /* LCD選屏函數 */ void select_screen(uchar screen) { switch(screen) { case 0: //選擇全屏 CS1=0; CS2=0; break; case 1: //選擇左屏 CS1=0; CS2=1; break; case 2: //選擇右屏 CS1=1; CS2=0; break; /* case 3: //選擇右屏 CS1=1; CS2=1; break; */ } } /* LCDx向上滾屏顯示 */ void lcd_rol() { int x; for(x=0;x<64;x++) { select_screen(0); w_com(0xc0+x); delayms(500); } } /* LCD清屏函數:清屏從第一頁的第一列開始,總共8頁,64列 */ void clear_screen(screen) { int x,y; select_screen(screen); //screen:0-選擇全屏,1-選擇左半屏,2-選擇右半屏 for(x=0xb8;x<0xc0;x++) //從0xb8-0xbf,共8頁 { w_com(x); w_com(0x40); //列的初始地址是0x40 for(y=0;y<64;y++) { w_date(0x00); } } } /* LCD顯示漢字字庫函數 */ void lcd_display_hanzi(uchar screen,uchar page,uchar col,uint mun) { //screen:選擇屏幕參數,page:選擇頁參數0-3,col:選擇列參數0-3,mun:顯示第幾個漢字的參數 int a; mun=mun*32; select_screen(screen); w_com(0xb8+(page*2)); w_com(0x40+(col*16)); for ( a=0;a<16;a++) { w_date(hanzi[mun++]); } w_com(0xb8+(page*2)+1); w_com(0x40+(col*16)); for ( a=0;a<16;a++) { w_date(hanzi[mun++]); } } /* LCD顯示字符字庫函數 */ void lcd_display_zifuk(uchar screen,uchar page,uchar col,uchar mun) { //screen:選擇屏幕參數,page:選擇頁參數0-3,col:選擇列參數0-7,mun:顯示第幾個漢字的參數 int a; mun=mun*16; select_screen(screen); w_com(0xb8+(page*2)); w_com(0x40+(col*8)); for ( a=0;a<8;a++) { w_date(zifu[mun++]); } w_com(0xb8+(page*2)+1); w_com(0x40+(col*8)); for ( a=0;a<8;a++) { w_date(zifu[mun++]); } } /* LCD顯示數字字庫函數 */ void lcd_display_shuzi(uchar screen,uchar page,uchar col,uchar mun) { //screen:選擇屏幕參數,page:選擇頁參數0-3,col:選擇列參數0-7,mun:顯示第幾個漢字的參數 int a; mun=mun*16; select_screen(screen); w_com(0xb8+(page*2)); w_com(0x40+(col*8)); for ( a=0;a<8;a++) { w_date(shuzi[mun++]); } w_com(0xb8+(page*2)+1); w_com(0x40+(col*8)); for ( a=0;a<8;a++) { w_date(shuzi[mun++]); } } /* LCD初始化函數 */ void lcd_init() { w_com(0x3f); //LCD開顯示 w_com(0xc0); //LCD行初始地址,共64行 w_com(0xb8); //LCD頁初始地址,共8頁 w_com(0x40); //LCD列初始地址,共64列 } /* LCD顯示主函數 */ void main() { //第一行 int x; lcd_init(); //LCD初始化 clear_screen(0); //LCD清屏幕 lcd_display_shuzi(1,0,4,5); //LCD顯示數字 lcd_display_shuzi(1,0,5,1); //LCD顯示數字 lcd_display_hanzi(1,0,3,0); //LCD顯示漢字 lcd_display_hanzi(2,0,0,1); //LCD顯示漢字 //LCD字符漢字 lcd_display_hanzi(2,0,1,2); //LCD顯示漢字 //第二行 lcd_display_zifuk(1,1,2,0); //LCD顯示字符 lcd_display_zifuk(1,1,3,0); //LCD顯示字符 lcd_display_zifuk(1,1,4,0); //LCD顯示字符 lcd_display_zifuk(1,1,5,4); //LCD顯示字符 lcd_display_shuzi(1,1,6,8); //LCD顯示字符 lcd_display_shuzi(1,1,7,9); //LCD顯示字符 lcd_display_shuzi(2,1,0,5); //LCD顯示字符 lcd_display_shuzi(2,1,1,1); //LCD顯示字符 lcd_display_zifuk(2,1,2,4); lcd_display_zifuk(2,1,3,1); lcd_display_zifuk(2,1,4,2); lcd_display_zifuk(2,1,5,3); //第三行 for(x=0;x<4;x++) { lcd_display_hanzi(1,2,x,3+x); //LCD顯示漢字 } for(x=0;x<4;x++) { lcd_display_hanzi(2,2,x,7+x); //LCD顯示漢字 } //第四行 for(x=0;x<4;x++) { lcd_display_zifuk(1,3,x,5+x); //LCD顯示漢字 } lcd_display_shuzi(1,3,4,7); lcd_display_shuzi(1,3,5,5); lcd_display_shuzi(1,3,6,5); lcd_display_zifuk(1,3,7,9); lcd_display_shuzi(2,3,0,8); lcd_display_shuzi(2,3,1,9); lcd_display_shuzi(2,3,2,9); lcd_display_shuzi(2,3,3,5); lcd_display_shuzi(2,3,4,6); lcd_display_shuzi(2,3,5,8); lcd_display_shuzi(2,3,6,9); lcd_display_shuzi(2,3,7,2); while(1); /* while(1) { // LCD向上滾屏顯示 lcd_rol(); } */ }
上傳時間: 2013-11-08
上傳用戶:aeiouetla
TLC2543是TI公司的12位串行模數轉換器,使用開關電容逐次逼近技術完成A/D轉換過程。由于是串行輸入結構,能夠節省51系列單片機I/O資源;且價格適中,分辨率較高,因此在儀器儀表中有較為廣泛的應用。 TLC2543的特點 (1)12位分辯率A/D轉換器; (2)在工作溫度范圍內10μs轉換時間; (3)11個模擬輸入通道; (4)3路內置自測試方式; (5)采樣率為66kbps; (6)線性誤差±1LSBmax; (7)有轉換結束輸出EOC; (8)具有單、雙極性輸出; (9)可編程的MSB或LSB前導; (10)可編程輸出數據長度。 TLC2543的引腳排列及說明 TLC2543有兩種封裝形式:DB、DW或N封裝以及FN封裝,這兩種封裝的引腳排列如圖1,引腳說明見表1 TLC2543電路圖和程序欣賞 #include<reg52.h> #include<intrins.h> #define uchar unsigned char #define uint unsigned int sbit clock=P1^0; sbit d_in=P1^1; sbit d_out=P1^2; sbit _cs=P1^3; uchar a1,b1,c1,d1; float sum,sum1; double sum_final1; double sum_final; uchar duan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; uchar wei[]={0xf7,0xfb,0xfd,0xfe}; void delay(unsigned char b) //50us { unsigned char a; for(;b>0;b--) for(a=22;a>0;a--); } void display(uchar a,uchar b,uchar c,uchar d) { P0=duan[a]|0x80; P2=wei[0]; delay(5); P2=0xff; P0=duan[b]; P2=wei[1]; delay(5); P2=0xff; P0=duan[c]; P2=wei[2]; delay(5); P2=0xff; P0=duan[d]; P2=wei[3]; delay(5); P2=0xff; } uint read(uchar port) { uchar i,al=0,ah=0; unsigned long ad; clock=0; _cs=0; port<<=4; for(i=0;i<4;i++) { d_in=port&0x80; clock=1; clock=0; port<<=1; } d_in=0; for(i=0;i<8;i++) { clock=1; clock=0; } _cs=1; delay(5); _cs=0; for(i=0;i<4;i++) { clock=1; ah<<=1; if(d_out)ah|=0x01; clock=0; } for(i=0;i<8;i++) { clock=1; al<<=1; if(d_out) al|=0x01; clock=0; } _cs=1; ad=(uint)ah; ad<<=8; ad|=al; return(ad); } void main() { uchar j; sum=0;sum1=0; sum_final=0; sum_final1=0; while(1) { for(j=0;j<128;j++) { sum1+=read(1); display(a1,b1,c1,d1); } sum=sum1/128; sum1=0; sum_final1=(sum/4095)*5; sum_final=sum_final1*1000; a1=(int)sum_final/1000; b1=(int)sum_final%1000/100; c1=(int)sum_final%1000%100/10; d1=(int)sum_final%10; display(a1,b1,c1,d1); } }
上傳時間: 2013-11-19
上傳用戶:shen1230
#include <iom16v.h> #include <macros.h> #define uchar unsigned char #define uint unsigned int uchar num,miao,fen,shi,miaoge,miaoshi,fenge,fenshi,shig
上傳時間: 2013-10-14
上傳用戶:sc965382896