




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
...wd...基于AVR單片機的步進電機控制器設計摘要介紹了步進電動機的開展史,及國內的現(xiàn)狀和步進電動機未來的應用前景。并且闡述了步進電動機轉速、角度、轉矩的控制原理。本文闡述了一種步進電機控制器的設計方案,并繪制了原理圖和PCB板圖,撰寫了程序源代碼。實現(xiàn)了對步進電動機轉速、角度的控制,并完成了實物的制作。這期間主要使用protel99se軟件繪制原理圖和制板,使用proteus7.1軟件進展程序代碼的仿真和功能的理論驗證。最后通過硬件的調試驗證程序代碼的實際功能,完成對控制器的設計。關鍵詞AVR單片機;步進電動機;控制器。目錄摘要………………ⅠAbstract…………………………Ⅱ第一章、引言………………………11.1步進電機開展史…………11.2我國步進電機開展………………………11.3步進電機應用的前景……………………1第二章、步進電機控制系統(tǒng)………………………22.1步進電機控制系統(tǒng)………………………22.2控制單元…………………22.3驅動電路…………………22.4通信端口…………………32.5其它………………………3第三章、Atmega16L單片機………………………43.1Atmega16L主要功能……………………43.2Atmega16L引腳功能……………………4第四章、控制器電路圖……………6第五章、步進電動機原理與控制…………………85.1步進電動機的構造………………………85.2步進電動機的控制原理…………………85.3L297/L298………………85.3.1L297芯片簡介……………………85.3.2L298芯片簡介……………………95.3.3L297/298步進電機控制…………95.3.4控制機制…………10第六章、實現(xiàn)……………………116.1main主程序流程圖……………………116.2程序代碼………………12第七章、構造圖…………………30結論………………31參考文獻…………………………32致謝………………33附錄………………34第一章、引言1.1步進電機開展史步進電機又稱電動機或階躍電動機,國外一般稱為Stepmotor或Steppingmotor等。步進電機的機理是基于最基本的電磁鐵作用,其原始模型起源于1830年至1860年間。1870年前后開場以控制為目的的嘗試,應用于氬弧燈的電極輸送機構中。這被認為是最初的步進電動。此后,在自動交換機中廣泛使用了步進電動機。不久又在缺乏交流電源的船舶和飛機等獨立系統(tǒng)中廣泛使用。20世紀60年代后期,隨著永磁性材料的開展,各種實用性步進電動機應運而生,而半導體技術的開展那么推進了步進電動機在眾多領域的應用。在近30年間,步進電動機迅速地開展并成熟起來。從開展趨向來講,步進電動機已經(jīng)能與直流電動機、異步電動機,以及同步電動機并列,從而成為電動機的一種基本類型。1.2我國步進電機開展我國步進電動機的研究及制造起始于本世紀50年代后期。從50年代后期到60年代后期,主要是高等院校和科研機構為研究一些裝置而使用或開發(fā)少量產品。這些產品以多段構造三相反響式步進電動機為主。70年代初期,步進電動機的生產和研究有所突破。除反映在驅動器設計方面的長足進步外,對反響式步進電動機本體的設計研究開展到一個較高水平。70年代中期至80年代中期為成品開展階段,新品種高性能電動機不斷被開發(fā)。自80年代中期以來,由于對步進電動機準確模型做了大量研究工作,各種混合式步進電動機及驅動器作為產品廣泛利用。1.3步進電機的應用前景目前,隨著電子技術、控制技術以及電動機本體的開展和變化,傳統(tǒng)電機分類間的界面越來越模糊。步進電機必然會成為機電一體化元件組件的必然趨勢。由于步進電機具有控制方便、體積小等特點,所以在數(shù)控系統(tǒng)、自動生產線、自動化儀表、繪圖機和計算機外圍設備中得到廣泛應用。微電子學的迅速開展和微型計算機的普及與應用,為步進電動機的應用開辟了廣闊前景,使得以往用硬件電路構成的龐大復雜的控制器得以用軟件實現(xiàn),既降低了硬件成本又提高了控制的靈活性,可靠性及多功能性。市場上有很多現(xiàn)成的步進電機控制機構,但價格都偏高。應用SGS公司推出的L297和L298兩芯片可方便的組成步進電機驅動器,并結合Atmega16L單片機可以構成很好的步進電機控制系統(tǒng)。第二章、步進電機控制系統(tǒng)2.1步進電動機控制系統(tǒng)步進電動機本體、步進電動機驅動電路和控制單元構成步進電動機系統(tǒng)不可分割的三大局部。系統(tǒng)框圖見以以下圖2-1:圖2-1步進電動機系統(tǒng)框圖2.2控制單元控制單元、驅動電路為控制系統(tǒng)的核心局部??刂茊卧钦麄€系統(tǒng)最核心的局部,是系統(tǒng)的指揮中心。用于協(xié)調各局部的運行,主要負責接收通信端口或輸入電路送來的信息,并對其進展識別,譯碼,并做出相應的動作,發(fā)出控制信號用以控制步進電動機??刂茊卧獙嵸|上是具有處理能力的微處理器芯片。控制單元可以由:單片機、DSP、PLC等充當。本文選用由ATEML公司生產的Atmega16l單片機。2.3驅動電路驅動電路是負責將控制單元送來的微電流信號進展放大用以驅動步進電動機運轉,驅動電路實質上是功率放大器。常見的驅動電路:單電壓型功放電路、上下壓切換型功放電路、斬波恒流功放電路等再就是采用專用的集成芯片。本文采用L297/L298芯片,由這兩種芯片構成的驅動電路具有控制方便、精度高、并且不需要外圍擴展。2.4通信端口通信端口是步進電機控制器與上位機〔主要是指計算機〕進展通信的接口,PC機串口采用的通信標準RS-232標準。使用單片機的USART端口與計算機的串口〔9芯〕相連進展通信。2.5其它顯示屏:人機交互的窗口,使用JHD162A液晶屏。輸入電路:用于輸入控制信息,告訴控制器如何運轉。第三章、Atmega16L單片機Atmega16L是由ATMEL公司生產的高性能、低功耗的8位AVR?微處理器芯片,具有16KB系統(tǒng)內可編程Flash。3.1Atmega16L主要功能Atmega16L單片機的功能及特點簡述如下:1、16KB的系統(tǒng)內編程flash、512B的EEPROM、1KB的SRAM;2、四通道的PWM;3、兩個可編程串行USART;4、可工作于主機/從機模式的SPI;5、具有獨立片內振蕩器的可編程看門狗定時器;6、片內/片外中斷源;7、32個雙向I/O端口,可單獨控制;8、TWI模塊;9、3個定時計數(shù)器等。3.2Atmega16L引腳功能Atmega16L雙列直插式(PDIP)引腳如圖3-1:圖3-1Atmega16L(PDIP)圖引腳功能簡述如下:A/VCC:模擬/數(shù)字電源;AREF:A/D轉換參考電壓;XTAL1/2:晶振;RESET:復位;AREF:A/D轉換參考電壓;PA~PD:雙向I/O口;TXD:USART輸出引腳;RXD:USART輸入引腳;OC1A:PWM波形輸出端;注:USART,是一個高度靈活的串行通訊設備,通用同步和異步串行接收器和轉發(fā)器的英文縮寫。第四章、控制器電路圖原理圖說明:本原理圖,用Protel99se繪制。以總路線和網(wǎng)絡標號連接,即一樣的的網(wǎng)絡標號具有電氣連接。Jrs----------RS-232串口;Rp-----------Vref調節(jié)電阻;LM2575-------穩(wěn)壓片;JVCC---------電源接入口〔俗稱火牛頭〕;Jlcd---------JHD162A液晶屏接口;JM-----------步進電機接線口;JTAG---------仿真下載器連接口;LED_B--------電源指示;MAX-202------電平轉換芯片;L297/298-----構成相序產生電路和驅動電路;放大圖見附錄。第五章、步進電動機原理與控制從廣義上講,步進電動機的類型分為機械式、電磁式和組合式三大類型。5.1步進電動機的構造(圖5-1)圖5-1HB型步進電動機構造示意圖5.2步進電動機的控制原理步進電機是一種將電脈沖信號變?yōu)橄鄳闹绷魑灰频臄?shù)字/模擬變換器。每當電機繞組接收一個脈沖時,轉子就轉過一個相應的角度〔步距〕。步進電機的角位移量和輸入脈沖的個數(shù)嚴格成正比。在時間上與輸入脈沖同步,因而只要控制輸入脈沖的數(shù)量、頻率和電機繞組的相序,即可獲得所需要的轉速和轉動方向。5.3L297/L2985.3.1L297芯片簡介L297芯片是一種硬件環(huán)分集成芯片,它可產生四相驅動信號,用于兩相雙極或四相單極步進電動機的控制。它的心臟局部是一組譯碼器它能產生各種所需的相序,這一局部是由兩種輸入模式控制,方向控制〔CW/CCW〕和HALF/FULL,步進式時鐘CLOCK將譯碼器從一階梯推進至另一階梯。譯碼器有四個輸出點連接到輸出邏輯局部,提供抑制和斬波功能所需的相序。L297能產生三種相序信號,對應于三種不同的工作方式:即半步方式〔HALFSTEP〕;基本步距〔FULLSTEP〕一相鼓勵方式;基本步距兩相鼓勵方式。L297另一個重要組成是由兩個PWM斬波器來控制相繞組電流,實現(xiàn)恒流斬波控制以獲得良好的矩頻特性。5.3.2L298芯片簡介L298芯片是一種高壓、大電流雙全橋式驅動器,其設計是為承受標準TTL邏輯電平信號和驅動電感負載的,例如繼電器、圓筒形線圈、直流電機和步進電機,具有兩抑制輸入來使器件不受輸入信號影響。每橋的三級管的射極是連接在一起的,相應外接線端可用來連接外設傳感電阻。可安置另一輸入電源,使邏輯能在低壓下工作。L298芯片是具有15個引出腳的多瓦數(shù)直插封閉的集成芯片。5.3.3L297/298步進電機的控制L297/298的連接如以以下圖5-2:圖5-2L297/298連接圖這里我只使用:半步工作方式和兩相鼓勵的基本步距工作方式。兩種工作方式見下表5-1:工作方式半步工作方式兩相鼓勵基本步距引腳狀態(tài)HALF/FULL=1,CONTROL=1HALF/FULL=0,CONTROL=1輸出波形表5-1L297半步/兩相鼓勵基本步距工作方式注:采用基本步距一相鼓勵,存在一個缺點,在電流切換過程即通電狀態(tài)改變過程中,有一瞬間可能所有的定子控制繞組都不通電,電磁轉矩瞬間為零,這就使得電磁轉距在電機運行中波動很大。所以我不采用這種工作模式。5.3.4控制機制L297/298組成的完整系統(tǒng),通過不同的連接可以驅動兩相步進電動和驅動四相步進電機〔可承受的最高電壓為45V,每相電流可達2A〕。單片機〔簡稱mcu〕發(fā)出時鐘信號、正反轉信號、工作模式信號、復位信號、使能信號及控制信號。CW/CCW控制電機的轉向,取1和取0時轉向相反。CLOCK為步進脈沖信號輸入端,在每一個脈沖的下降沿,電機產生一步步進。HALF/FULL為半步或基本步距模式設置,為1時是半步模式,為0時是基本步距?!簿唧w組合方式見表5-1〕CONTORL斬波控制,當為0時,控制INH1和INH2;當為1時控制ABCD。ENABLE使能輸入,當為0時,INH1、INH2、A,B,C和D都為0。RESET輸入,當為0時,脈沖分配器回到初狀態(tài)〔HOME〕。L297通過控制L298雙H集成電路,來驅動步進電機。電路中,L297的15引腳上的兩個電阻用來調節(jié)斬波器電路的參考電壓。該電壓通過管腳13、14所反響的電位的大小比較,來確定是否進展斬波控制,以到達控制電機繞組電流峰值、保護步進電機的目的。綜上所述:步進電機的轉速取決于CLOCK的脈沖頻率,角位移取決于CLOCK的脈沖個數(shù),轉矩大小那么取決于參考電壓Vref的大小。第六章、實現(xiàn)6.1main主程序流程圖6.2程序代碼//***************************head.h************************************#ifndef_HEAD_H#define_HEAD_H#include<avr/io.h>#include<util/delay.h>#include<avr/interrupt.h>#include<avr/signal.h>#include<math.h>#defineTOPOCR1A#definePWMCONREG1TCCR1A#definePWMCONREG2TCCR1B#definePWM_IODDRD|=_BV(PD5)#defineL297_DIRPORTD#defineL297_OUTDDRD|=0xfc#defineRESET0X40#defineHF0X08#defineCC0X10#defineCONTROL0X80#defineS_RESETL297_DIR|=RESET#defineC_RESETL297_DIR&=~RESET#defineHALFL297_DIR|=HF#defineFULLL297_DIR&=~HF#defineCWL297_DIR|=CC#defineCCWL297_DIR&=~CC#defineS_CONTROLL297_DIR|=CONTROL#defineC_CONTROLL297_DIR&=~CONTROL#defineADC_OUTDDRA//ADC模數(shù)轉換存放器宏#defineADCWAYREGADMUX#defineADCCONREGADCSRA#defineADCIOSFRSFIOR#defineADCDATLADCL#defineADCDATHADCH#defineADCDATADC#defineAD_ENADEN#defineAD_SCADSC#defineMODE11//半步工作#defineMODE22//基本步距#defineHALFMODESTR"HALFSTEPMODE?"http://工作方式字符串宏#defineNORMALSTR"NORMALMODE?"#defineCORRECTSTR"correct?"#defineMINUSTR"minus?"#defineSTRWAY1"1.on-offmode"#defineSTRWAY2"2.dot-placemode"#defineCORRECT'+'#defineMINUS'-'#defineSEIsei()#defineCLIcli()#defineOPEN_CMP1ATIMSK|=_BV(OCIE1A)#defineCLOSE_CMP1ATIMSK&=~_BV(OCIE1A)#defineSTEP500#defineN50#defineKEY_INDDRC&=0X3C//KEY初始化宏定義#defineKEY_PINPINC#defineK1KEY_PIN&0X01#defineK2KEY_PIN&0X02#defineK3KEY_PIN&0X40#defineK4KEY_PIN&0X80#defineSET1"1.Setfrequency!"#defineSET2"2.Setmode!"#include"whole_variable.c"#include"key.c"#include"JHD162A.c"#include"ADC.c"#include"pwm.c"#include"L297.c"#include"interrupt_def.c"#endif//***********************head.h(完畢)**********************************//***********************whole_variable.c******************************unsignedlongn,counter,topfix,vn,n1,n2,fre=1000,ps;unsignedcharmode=1,direction='+',key_value,ch='1',key1_temp,key2_temp;unsignedcharstr_mode[20]="1.wave_mode?",str_mode1[20]="HALFSTEPMODE?",str_mode2[20]="correct?";unsignedcharstr_way[20]="1.on-offmode",pulse[10]="000000000",cursor_i,pulse_i,ky,adc_str[5];//*********************whole_variable.c(完畢)**************************//**************************key.c**************************************#include"head.h"unsignedcharkey(void){unsignedcharkey_value;key_value=(KEY_PIN&0XC3)^0xc3;if(key_value)//是否有鍵按下,無返回'0',有進入{}{switch(key_value) { case0x01:{while((KEY_PIN&0XC3)^0xc3);return'1';} case0x02:{while((KEY_PIN&0XC3)^0xc3);return'2';} case0x40:{while((KEY_PIN&0XC3)^0xc3);return'3';} case0x80:{while((KEY_PIN&0XC3)^0xc3);return'4';} }}elsereturn(0);}//***********************key.c(完畢)***********************************//**************************JHD162A.c********************************#include"head.h"#defineLCD_DIRDDRB//方向存放器#defineLCD_DARPORTB//數(shù)據(jù)存放器#defineRS_HLCD_DAR|=0x04//RS----PB2#defineRS_LLCD_DAR&=0xfa#defineE_HLCD_DAR|=0x08//E-----PB3#defineE_LLCD_DAR&=0xf7voide_h2l(void){E_H;//產生一個下降沿_delay_us(2);//必須>=2usE_L;}voidlcd_send(unsignedchartemp){LCD_DAR&=0X0F;//清高四位LCD_DAR|=(temp&0XF0);//發(fā)送高四位temp<<=4;e_h2l();//產生下降沿_delay_us(4);LCD_DAR&=0X0F;LCD_DAR|=temp;//發(fā)送低四位e_h2l();}voidlcd_com(unsignedcharcomm){RS_L;//選擇指令存放器_delay_us(20);lcd_send(comm);}voidlcd_data(unsignedchardat){RS_H;_delay_us(20);lcd_send(dat);}voidcursor_on(void)//開光標{lcd_com(0x0f);}voidcursor_off(void){lcd_com(0x0c);}voidcursor_control(unsignedcharx,unsignedchary){unsignedcharaddr;addr=y>0?(0x80+0x40+x):(0x80+x);lcd_com(addr);}voidjhd_init(void){LCD_DIR=0XFF;_delay_ms(16);//延時>=15mslcd_com(0x22);_delay_ms(4.1);//>=4.1mse_h2l(); _delay_us(100);//>=100use_h2l();e_h2l();lcd_com(0x28);lcd_com(0x0c);}voiddisplay_char(unsignedcharx,unsignedchary,unsignedchardat){unsignedcharaddr;addr=y>0?(0x80+0x40+x):(0x80+x);lcd_com(addr);lcd_data(dat);}voiddisplay_str(unsignedcharx,unsignedchary,unsignedchar*dat){unsignedcharaddr;addr=y>0?(0x80+0x40+x):(0x80+x);lcd_com(addr);while(lcd_data(*dat++),*dat);}voidclear(void)//清屏子函數(shù){display_str(0,0,"");}//****************************JHD162A.c(完畢)**************************//****************************PWM.c************************************#include"head.h"voidPWM(unsignedpps)//脈沖控制函數(shù){counter=0;vn=0;topfix=1000000/pps;n1=((10000-topfix)/STEP+2)*(2*N);if(n<2*n1){display_str(0,0,"error!");return;}n2=n-n1;TOP=10000;PWMCONREG1=0X41;//設置PWM模式PWM_IO;//置PWM口為輸出(PD5)SEI;//使能全局中斷OPEN_CMP1A;//使能輸出比較匹配A中斷PWMCONREG2=0X11;//設置PWM模式while(1){if(((key_value=key())=='4')&&!ky){PWMCONREG2=0;CLI;return;} elseif(counter<n1){display_str(0,0,"moveup...!");} elseif(counter==n)display_str(0,0,"stop...!"); elseif(counter>n2){display_str(0,0,"movedown...!");} elsedisplay_str(0,0,"isopluse...!"); adcdisplay();}}//************************PWM.c(完畢)**********************************//***************************L297.c************************************#include"head.h"voiddouble_half_mode1(void)//半步工作方式{HALF;S_CONTROL;}voiddouble_full_mode2(void)//兩相激磁基本步距{FULL;S_CONTROL;}//on-offmode模式執(zhí)行子函數(shù)voidL297_1(unsignedcharmode,chardirection,unsignedpps){ky=0; n=0xffffffff; L297_OUT;S_RESET;switch(mode)//L297工作模式選擇{case1:double_half_mode1();break; case2:double_full_mode2();break; default:display_str(0,0,"modeerror!");}switch(direction)//正反方向選擇{case'+':CW;break;case'-':CCW;break; default:display_str(0,0,"directionerror!");} PWM(pps); display_str(0,0,"Stop!");}//dot-placemode模式執(zhí)行子函數(shù)voidL297_2(unsignedcharmode,chardirection,unsignedpps){ky=1;L297_OUT;S_RESET;switch(mode)//L297工作模式選擇{case1:double_half_mode1();break; case2:double_full_mode2();break; default:display_str(0,0,"modeerror!");}switch(direction)//正反方向選擇{case'+':CW;break;case'-':CCW;break; default:display_str(0,0,"directionerror!");}n=n*2;PWM(pps);//調用PWM函數(shù)}//************************L297.c(完畢)**********************************//************************interrupt_def.c********************************#include"head.h"http://***************輸出比較匹配A中斷服務子程序*****************//SIGNAL(SIG_OUTPUT_COMPARE1A)//中斷服務程序,脈沖數(shù)、頻率控制〕{counter++;//脈沖計數(shù)器vn++;//加速間隔if((counter>=n)&&ky){PWMCONREG2=0;CLI;CLOSE_CMP1A;}//是否到達//脈沖數(shù),是關閉TC、中斷elseif(counter<n1)//加速階段。 { if(vn>2*N){TOP=((TOP-STEP)<=topfix)?topfix:TOP-STEP;vn=0; }}elseif((counter>n2)&&ky)//減速階段{ if(vn>2*N) { TOP=((TOP+STEP)>=10000)?10000:TOP+STEP; vn=0; } }//恒速階段}//********************interrupt_def.c(完畢)*****************************//****************************main.c**********************************#include"head.h"voidset_fre(void)//頻率設定子函數(shù){clear();//清屏display_str(0,0,"1000pps");while(1){do {key_value=key();if(key_value=='4')return;}while(!key_value); if(key_value=='2') { ch=(ch+1>=58)?'1':(ch+1); fre=(fre+1000>=10000)?1000:(fre+1000); } elseif(key_value=='3') { ch=(ch-1<=48)?'9':(ch-1); fre=(fre-1000<=0)?9000:(fre-1000); } display_char(0,0,ch);}}voidchange_mode(void)//模式選擇子函數(shù){clear();//清屏display_str(0,0,str_mode);while(1){do { key_value=key();if(key_value=='4')return;}while(!key_value);if((key_value=='2')||(key_value=='3')) { if(!strcmp(str_mode,"1.wave_mode?"))strcpy(str_mode,"2.direction?"); elseif(!strcmp(str_mode,"2.direction?"))strcpy(str_mode,"1.wave_mode?"); } clear(); display_str(0,0,str_mode);}}voidset_mode(void)//模式設定子函數(shù){if(!strcmp(str_mode,"1.wave_mode?"))//"wave_mode"模式那么進入,程序體執(zhí)行{clear(); display_str(0,0,str_mode1); while(1) { do { key_value=key();if(key_value=='4'){key1_temp=0;return;}}while(!key_value);if((key_value=='2')||(key_value=='3')) { if(!strcmp(str_mode1,NORMALSTR)){strcpy(str_mode1,HALFMODESTR);mode=MODE1;} elseif(!strcmp(str_mode1,HALFMODESTR)){strcpy(str_mode1,NORMALSTR);mode=MODE2;} } clear(); display_str(0,0,str_mode1);} }elseif(!strcmp(str_mode,"2.direction?"))//否那么,進入//"direction"語句體執(zhí)行(接上注釋){clear(); display_str(0,0,str_mode2); while(1) { do { key_value=key();if(key_value=='4'){key2_temp=0;return;}}while(!key_value);if((key_value=='2')||(key_value=='3')) { if(!strcmp(str_mode2,CORRECTSTR)){strcpy(str_mode2,MINUSTR);direction=MINUS;} elseif(!strcmp(str_mode2,MINUSTR)){strcpy(str_mode2,CORRECTSTR);direction=CORRECT;} } clear(); display_str(0,0,str_mode2);}}}voidwork_way(void)//工作方式選擇{clear();display_str(0,0,"3.work_way?");while((key_value=key())!='4');//k4按下否,否等待按下,是向下運行display_str(0,0,str_way);//"開關模式"while(1){do { key_value=key();if(key_value=='4')return;}while(!key_value);if((key_value=='2')||(key_value=='3')) { if(!strcmp(str_way,STRWAY1))strcpy(str_way,STRWAY2); elseif(!strcmp(str_way,STRWAY2))strcpy(str_way,STRWAY1); } clear(); display_str(0,0,str_way);}}unsignedchartransform(unsignedcharch)//代碼轉換子函數(shù){switch(ch){case'0':return0;break; case'1':return1;break; case'2':return2;break; case'3':return3;break; case'4':return4;break; case'5':return5;break; case'6':return6;break; case'7':return7;break; case'8':return8;break; case'9':return9;break;default:display_str(0,0,"error!");}}voidget_n(void){unsignedi,j=8;unsignedlongsum=0;for(i=0;i<9;i++){sum+=transform(pulse[i])*pow(10,j--);}n=sum+1;}voidset_way(void)//模式設置子函數(shù){if(!strcmp(str_way,STRWAY1))//on_offmode模式處理語句{//clear(); display_str(0,0,"Start...?");//選擇on-offmode模式,信息"等//待命令..." while((key_value=key())!='4');//如果'k4' L297_1(mode,direction,fre);//調用on-off控制子函數(shù)----控制//電機運轉 }elseif(!strcmp(str_way,STRWAY2))//"2.dot-placemode"模式處理語句{cursor_i=15; cursor_on(); clear(); display_str(7,0,pulse); cursor_control(cursor_i,0); while(1) { do { key_value=key();}while(!key_value); if(key_value=='2') { cursor_i=(cursor_i-1<7)?15:(cursor_i-1); } elseif(key_value=='3') { cursor_i=(cursor_i+1>15)?7:(cursor_i+1); } elseif(key_value=='1') { pulse[cursor_i-7]=(pulse[cursor_i-7]+1>'9')?'0':(pulse[cursor_i-7]+1); } display_str(7,0,pulse); cursor_control(cursor_i,0);//刷新光標位置 if(key_value=='4')break; }cursor_off(); display_str(0,0,"Start...?"); get_n();//計算脈沖數(shù) while(key()!='4'); L297_2(mode,direction,fre);}}intmain(void)//main主函數(shù){DDRA=0XFF;//測試KEY_IN;//KEY初始化jhd_init();//JHD162A初始化adc_init();//ADC初始化while(1){display_str(0,0,"Welcomeusing!");//歡迎信息display_str(0,1,"AuthorYangMing");//作者信息while((key_value=key())!='4');
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 阮郎歸題目及答案
- 日語高考閱讀題目及答案
- 2023年學業(yè)水平合格考試三年分類匯編(真題)-專題三地球上的水03海水的運動
- 4 4 解三角形-2026版53高考數(shù)學總復習A版精煉
- 2023-2024學年江蘇省南京市江寧區(qū)高二下學期期末考試數(shù)學試卷(解析版)
- 2023-2024學年廣東省陽江市高二下學期期末測試數(shù)學試題(解析版)
- 整改內容回復函
- 2025年湖南省中考英語試卷真題(含答案)
- 合法的員工勞動合同
- 年產30萬平方米生態(tài)木護墻板新型環(huán)保材料研發(fā)生產項目可行性研究報告寫作模板-申批備案
- 宜賓五糧液股份有限公司2025年上半年校園招聘(253人)筆試參考題庫附帶答案詳解
- 水利站項目規(guī)劃選址論證報告
- 防汛防雷安全培訓
- 2024版壓力容器設計審核機考題庫-簡答題3-3
- 2025-2030國內天然橡膠行業(yè)深度分析及競爭格局與發(fā)展前景預測研究報告
- 四年級2025年小學語文下學期期末考試真題人教版
- 2024年東莞市“百萬英才匯南粵行動計劃”事業(yè)編制教師招聘筆試真題
- DB43T-湖南省改性玻化微珠復合材料外墻修繕系統(tǒng)應用技術標準
- 產品質量檢驗方法
- 直播帶貨主播培訓課程
- 放射治療擺位技術
評論
0/150
提交評論