廣工信工測控數(shù)控課設(shè)c文件源碼_第1頁
廣工信工測控數(shù)控課設(shè)c文件源碼_第2頁
廣工信工測控數(shù)控課設(shè)c文件源碼_第3頁
廣工信工測控數(shù)控課設(shè)c文件源碼_第4頁
廣工信工測控數(shù)控課設(shè)c文件源碼_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、#include #include #include funs.h/* 名稱 : motor.c* 功能 : XY 軸電機正反轉(zhuǎn)*/void DelayMs(int z)/ 延時 msint x,y;for(x=z;x0;x-)for(y=12000;y0;y-);void motor_init()PINSEL1 &=(0xFF22);IO0DIR |=(0xF12);IO0DIR |=(0xF27);void motor_x_p()/x 電機正轉(zhuǎn)if(8=k_p)k_p=0;IO0CLR=0xF12;IO0SET=(motor_pk_p12);k_p+;void motor_x_r()/x

2、電機反轉(zhuǎn)if(8=k_r)k_r=0;IO0CLR=0xF12;IO0SET=(motor_rk_r12);k_r+;void motor_y_r()/y 反轉(zhuǎn)1 / 19if(8=j_r)j_r=0;IO0CLR=0xF27;IO0SET=(motor_rj_r27);j_r+;void motor_y_p()/y 正轉(zhuǎn)if(8=j_p)j_p=0;IO0CLR=0xF27;IO0SET=(motor_pj_p27);j_p+;/* 名稱 : UART.c* 功能 : UART 初始化和設(shè)置*/void UART_init(void)uint16 Fdiv;PINSEL0 |=0x05;U0

3、LCR=0x83;Fdiv =(Fpclk/16)/UART_BPS;U0DLM=Fdiv/256;U0DLL=Fdiv%256;U0LCR=0x03;void UART0_SendByte(uint8 data)U0THR=data;while(U0LSR&0x40)=0);void UART0_SendStr(int8 strs)2 / 19uint32 j=0;while(strsj!=0)UART0_SendByte(strj); j+;uint8 UART0_RcvByte(void)uint8 rcv_byte;while(U0LSR&0x01)=0);rcv_byte = U0R

4、BR;/rcv_byte=rcv_byte-0x30;return (rcv_byte);/* 名稱 : led.c* 功能 : led*/void show_init()/led 管腳的初始化IODIR0|=(0x7FF1);IOCLR0=0x7FF1;/IOSET0=0x7FF1;/while(1);void show_led(uint8 data,uint8 bit)IOSET0=0x7FF1;IOCLR0=(numdata1|selectbit8);/* 在 led 燈中顯示x 和 y 值 */void show_x_y(uint8 x,uint8 y)uint8 x_data_bit

5、,x_data_rem,y_data_bit,y_data_rem;x_data_bit=x/10;show_led(x_data_bit,1);DelayMs(1);x_data_rem=x%10;show_led(x_data_rem,2);DelayMs(1);3 / 19y_data_bit=y/10;show_led(y_data_bit,3);DelayMs(1);y_data_rem=y%10;show_led(y_data_rem,4);DelayMs(1);/*led顯示 x 和 y 的值,跟show 一樣 */void led_init()IODIR0|=(0x3FF2);

6、IOCLR0=(0x3FF2);void led_show_x(uint8 x)IOCLR0=0x1F2;x &= 0x1f;IOSET0 = (x2);void led_show_y(uint8 y)IOCLR0=0x1F7;y &=0x1f;IOSET0=(y7);/*按鍵掃描程序*/void key_init()PINSEL1 &=(0x30);PINSEL1 |=(0x010);/P0.16 為外部中斷0EXTMODE|=(10);4 / 19VICVectCntl0 =0x2E;VICVectAddr0= (unsigned)key_irq;VICIntEnable= 0x6000;

7、/* 掃描鍵盤的列,返回列的序號03*/uint8 row_scan()IO0CLR=0x0F22;IO0SET=0X0E18)&0x0F;/p0.1821,行的狀態(tài),本應(yīng)全為1if(0x0f!=key_null)while(0x0f!=key_null)/ 等待按鍵放開key_null= (IO0PIN18)&0x0F;return 0;/ 返回列序號IO0CLR=0x0F22;IO0SET=0X0D18)&0x0F;if(0x0f!=key_null)while(0x0f!=key_null)key_null= (IO0PIN18)&0x0F;return 1;IO0CLR=0x0F22;

8、IO0SET=0X0B18)&0x0F;if(0x0f!=key_null)while(0x0f!=key_null)key_null= (IO0PIN18)&0x0F;return 2;5 / 19IO0CLR=0x0F22;IO0SET=0X0718)&0x0F;if(0x0f!=key_null)while(0x0f!=key_null)key_null= (IO0PIN18)&0x0F;return 3;/* 掃描鍵盤的值,返回按鍵號real_row*/uint8 key_scan()if(0x0e=key_null)/line1有按鍵real_row=row_scan();/ 得到列

9、號return real_row;if(0x0d=key_null)/line2real_row=row_scan();return(real_row+4);if(0x0b=key_null)/line3real_row=row_scan();return(real_row+8);if(0x07=key_null)/line4real_row=row_scan();return(real_row+12);/* 中斷程序,有按鍵時運行*/void key_irq() _irq/UART0_SendByte(8);key_flag=1;EXTINT =0x01;6 / 19VICVectAddr=

10、 0x00000000;/wait the next buttonvoid wait_next()uint8 next;donext =(IOPIN116)&0x01;while(next);/ 等 next 按下才繼續(xù)運行/wait the clear buttonvoid wait_clear()uint8 next,clear;donext =(IOPIN116)&0x01;clear =(IOPIN118)&0x01;if(!clear)/ 若 clear 鍵按下set_line(0);clearscreen(1);clearscreen(2);/ 重新顯示坐標(biāo)軸,即清除圖像while

11、(next&clear);/next和 clear 其中一個按下繼續(xù)運行/wait the CONTINUS buttonvoid wait_continus()uint8 con;docon =(IOPIN117)&0x01;while(con);/ 等 continus 鍵按下7 / 19/*G01 直線插補, x, y,f 分別為 ,終點坐標(biāo) (x, y)和轉(zhuǎn)速f,起點為 (0,0)*/void G01(uint16 x,uint16 y,uint16 f)float f_i,f_new,k_g;uint16 x_i,y_i,number,i,show_time,k_x,k_y,show

12、_x,show_y;number=y+x;show_x=0;show_y=0;k_x=0;k_y=0;x_i=0;/ 起 點坐標(biāo)y_i=0;f_i=0;/ 斜率 kk_g = (float)y/x;for(i=0;i=0)/ 進給 +xx_i +=1;f_new=f_i-k_g;motor_x_p();/x 電機正轉(zhuǎn)一步k_x+;if(8=k_x)/ 若夠一圈k_x=0;show_x+;/x的 圈數(shù)加 1led_show_x(show_x);/led燈顯示 x 的圈數(shù)8 / 19else/ 進給 +yy_i +=1;f_new =f_i+1;motor_y_p();k_y+;if(8=k_y)

13、k_y=0;show_y+;led_show_y(show_y);DelayMs(show_time);/ 延 時 電 機轉(zhuǎn)一步的時間(ms)f_i=f_new;wait_continus();/ 是 否 繼 續(xù) ,continus 按下繼續(xù)/*G03 逆圓插補 */ void G03(uint16 x1,uint16 y1,uint16 x2,uint16 y2,uint16 f) uint16 k,x_i,y_i,number,show_time,k_x,k_y,show_x,show_y;float f_i,new_f_i;show_x=0;x_i=x1;y_i=y1;k_x=0;k_y

14、=0;f_i=0;show_time=(1000*60)/(8*f);number=x1+y2-x2-y1; / 總插補次數(shù) number for(k=0;k=0)new_f_i=f_i-2*x_i+1;x_i-;9 / 19k_x+;motor_x_r();if(8=k_x)k_x=0;show_x+;led_show_x(show_x);elsenew_f_i=f_i+2*y_i+1;y_i+;k_y+;motor_y_p();if(8=k_y)k_y=0;show_y+;led_show_y(show_y);f_i=new_f_i;DelayMs(show_time);wait_cont

15、inus();/*G02 順圓插補 */ void G02(uint16 x1,uint16 y1,uint16 x2,uint16 y2,uint16 f) uint16 k,x_i,y_i,number,show_time,k_x,k_y,show_x,show_y;float f_i,new_f_i;k_x=0;k_y=0;show_x=0;show_y=0;x_i=x1;y_i=y1;f_i=0;show_time=(1000*60)/(8*f);number=x2+y1-x1-y2;/ 總次數(shù)10 / 19for(k=0;k=0)new_f_i=f_i-2*y_i+1;y_i-;k_

16、y+;motor_y_r();if(8=k_y)k_y=0;show_y+;led_show_y(show_y);elsenew_f_i=f_i+2*x_i+1;x_i+;k_x+;motor_x_p();if(8=k_x)k_x=0;show_x+;led_show_x(show_x);f_i=new_f_i;DelayMs(show_time);wait_continus();11 / 19/* 檢測 G 代碼,返回 G 值 */ uint16 check_g(uint8 a40)uint16 check_k,g_value=0;for(check_k=0;check_k40;check_

17、k+)if(G=button_numberacheck_k)/ 檢查按鍵是否為Gcheck_k+=2;/ 檢查是 G01,或 G02,或G03g_value=(button_numberacheck_k-48);return g_value;/ 返回 1,或 2,或 3/* 檢測 G01 中的 x 值 */uint16 check_x(uint8 a40)uint16check_k,x_value=0,temp;for(check_k=0;check_k127)/UART0_SendStr(str);x_value=127;return x_value;/* 檢測 G01 中的 y 值 */u

18、int16 check_y(uint8 a40)12 / 19uint16 check_k,y_value=0,temp;for(check_k=0;check_k63)/UART0_SendStr(str);y_value=63;return y_value;/* 檢測速度f 的值 */uint16 check_f(uint8 a40)uint16 check_k,f_value=0,temp;for(check_k=0;check_k40;check_k+)if(F=button_numberacheck_k)check_k+;for(; !=button_numberacheck_k;c

19、heck_k+)temp=(button_numberacheck_k-48);f_value= 10*f_value+temp;return f_value;13 / 19/* 檢測 G02 G03 中的 x 值 */uint16 check_x1(uint8 a40)uint16 check_k,x1_value=0,temp=0;for(check_k=0;check_k127)/UART0_SendStr(str);x1_value=127;return x1_value;uint16 check_x2(uint8 a40)uint16 check_k,x2_value=0,temp=

20、0;for(check_k=0;check_k127)/UART0_SendStr(str);x2_value=127;return x2_value;/* 檢測 G02 G03 中的 y 值 */uint16 check_y1(uint8 a40)uint16 check_k,y1_value=0,temp=0;for(check_k=0;check_k63)/UART0_SendStr(str);y1_value=63;return y1_value;uint16 check_y2(uint8 a40)15 / 19uint16 check_k,y2_value=0,temp=0;for(

21、check_k=0;check_k63)/UART0_SendStr(str);y2_value=63;return y2_value;/*譯碼與執(zhí)行插補*/void operate(uint8 a40)uint16 operate_x,operate_y,operate_f,operate_g;uint16 operate_x1,operate_x2,operate_y1,operate_y2;operate_g=check_g(a);switch(operate_g)case 1:operate_x=check_x(a);/ 得到終點坐標(biāo)(x,y)和轉(zhuǎn)速 foperate_y=check_

22、y(a);operate_f=check_f(a);16 / 19G01(operate_x,operate_y,operate_f);/ 畫直線break;case 2:operate_x1=check_x1(a);operate_x2=check_x2(a);operate_y1=check_y1(a);operate_y2=check_y2(a);operate_f=check_f(a);G02(operate_x1,operate_y1,operate_x2,operate_y2,operate_f);/G02(0,60,60,0,300);/ 畫順圓break;case 3:oper

23、ate_x1=check_x1(a);operate_x2=check_x2(a);operate_y1=check_y1(a);operate_y2=check_y2(a);operate_f=check_f(a);G03(operate_x1,operate_y1,operate_x2,operate_y2,operate_f);break;/ 畫逆圓default :break;/* 清除數(shù)組 */void clear_number(uint8 a40)uint8 k;for(k=0;k40;k+)ak= ;DelayMs(5);17 / 19/*main函數(shù) */int main()i=0;motor_init();/x ;p0.1215 ,y:p0.2730 ,八個管腳都是輸出led_init();/p0.211為 X.Y 值得顯示引腳,初始化為全滅UART_init();key_init();/p0.16 為外部中斷0IO_set();/p1.2731為輸出lcd_init();/ 開顯示,起始行為0 行clearscreen(0);set_line(0);show_name();/ 顯示姓名信息selectscre

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論