1、 1 基于 LPC2114 控制步进电机转速以及角位移 (通过串口显示转速或者角位移 )凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 1.实验原理讲解 凌阳, 拇指 凌阳 ( 1)控制转速原理解析 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 如图所示 , 拇指本次选用步进电机最高转速为 360r/m, 拇指 步进角为 90 , 拇指 采用四相八拍故每来一个脉冲转 45 , 拇指 8个脉冲就转一圈 。 食指 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 要控制步进电机的转速就必须先要计算出对应转速下每来一个脉冲需要的时间 。 食指 凌阳, 拇指 凌阳 以 360r/m 为例 , 拇指 就需要 2880 脉冲 /
2、m, 拇指 用 60000ms 除以 2880 个脉冲则可以得到每来一个脉冲的时间约为 20.8333ms。 食指 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 为了精确定时 , 拇指 又可以执行其它任务 , 拇指 不像采用延时程序那样只能在当前执行延时 , 拇指 我采用定时器 0 中断处理 , 拇指初始化程序如下 :凌阳, 拇指 凌阳 void 凌阳, 拇指 凌阳 timer0_init() /定时器 0 初始化 凌阳, 拇指 凌阳 T0TC=0; 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇
3、指 凌阳 /默认 0 凌阳, 拇指 凌阳 T0PR=0; 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 /默认 0 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇
4、指 凌阳 凌阳, 拇指 凌阳 凌阳 ,拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇
5、指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳 ,拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 T0MCR=0X03; 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 /T0MCR=0X03, 拇指 匹配发生时 , 拇指 产生中断 , 拇指 并复位T0TC。 食指 凌阳, 拇指 凌阳 T0MR0=Fpclk/count; 凌阳, 拇指 凌阳 T0TCR=0X01; 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 /定时器控制寄存器 , 拇指 第一位为 1时 , 拇指 使能计数 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳凌
6、阳, 拇指 凌阳 T0PR=0 即每经过 1/Fpclk 秒 TC加一 , 拇指 所 以要匹配 Fpclk/count, 拇指 需要时间为( 1/Fpclk) *( Fpclk/count) =1/count 秒 , 拇指 就可以通过控制变量 count 进行控制脉冲时间 , 拇指 即可完成控制2 转速的任务 。 食指 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 看些 count 的变量范围: 凌阳, 拇指 凌阳 当转速为 360r/m 时 , 拇指每来一个脉冲的时间约为 20.8333ms, 拇指 count=1000/20.8333=48 凌阳, 拇指 凌阳 当转速为 60r/m 时 , 拇指
7、每来一个脉冲的时间约为 125ms, 拇指 count=1000/125=8 凌阳, 拇指 凌阳 当转速为 10r/m 时 , 拇指每来一个脉冲的时间约为 750ms, 拇指 count=1000/750=1.3333 凌阳, 拇指 凌阳 由此可知 count 范围为 048 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 为了在实际应用中可以精确控制到 048 包括带小数的量 , 拇指可以根据老师的提议 , 拇指 采用 AD转换来得到高精度的数 , 拇指 再赋值给 count 进行计时 , 拇指 老师还提议的用键盘输入个人感觉不如AD 控制精度高 , 拇指 因为键盘的如果要处理小数的程序十分复杂 ,
8、 拇指 实际应用中不好用 , 拇指 再三思虑还是觉得 AD 转换更加符合要求 。 食指 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 设 X 为转速 , 拇指 N 为每来一个脉冲所用时间 , 拇指 易推得X=60000/(8*N)=7500/N=7500/(1000/count)=7.5*count 凌阳, 拇指 凌阳 利用这个规律 , 拇指 当用 AD 处理到的 count 数值时 , 拇指 便可计算出其对应的转速 X, 拇指 送到串口进行显示 。 食指 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 控制角位移原理解析 凌阳, 拇指 凌阳 控制角位移相对与转速简单许多 , 拇指 也是利用 AD, 拇指
9、将得到的数值处理成合适的数后即将其作为转角的次数 , 拇指例如 AD 转换并加以处理数目为 48, 拇指 角位移即为 48*45=2160 , 拇指 需要 48个脉冲 , 拇指 而我们的步进电机采用的是四相八拍 , 拇指 所以设一个参考量初始值为 0, 拇指 每转一拍加一 , 拇指与 48比较 , 拇指 等于它的时候 , 拇指 设控制电机的口为高电平 , 拇指 即可使电机停止转动 , 拇指 就得到想要的角位移了 。 食指 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 程序方面实在是想不出让它固定住再改变位移角或者切换回控制转速 , 拇指 所以在那里做了个比较久的延时 , 拇指 可以看出是控制了那么多
10、位移角 , 拇指 再循环下去继续控制位移角 。 食指 这时就可以改变位移角或者控制转速了 。 食指实在想不出别的办法了! 凌阳, 拇指凌阳 3 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 如设计图所示 , 拇指 采用了三个外部中断 , 拇指 中断一控制电机启动与停止 , 拇指 中断二控制切换模式 ,拇指刚开始是控制转速 , 拇指 按下按键触发中断后变为控制角位移 , 拇指 中断三控制电机转动的方向 。 食指 凌阳, 拇指 凌阳 P0.27 做 AD 转换 , 拇指 P0.0,P0.1 串口通信 。 食指 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 PS:此设计有一弊端就是 , 拇指启动时必须先控制转速
11、 , 拇指 给一个转速驱动电机时 , 拇指 才能切换控制角位移 , 拇指 不能一开始就是控制角位移模式 , 拇指 但我觉得可以这样 , 拇指 先把电机调到你要 的转速下 , 拇指然后控制角位移 , 拇指 这样你预期的二者皆可控制 , 拇指 也是比较方便了 。 食指 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 实验总结:虽然这只是一个小实验 , 拇指 但是自己从小白开始 , 拇指 认真听课 , 拇指 自己去找资料和例子看 , 拇指 对着手册搜索相应功能的相应寄存器作用 , 拇指 不断百度一下 , 拇指 再结合 PPT, 拇指 终于从无从下手到渐入佳境 , 拇指 本次实验刚开始只是做了最基本的功能 ,
12、 拇指 但在老师的提议下 , 拇指 自己开拓思维 ,拇指 设计程序 , 拇指 经过调试总算把预期功能做出来了 , 拇指 实在收获很大 , 拇指 我想大学该学的就是这样一种思维能力 , 拇指 即使以后不从事这方面行业 , 拇指 但你所形成的思考方式 , 拇指 处理事的大体思维已经经过大学的历练深深刻入脑海 , 拇指 势必对以后的发展大有裨益 。 食指 很喜欢这种教学方式 , 拇指 感觉这才是大学的魅力所在! 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指
13、 凌阳 凌阳, 拇指 凌阳 4 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 程序清单: 凌阳, 拇指 凌阳 #include 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 “lpc21xx.h“凌阳, 拇指 凌阳 #define 凌阳, 拇指 凌阳 Fpclk 凌阳, 拇指 凌阳 13824000 凌阳, 拇指 凌阳 #define 凌阳, 拇指 凌阳 uint8 凌阳, 拇指 凌阳 unsigned 凌阳, 拇指 凌阳 char 凌阳, 拇指 凌阳 #define 凌阳, 拇指 凌阳 uint16 凌阳, 拇指 凌阳 unsigned 凌阳, 拇指 凌阳 int
14、 凌阳, 拇指 凌阳 #define 凌阳, 拇指 凌阳 uint32 凌阳, 拇指 凌阳 unsigned 凌阳, 拇指 凌阳 long 凌阳, 拇指 凌阳 int 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 char 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 strs=“The 凌阳, 拇指 凌阳 speed 凌阳, 拇指 凌阳 is 凌阳, 拇指 凌阳 : 凌阳, 拇指 凌阳 nr“; 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 /要传送的字符串 凌阳, 拇指 凌阳 char 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 strs1=“The 凌阳, 拇指 凌阳
15、angular 凌阳, 拇指 凌阳 rotation 凌阳, 拇指 凌阳 is 凌阳, 拇指 凌阳 : 凌阳, 拇指 凌阳 nr“;凌阳, 拇指 凌阳 uint8 凌阳, 拇指 凌阳 StepSelect=1; 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳,
16、拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 /励磁电流选择序号 , 拇指有 8 个励磁电流 凌阳, 拇指 凌阳 uint8 凌阳, 拇指 凌阳 MotorStep0=0x3
17、0,0x20,0x60,0x40,0xC0,0x80,0x90,0x10; 凌阳, 拇指 凌阳 /正转步调 凌阳, 拇指 凌阳 uint8 凌阳, 拇指 凌阳 MotorStep1=0x30,0x10,0x90,0x80,0xC0,0x40,0x60,0x20; 凌阳, 拇指 凌阳 /反转步调 凌阳, 拇指 凌阳 uint8 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 dir=0; 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 /dir 作为正反转标志 凌阳, 拇指 凌阳 float 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 count=8.00; /经过计算从 60r/m 到 360r/m 凌阳, 拇指
18、 凌阳 脉冲时间为 凌阳, 拇指 凌阳 125ms/脉冲对应 count=8 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳20.833ms/脉冲对应 count=48 凌阳, 拇指 凌阳 uint16 凌阳, 拇指 凌阳 count1=0; 凌阳, 拇指 凌阳 /用于控制角位移 凌阳, 拇指 凌阳 uint32 凌阳, 拇指 凌阳 temp; /temp 变量用来存储 ADC 转换结果 (数字 )凌阳, 拇指 凌阳 uint32 凌阳, 拇指 凌阳 out; 凌阳, 拇指 凌阳 /out用来存储要通过串口显示的数字 凌阳, 拇指 凌阳 float 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 time;凌
19、阳, 拇指 凌阳 uint8 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 start=0,change=0;凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 void 凌阳, 拇指 凌阳 delay(uint8 凌阳 ,拇指 凌阳 time) 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 /延时 凌阳, 拇指 凌阳 uint32 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 i; 凌阳, 拇指 凌阳 for(;time0;time-)凌阳, 拇指 凌阳 for(i=0;i6)凌阳, 拇指 凌阳 凌阳,
20、 拇指 凌阳 out=(temp*4805)/1024;凌阳, 拇指 凌阳 8 凌阳, 拇指 凌阳 time=(out*1.00)/100; 凌阳, 拇指 凌阳 /保留两位小数 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 count=time;凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 out=7.50*count; 凌 阳, 拇指 凌阳凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 if(start=0) 凌阳, 拇指 凌阳凌阳, 拇指 凌阳 uart0_tstr();凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 uart0_tbyte(0X30); 凌阳, 拇指 凌阳凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 ua
21、rt0_tbyte(r);凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 uart0_tbyte(/);凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 uart0_tbyte(m);凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 uart0_tbyte(0x0d); 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 /换行 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 uart0_tbyte(r); 凌阳, 拇指 凌
22、阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 /空一行 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 else 凌阳, 拇指 凌阳凌阳, 拇指 凌阳 uart0_tstr(); 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 if(dir=0)uart0_tbyte(0x2b);凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 else 凌阳, 拇指 凌阳 uar
23、t0_tbyte(0x2d);凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 uart0_tbyte(out/100+0X30); 凌阳, 拇指 凌阳 /输出百位 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 uart0_tbyte(out%100)/10+0X30); 凌阳, 拇指 凌阳 /十位 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 uart0_tbyte(out%100)%10+0X30); 凌阳, 拇指 凌阳 /个位 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 uart0_tbyte(r);凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 uart0_tbyte(/);凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 ua
24、rt0_tbyte(m);凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 uart0_tbyte(0x0d); 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 /换行 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 uart0_tbyte(r); 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌
25、阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 /空一行 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 delay(10);凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 void 凌阳, 拇指 凌阳 angula(void) 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 /控制角位移 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 if(start=0)IOSET0=0XF0;凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 else 凌阳, 拇指 凌阳 run1();凌阳, 拇指 凌阳 凌阳,
26、 拇指 凌阳 凌阳, 拇指 凌阳 while(ADDR凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 temp=ADDR;凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 temp=(temp6)凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 out=(temp*5005)/1024;凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 time=out/100; 凌阳, 拇指 凌阳 /保留两位小数 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 count=time;凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 out=45*
27、count; 凌阳, 拇指 凌阳凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 if(start=0) 凌阳, 拇指 凌阳凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 uart0_tstr1();凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 uart0_tbyte(0X30); 凌阳, 拇指 凌阳凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 uart0_tbyte(0x27);凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 uart0_tbyte(0x0d); 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳,
28、拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 /换行 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 uart0_tbyte(r); 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 /空一行 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 9 凌阳, 拇指 凌阳 凌阳, 拇指
29、凌阳 else 凌阳, 拇指 凌阳凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 uart0_tstr1(); 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 if(dir=0)uart0_tbyte(0x2b);凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 else 凌阳, 拇指 凌阳 uart0_tbyte(0x2d);凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳
30、 uart0_tbyte(out/1000+0X30); 凌阳, 拇指 凌阳 /输出千位 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 uart0_tbyte(out%1000)/100+0X30); 凌阳, 拇指 凌阳 /百位 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 uart0_tbyte(out%1000)%100)/10+0X30); 凌阳, 拇指 凌阳 /十位 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 uart0_tbyte(out%1000)%100)%10+0X30);
31、凌阳, 拇指 凌阳 /个位 凌阳, 拇指 凌阳 凌阳 ,拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 uart0_tbyte(0x27);凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 uart0_tbyte(0x0d); 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 /换行 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇
32、指 凌阳 uart0_tbyte(r); 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 /空一行 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 delay(10);凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 int 凌阳, 拇指 凌阳 main(void)
33、 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 /主程序 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 PINSEL0=0xA00C0005; 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 /设置所有引脚连接 GPIO 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳
34、凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 PINSEL1=122;凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 IODIR0=0X4F0; 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳,
35、拇指 凌阳 凌阳, 拇指 凌阳 /设置所有 IO控制口为输出 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 VICIntSelect=0x00000000; 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 /设置所有通道为 IRQ 中断 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 VICVectCntl0=0x2F;凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳
36、VICVectAddr0=(int)IRQ_Eint1; /中断 1 设置 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 VICVectCntl1=0x30;凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 VICVectAddr1=(int)IRQ_Eint2; /中断 2 设置 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 VICVectCntl2=0x31;凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 VICVectAddr2=(int)IRQ_Eint3;
37、 /中断 3 设置 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 VICIntEnable=0x00038000; 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 /使能 EINT1.2.3中断 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 EXTINT=0x0f; 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指
38、 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 /清除外部中断 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 timer0_init(); 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 /定时初始化 凌阳, 拇指
39、 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 uart0_init();凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 adc_init(); /ADC 初始化 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 delay(5);凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 while(1)凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 T0MR0=Fpclk/count;凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 T0TCR=0
40、X01;凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 while(T0IR 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 /等待定时时间到 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 T0IR=0x01; 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇
41、指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌 阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 /清除中断标志 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 IOCLR0=0X400;凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 if(change=0)cnlspeed(); 凌阳, 拇指 凌阳 /如果 change=0, 拇指 就执行控制转速 凌阳,
42、拇指 凌阳 凌阳, 拇指 凌阳 else 凌阳, 拇指 凌阳 angula(); 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 /如果 change! =0, 拇指 就执行控制角位移 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 ADCR=ADCR|(124); 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 10 凌阳, 拇指 凌阳凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳 凌阳, 拇指 凌阳