1.题目要求
为了使ADC的知识能配合其他模块实现不同功能,这里我们打算通过扭动电位器(滑动变阻器)来控制舵机桨的位置,如果我们顺时针扭一圈电位器,那么舵机桨也会跟着从一端旋转到另一端。
2.main.c测试代码
#include #include //详见第六章第8讲#include //详见第八章第11讲#include //详见第十一章第3讲#include //详见第十四章
sbit PWMOUT=P1^7; //舵机信号线接口
u8 flag20ms = 0;
u8 PWM_VAL = 0;
void main()
{
u8 val;
u8 str[10];
EA = 1;
InitLcd1602(); //初始化液晶屏
TIM1_Init(20000,6); //定时20ms,6是微调使定时精度更高
TIM0_Init(100,9); //定时0.1ms,舵机专用,9是微调使定时精度更高
LcdShowStr(6, 0, "AIN0");
while (1)
{
if (flag20ms) //每隔20ms获取一次ADC通道0的转换值
{
flag20ms = 0;
val = GetADCValue(0); //获取ADC通道0的转换值
ValueToString(str, val); //转为字符串格式的电压值
LcdShowStr(6, 1, str); //显示通道0的电压
PWM_VAL=val/14+5; //此时PWM_VAL的取值范围是5~23
}
}
}
void TIM0_IRQHandler() interrupt 1
{
static u8 pwm=0;
TH0 = T0RH; //重新加载重载值
TL0 = T0RL;
pwm++;
if(pwm>=200)pwm=0; //pwm在0~199之间间隔0.1ms变化,周期为20ms
if(pwm else PWMOUT=0;}
void TIM1_IRQHandler() interrupt 3
{
TH1 = T1RH; //重新加载重载值
TL1 = T1RL;
flag20ms = 1;
}
我们把上一章测试AD,DA所拔下的跳线帽插回去先。开发板底部中间处有一个电位器,大家用一字螺丝刀来旋转电位器就可以观察到舵机桨跟着旋转了。此外舵机的电源供电最好使用外部电源,用开发板来给舵机供电会导致液晶屏失压闪烁,而且舵机的稳定性也不是很好,笔者测试的时候是使用另外的5V电源电压给舵机供电,连接图如下
关键字:51单片机 电位器 控制舵机
引用地址:
51单片机-电位器控制舵机
推荐阅读最新更新时间:2024-11-10 17:31
MCS-51单片机实用子程序库--浮点数除法
标号: FDIV 功能:浮点数除法 入口条件:被除数在 中,除数在 中。 出口信息:OV=0时,商仍在 中,OV=1时,溢出。 影响资源:PSW、A、B、R2~R7、位1EH、1FH 堆栈需求: 5字节 FDIV: INC R0 MOV A,@R0 INC R0 ORL A,@R0 DEC R0 DEC R0 JNZ DIV1 MOV @R0,#41H;被除数为零,不必运算 CLR OV RET DIV1: INC R1 MOV A,@R1 INC R1 ORL A,@R1 DEC R1 DEC R1 JNZ DIV2 SETB OV ;除数为零,溢出 RET DIV2: LCALL MVR0 ;将 传送到第一工作区中 MOV A,
[单片机]
51单片机操作LCD1602
1602型液晶接口信号说明如下: 编号1(VSS):电源地 2(VDD):电源正极 3(VO):液晶显示对比度调节 4(RS):数据/命令选择端 5(R/W):读写选择端 6(E):使能信号 7-14(D0-D7):数据口 15(BLA):背光电源正极 16(BLK):背光电源负极 步骤: 1、写命令 2、写数据
[单片机]
51单片机-蜂鸣器
蜂鸣器是一种一体化的电子讯响设备,主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型,他广泛应用于计算机, 打印机,复印机,报警器,电话机等电子设备中做报警器件。单片机上使用的蜂鸣器一般都是电磁式无源蜂鸣 器。如图: 它由振荡器,电磁线圈,磁场,振动膜片,外壳等组成。接通电源后,振荡器产生的音频信号电流通过电磁线圈, 使电磁线圈产生磁场,振动膜片在电磁线圈和磁铁的共同作用下,周期性的振动发声。 这是蜂鸣器的原理图,PNP型三极管,这个图里是一个典型的开关管,E极接VCC,B极接一个限流电阻,三极管 的B极不能承受大的电流所以加上一个限流电阻,电流从VCC流向E极,如果B极是低电平则导通,电流从E极流过 C极到达
[单片机]
C51单片机定时器T0,T1的常用基本设置
有时候带手机不方便,可以又想知道时间,这时候可以用蜂鸣器做一个音频的时间提醒器,每60秒发一声提醒 提醒器计时可以使用单片机的定时器T0、T1来做,计时的定时器用T1来做,工作在方式2(8位自动装载),系统运行提示的定时器用T0来做,工作在方式1(16位定时) 代码如下 #include reg52.h #define uint unsigned int #define uchar unsigned char #define time_set0 5000//设置定时器0的计时长度 #define th0 (65536-time_set0)/256//计算定时器高8位装入值 #define tl0 (65
[单片机]
51单片机学习:ADC模数转换实验--外部通道电压采集
实验名称:ADC模数转换实验--外部通道电压采集 接线说明: 实验现象:下载程序后,数码管上显示AD模块采集外部通道AIN3的电压值 注意事项: ***************************************************************************************/ #include public.h #include smg.h #include xpt2046.h /******************************************************************************* * 函 数 名 : main * 函数功能 :
[单片机]
51单片机中断源的扩展方法
一、采用硬件请求和软件查询的方法: 这种方法是:把各个中断源通过硬件“或非(高有效,如CD4002)”(与,低有效)门引入到单片机外部中断源输入端(INT0或INT1),同时再把外部中断源送到单片机的某个输入输出端口,这样当外部中断时,通过“或非”(与)门引起单片机中断,在中断服务程序中再通过软件查询,进而转相应的中断服务程序。 显然,这种方法的中断优先级取决于软件查询的次序。其硬件连接和软件编程如下: Void zhongduan (void) interrupt 0 using 3 //中断函数 { EX0=0;//关中断 If(P0_0=1) { *****}//中断查询 If(P0_1=1) {
[单片机]
基于51单片机的电子时钟课程设计
第一章 设计目的及要求 1.目的 通过对电子时钟系统进行编程与Protues仿真,进一步掌握单片机的组成,P1、P0、P2、P3口的应用,蜂鸣器的应用,定时中断程序的编写及应用,对之前学习的单片机课程进行回顾与应用;初步掌握Protues仿真方法以及用keil软件编写程序的方法。 2.题目与要求 本次课程设计的题目为:电子时钟的设计,其具体要求为: (1)能实现时、分、秒的显示; (2)能实现12、24小时制的切换; (3)能设定时间; (4)能设定闹钟; 整个系统要设计键盘和显示器,利用单片机内部时钟完成定时器的定时设计。 第二章 理论基础 1.AT89C52芯片 AT89C52芯片的引脚图如图1所示。 图1 AT
[单片机]
MCS-51单片机定时器/计数器基础详述
MCS-51子系列单片机有2个定时器/计数器,即定时器/计数器0和1,52子系列单片机(8032/8052)除了有上述2个定时器/计数器外,还有一个定时器/计数器2,后者的功能比前两者强。 1 定时器/计数器0和1 在专用寄存器TMOD(定时器方式)中,有一个控制位(C/T),分别用于控制定时器/计数器0和1是工作在定时器方式还是计数器方式。 1. 输入信号基本要求:24个振荡周期,即两个机器周期; 2. 作为定时器时,计数速率是 振荡频率/12; 3. 由定时器/计数器模式控制寄存器设置工作方式。 2 定时器/计数器2(自己阅读) 定时器/计数器2是一个具有16位自动重装载或捕获能力的定时器/计数器。专用寄存器
[单片机]