智能小车舵机控制
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
// 只利用一个定时器T0 ,定时时间为,定义一个角度标识,数值为1 、2、3、4、5,// 实现、1ms、、2ms、高电平的输出,再定义一个变量,数值最大为40 ,实现周期为// 每次进入定时中断,判断此时的角度标识,进行
// 相应的操作。比如此时为5 ,则进入的前5 次中断期间,信号输出为高电平,即为
// 高电平。剩下的35 次中断期间,信号输出为低电平,即为的低电平。这样总的时间// 是
20ms,为一个周期。
// 用51 板上s1 和s2 按键
// 用P1^7 输出PWM信号控制舵机
#include ""
sbit dula=P2^6;
sbit wela=P2^7;
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e
void delay(unsigned char i)// {
unsigned char j,k;
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}
void Time0_Init() //
{
TMOD = 0x01; //
IE= 0x82;
TH0= 0xfe;
TL0= 0x33; //
TR0=1; //
}
void Time0_Int() interrupt 1 //
{
TH0 = 0xfe; //
TL0 = 0x33;
if(count pwm=1; // else pwm=0; // count=(count+1); // count=count%40; // 延时 定时器初始化 定时器0 工作在方式1 晶振,定时器开始 中断程序 重新赋值 判断次数是否小于角度标识 确实小于,PWM输出高电平大于则 输出低电平 次数加1 次数始终保持为40 即保持周期为20ms 20ms。 的 unsigned char count; // sbit pwm =P1^7 ; //PWM sbit jia =P3^0; // sbit jan =P3^1; // sbit jianwei=P3^4; // unsigned char jd; // 次数标识 信号输出角度增加按键检测IO 口角度减少按键检测IO 口按键位 角度标识 按键扫描 角度增加按键是否按下 按下延时,消抖 确实按下 角度标识加 1 按键按下 则 20ms 周期从新开始 已经是 180 度,则保持 等待按键放开 角度减小按键是否按下 , 角度标识减 1 已经是 0 度,则保持 数码管显示函数 根据角度标识显示相应的数值 为 1 ,角度为 0,前 3 个数码管显示 ge=0; break; case 2: bai=0; shi=4; ge=5; break; case 3: bai=0; shi=9; ge=0; } void keyscan() // { if(jia==0) // { delay(10); // if(jia==0) // { jd++; // count=0; // if(jd==6) jd=5; // while(jia==0); // } } if(jan==0) // { delay(10); if(jan==0) { jd--; // count=0; if(jd==0) jd=1; // while(jan==0); } } } void display() // { unsigned char bai,shi,ge; switch(jd) // { case 1: // bai=0; shi=0; 000 break; case 4: bai=1; shi=3; ge=5; break; case 5: // bai=1; shi=8; ge=0; break; } dula=0; 为5,角度为180 ,前 3 个数码管显示 180 P0=table[bai]; dula=1; dula=0; wela=0; P0=0xfe; wela=1; wela=0; delay(5); P0=table[shi]; dula=1; dula=0; P0=0xfd; wela=1; wela=0; delay(5); P0=table[ge]; dula=1; dula=0; P0=0xfb; wela=1; wela=0; delay(5); } void main() { jd=1; jianwei=0; count=0; Time0_Init(); while(1) { keyscan(); // display(); } 按键扫描