
舵机控制:实验目的:通过可变电阻器电压的大小,控制舵机的运动(运动范围是0-180°)。实验原理:1,要想实现上述目的,需要使用Arduino的模拟输入通道和一个数字通道,模拟输入通道用来检测电压的变化,模拟量0--5V,转化成数字量为0-1023。这是因为Arduino的AD转换是10位的,数字通道是最为舵机的控制,驱动舵机进行动作。2,根据Arduino的通道情况,实验中使用数字通道4作为舵机的控制通道,使用模拟输入4作为模拟电压检测通道。3,由1中可知模拟通道转换之后的值是0-1023,舵机旋转的角度是0-180°。所以要把两个对应起来,简单的做法就是转换后的模拟信号乘以180/1023实验步骤:1, 按照实验原理需要搭建模型,具体如下图所示,这里Simulink模块的添加步骤就不在赘述。
LED闪烁实验:1,首先打开simulink软件,新建一个模型文件,命名test1。2,从Simulink库文件中找到Arduino的模块库,然后添加数字输出通道;从simulink库中找到脉冲发生器模块添加到新建的工程中。3,模型搭建完之后,相关模块进行配置,双击脉冲发生器模块和数字输出模块下图所示;脉冲发生器模块信号幅值设置为1,周期设置2s,占空比设置为50%;由于在Arduino Mega2560板子上,LED是接在数字13号引脚,所以模块设置引脚为13,设置完之后,板子上的LED灯会以2s为周期进行闪烁,亮1s,灭1s。4,模型至此搭建完成,接下来需要对模型进行配置,主要是配置基于Arduino Mega2560生代码的环境。5, 接下来就是生代码,并且把代码编译之后,下载到Arduino Mega2560板子中,然后板子就会按照前面步骤的设置进行闪烁,下载程序之前,首先确保板子和电脑连接上了。6.等待一会,下载完毕之后,会看到板子上的LED在闪烁。
接线:p3.6接srdp3.7接swr
p3.0接pin
p3.1接clk
ad0809的clk接脉冲
cs接8000h的译码电路程序:ad0809 xdata 8000h
org 0000h
ajmp main
org 0030h
main:mov dptr,#8000h
mov a,#01h
movx @dptr,a
call delay
movx a,@dptr
mov r0,a
call disp
call delay
call delay
call delay
ajmp maindisp:mov a,r0
anl a,#00001111b
acall dsend
mov a,r0
swap a
anl a,#00001111b
acall dsend
ret
dsend:mov dptr,#tab
movc a,@a+dptr
mov sbuf,a
jnb ti,$
clr ti
ret delay:mov r4,#250
delay1:mov r5,#250
djnz r5,$
djnz r4,delay1
ret
tab:db 03h 0
db 9fh 1
db 25h 2
db 0dh 3
db 99h 4
db 49h 5
db 41h 6
db 1fh 7
db 01h 8
db 09h 9
db 11h 灭
db 11h
db 0c1h
db 63h
db 85h
db 61h
db 71h
db 00h
end
//------------------------------------------------------------// ADC0809模数转换
//ADC0809采样通道3输入的模拟量,转换后结果显示在数码管上
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar code LEDData[]=
//ADC0809引脚定义
sbit OE=P1^0
sbit EOC=P1^1
sbit ST=P1^2
sbit CLK=P1^3
//延时
void Delayms(uint ms)
{
uchar i
while(ms--)for(i=0i<120i++)
}
//显示转换结果
void Display_Result(uchar d)
{
P2=0xf7
P0=LEDData[d%10]
Delayms(5)
P2=0xfd
P0=LEDData[d%100/10]
Delayms(5)
P2=0xfd
P0=LEDData[d/100]
Delayms(5)
}
// 主程序
void main()
{
TMOD=0x02
TH0=0x14
TL0=0x00
IE=0x82
TR0=1
P1=0x3f//选择ADC0809通道3(0111)
//高4位设通道地址为0111
while(1)
{
ST=0ST=1ST=0//启动转换
while(EOC==0) //等待转换结果
OE=1 //允许输出
Display_Result(P3) //显示A/D转换结果
OE=0 //关闭输出
}
}
//T0定时器中断给ADC0809提供时钟信号
void Timer0_INT() interrupt 1
{
CLK=!CLK//ADC0809时钟信号
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)