资源简介
利用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代码实现
相关资源
- 头文件reg51.h
- AT89C52 单片机 原理图
- 12864编程使用手册
- 430单片机的键盘液晶和dac902的结合程
- 常用的单片机原理图库与封装库
- 开关控制12864LCD串行模式显示
- MSP430控制LCD1602显示
- 单片机万年历制作全套资料
- 0.96 OLED波形显示
- C8051F单片机头文件.rar
- 字模软件CopyLeftByHorse2000
- ADC序列通道多次转换12864液晶程序ms
- 51单片机_DAC0832_多波形发生器汇编频率
- 出租车计价器 程序 单片机
- 51单片机实现蜂鸣器警车、救护车、消
- 发光二极管模拟汽车信号灯
- 基于51单片机RS485多机通讯
- 基于单片机的智能电能表设计
- CTD107蓝桥杯555方波计数器&&超声波测距
- 51系列单片机集成库
- 基于51单片机的智能闹钟
- 51单片机音乐闹钟程序秒表定时器整点
- 基于51单片机的RS485的从机系统的设计
- 基于51单片机的RS485从机系统设计
- 51单片机使用tlc2543测电压
- 掌讯3518-V006原版-增加强刷.救砖模式增
- 掌讯3518C增加强刷.救砖模式增量单刷
- 51单片机 简易电子时钟
- STM8S003单片机ADC多通道采样
- 作息时间控制器.zip
评论
共有 条评论