




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、#include #include #include funs.h/* 名称 : motor.c* 功能 : XY 轴电机正反转*/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 电机正转if(8=k_p)k_p=0;IO0CLR=0xF12;IO0SET=(motor_pk_p12);k_p+;void motor_x_r()/x
2、电机反转if(8=k_r)k_r=0;IO0CLR=0xF12;IO0SET=(motor_rk_r12);k_r+;void motor_y_r()/y 反转1 / 19if(8=j_r)j_r=0;IO0CLR=0xF27;IO0SET=(motor_rj_r27);j_r+;void motor_y_p()/y 正转if(8=j_p)j_p=0;IO0CLR=0xF27;IO0SET=(motor_pj_p27);j_p+;/* 名称 : UART.c* 功能 : UART 初始化和设置*/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,行的状态,本应全为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 按下才继续运行/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);/ 重新显示坐标轴,即清除图像while
11、(next&clear);/next和 clear 其中一个按下继续运行/wait the CONTINUS buttonvoid wait_continus()uint8 con;docon =(IOPIN117)&0x01;while(con);/ 等 continus 键按下7 / 19/*G01 直线插补, x, y,f 分别为 ,终点坐标 (x, y)和转速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;/ 起 点坐标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 电机正转一步k_x+;if(8=k_x)/ 若够一圈k_x=0;show_x+;/x的 圈数加 1led_show_x(show_x);/led灯显示 x 的圈数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);/ 延 时 电 机转一步的时间(ms)f_i=f_new;wait_continus();/ 是 否 继 续 ,continus 按下继续/*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; / 总插补次数 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;/ 总次数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;/*译码与执行插补*/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);/ 得到终点坐标(x,y)和转速 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;/* 清除数组 */void clear_number(uint8 a40)uint8 k;for(k=0;k40;k+)ak= ;DelayMs(5);17 / 19/*main函数 */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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年可再生能源在能源行业中的应用前景研究报告
- 2025年互联网科技行业人工智能技术发展前景研究报告
- 2025年激光条幅机行业研究报告及未来发展趋势预测
- 商场冬季安全培训内容课件
- 岗位聘任协议书9篇
- 山东省2025年山东中医药大学公开招聘工作人员(24人)笔试历年参考题库附带答案详解
- 宜昌市2025湖北宜昌市教育局所属事业单位急需紧缺人才引进校园(华中师范大学站)笔试历年参考题库附带答案详解
- 宁波市2025年浙江工商职业技术学院公开招聘11人笔试历年参考题库附带答案详解
- 国家事业单位招聘2025国家监管中心招聘高校应届毕业生及安排笔试历年参考题库附带答案详解
- 国家事业单位招聘2025中国康复研究中心招聘高层次人才拟聘用人员笔试历年参考题库附带答案详解
- 物流园区规章制度模版(2篇)
- 《多能源耦合供热系统》
- 《搞定:无压工作的艺术》完整课件
- 京东方岗位胜任力测评题库
- 印刷包装公司安全生产管理方案
- 高中数学64数列求和省公开课获奖课件市赛课比赛一等奖课件
- 二手车国庆节活动方案
- 人教版八年级上册地理教学计划及进度表
- 2025高考物理步步高同步练习必修3练透答案
- DZ∕T 0215-2020 矿产地质勘查规范 煤(正式版)
- 2024年初中升学考试九年级数学专题复习新课标要求-中考33讲
评论
0/150
提交评论