资源简介
利用51单片机控制双舵机,利用定时器0和定时器1分别控制水平和垂直方向的舵机,模拟实现云台的功能。内含分别利用T0和T1单独控制舵机的代码,利用数码管显示9度步进角,按键实现角度加减~

代码片段和文件信息
#include “reg52.h“
unsigned char count; //0.1ms次数标识
sbit pwm =P1^7 ; //PWM信号输出
sbit jia =P3^6; //角度增加按键检测IO口
sbit jan =P3^7; //角度减少按键检测IO口
unsigned char jd; //角度标识
unsigned char flag;
sbit dula=P2^6;
sbit wela=P2^7;
unsigned char code table[]={0x3f0x060x5b0x4f0x660x6d0x7d
0x070x7f0x6f0x770x7c0x390x5e0x790x71};
void delay(unsigned char i)//延时
{
unsigned char jk;
for(j=i;j>0;j--) //jiang jd=5fenli
for(k=125;k>0;k--);
}
void Time0_Init() //定时器初始化
{
TMOD = 0x02; //定时器0工作在方式2自动重装TH0的值
IE = 0x82;
TH0 = 0xa4;
TL0 = 0xa4; //11.0592MZ晶振,0.1ms
TR0=1; //定时器开始
}
void Time0_Int() interrupt 1 //中断程序
{
// TH0 = 0xfe; //重新赋值
// TL0 = 0x33;
{
if(count pwm=1; //确实小于,PWM输出高电平
else
pwm=0;
}
count=(count+1); //0.1ms次数加1
if(count==200) count=0; //次数始终保持为200 即保持周期为20ms
}
void keyscan() //按键扫描
{
if(jia==0) //角度增加按键是否按下
{
delay(30); //按下延时,消抖
if(jia==0) //确实按下
{
jd++; //角度标识加1
count=0; //按键按下 则20ms周期从新开始
if(jd==25)
jd=25; //已经是180度,则保持
while(jia==0); //等待按键放开
}
}
if(jan==0) //角度减小按键是否按下
{
delay(30);
if(jan==0)
{
jd--; //角度标识减1
count=0;
if(jd==0)
jd=1; //已经是0度,则保持
while(jan==0);
}
}
}
void display() //数码管显示函数
{
unsigned char baishige;
switch(jd) //根据角度标识显示相应的数值
{
case 1: //为1,角度为0,前3个数码管显示000
bai=0;
shi=0;
ge=0;
break;
case 2:
bai=0;
shi=4;
ge=5;
break;
case 3:
bai=0;
shi=9;
ge=0;
break;
case 4:
bai=1;
shi=3;
ge=5;
break;
case 5: //为5,角度为180,前3个数码管显示180
bai=1;
shi=8;
ge=0;
break;
}
dula=0;
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=3;
flag=0;
count=0;
pwm=0;
Time0_Init();
while(1)
{
keyscan(); //按键扫描
display();
}
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 1689 2004-03-27 13:30 多舵机\REG51.H
文件 1961 2008-02-17 00:06 多舵机\nmain.c
文件 2754 2008-02-16 23:50 多舵机\main.LST
文件 5115 2002-04-16 15:32 多舵机\STARTUP.A51
文件 7407 2008-02-17 00:06 多舵机\11.plg
文件 4333 2008-02-16 23:50 多舵机\main.OBJ
文件 4563 2008-02-17 00:04 多舵机\nmain.LST
文件 5946 2008-02-17 00:04 多舵机\nmain.OBJ
文件 5710 2008-02-17 00:04 多舵机\11
文件 914 2008-02-17 00:04 多舵机\STARTUP.obj
文件 1221 2008-02-17 00:06 多舵机\11.Opt
文件 11794 2008-02-17 00:04 多舵机\STARTUP.lst
文件 8054 2008-02-17 00:04 多舵机\11.M51
文件 1459 2008-02-17 00:04 多舵机\11.hex
....... 0 2008-02-16 22:54 多舵机\11_Uv2.Bak
文件 2081 2008-02-16 23:37 多舵机\11.Uv2
....... 1196 2008-02-16 23:37 多舵机\11_Opt.Bak
文件 1022 2008-02-16 23:50 多舵机\main.c
目录 0 2008-02-16 22:54 多舵机
文件 3080 2012-04-15 12:05 T1duoji.c
文件 3048 2012-04-15 11:29 T0duoji.c
----------- --------- ---------- ----- ----
73347 21
- 上一篇:编译原理课后答案蒋立源版
- 下一篇:图的深度优先搜索遍历c代码实现
相关资源
- 51 单片机 红外避障小车 大集合136
- 最新的北京地铁shp文件75146
- 程序员专用字体YaHei.Consolas.1.11b42517
- STC8951系列单片机中方指南
- 基于MCS_51单片机的工业屏柜散热方案
- 清翔电子MCS51开发板资料_新版 01_开发
- MCS_51单片机与8255A的接口设计
- Rtx51_tiny_RTOS中文版.pdf
- 飞思卡尔单片机MC9S12XS12G128驱动(硬件
- 51单片机PWM程序,占空比、周期可调整
- 单片机和adc0809数字电压表
- PIC单片机完成的电子密码锁
- 单片机、ADC0808809设计简易数字电压表
- 51单片机多功能自行车测速仪
- 单片机做的6位时分秒数字钟
- 单片机电子时钟 闹钟 日历
- proteus仿真 AT89C51输出各种波形
- 音乐代码转换软件 单片机编程时用
- 单片机课程设计 篮球计分器
- 00
- 用51单片机实现G代码翻译
- 简易的电阻电容测量电路
- 单片机与温度传感器DS18B20的程序设计
- 51单片机基于protues的几个仿真实例
- 基于52单片机的直流电压测量
- 38k单片机红外发送代码、keil
- 51单片机PCB设计图
- PC -- 单片机的串口数据传输系统设计
- 51模拟SPI读写SD卡(包括Fat和Fat32文件
- NRF24L01实现51与STM32双向通讯
评论
共有 条评论