资源简介
这个利用硬件测试和模拟仿真测试都可以,只要根据我在文件中的说明进行改动就可以了;硬件测试的时候我用的是6个传感器,就对6路模拟量都进行了转换。
代码片段和文件信息
/*模拟仿真的ADC0809连接的是P2口,输出连接的是P3口
实际测试的时候ADC0809连接的是P1口,输出是P3,注意要在下载程序之后再将ADC0809 的输出与P3口连接,不然会不能下载程序。
存在的问题是: 电机转速出现问题,断断续续的转动,似乎是电流不够的原因
*/
#include
#include
#define uc unsigned char
#define ui unsigned int
/*实际硬件测试使用*/
uc code table_motor[] = {0x400x600x200x080x180x10};//方向左转弯 直线 右转弯 后左转 后退 后右转
uc code table_port[] = {0x0f0x1f0x2f0x3f0x4f0x5f};//这里是选择通道0 1 2 3 4 5 // (P1口)低四位设置 0809的几个标志位 (OE、EOC、Start(ALE)、CLK)
/*模拟仿真显示使用*/
uc code table0[] = {0x3f0x060x5b0x4f0x660x6d0x7d0x070x7f0x6f0x770x7c0x390x5e0x790x71}; //共阴极数码管段定义
uc code table2[] = {0xf30x600xb50xf40x660xd60x7d0x700xf70xf60x770xc70x930xe50x970x17};
uc code table1[] = {0xfe0xfd0xfb0xf7}; //数码管位选*/
/*ADC0809相关引脚位定义 占用 7 + 8 + 2 (传感器电源输入)+ 2(电源)个引脚*/
sbit OE = P1^0;
sbit EOC = P1^1;
sbit ST = P1^2;
sbit CLK = P1^3;
sbit A = P1^4;
sbit B2 = P1^5;
sbit C = P1^6;
//A P2^4 B: P2^5 C: P2^6
/*电机模块占用引脚位定义 占用 6个引脚*/
sbit SCK = P2^0; //4脚 移位寄存器时钟
sbit RCK = P2^2; //12脚 锁存时钟 //11脚 电机 1 的使能端
sbit SI = P2^1; //8脚 数据输入
sbit EN = P2^5; //7使能端
sbit PW1 = P2^4; //电机1激活 11
sbit PW2 = P2^6; //电机2激活 3
/*模拟测试数字信号输出 利用74hc595扩展引脚*/
sbit SCK2 = P1^3;
sbit RCK2 = P1^5;
sbit SI2 = P1^7;
uc result[6] = {0}; //存储6路转换的结果
uc max = 1; //记录最大的转换结果的下标默认前进方向
void display(uc );
void Followlight();
/*延时函数*/
void delay(int ms)
{
uc i;
while(ms--)
{
for(i = 0;i < 110;i++)
;
}
}
/*找到最大转换结果的下标*/
void find_max()
{
uc i;
for(i = 0;i < 6;i++)
{
if(result[max] < result[i])
max = i;
}
}
/*转换实现 转换时间128us*/
void ADC0809_alter(uc i)
{
switch(i)
{
case 0:
P1 = table_port[0];
break;
case 1:
P1 = table_port[1];
break;
case 2:
P1 = table_port[2];
break;
case 3:
P1 = table_port[3];
break;
case 4:
P1 = table_port[4];
break;
case 5:
P1 = table_port[5];
break;
}
ST = 0;
ST = 1;
ST = 0; //启动转换
while( EOC == 0); //等待转换结束
OE = 1;//允许输出
result[i] = P3;
OE = 0;//关闭输出
ST = 1; //这里产生一个下降沿 清除寄存器
}
/*75hc595串行传输数据*/
void sendaction(uc d)
{
/*数据串行输入*/
int i = 0;
for(i = 0;i < 8;i++)
{
if(d&0x01)
SI = 1;
else
SI = 0;
d = d>>1;
SCK = 0;
_nop_();
_nop_();
SCK = 1;
}
/*锁存数据*/
EN = 0;//开启输出使能端
RCK = 0;
_nop_();
_nop_();
RCK = 1;
delay(100);
EN = 1;//关闭输出使能端
return;
}
//这里电机根据 max 控制小车转向
void motor_action(uc direct)
{
switch(direct)
{
case 0:
sendaction(table_motor[0]);//正左转
break;
case 1:
sendaction(table_motor[1]);//前进
break;
case 2:
sendaction(table_motor[2]);//正右转
break;
case 3:
sendaction(table_motor[3]);//后左转
break;
case 4:
sendaction(table_motor[4]);//后退
break;
case 5:
sendaction(table_motor[5]);//后右转
break;
}
return ;
}
//这
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2015-05-10 14:52 ADC0809andmotor\
文件 5112 2015-05-10 14:38 ADC0809andmotor\ADC_motorcontrol.c
文件 152349 2015-05-08 17:44 ADC0809andmotor\motortest1.dsn
- 上一篇:M1卡服务程序
- 下一篇:BT05蓝牙封装 AD库
相关资源
- 循迹+避障+寻光+金属检测智能小车
- Arduino红外循迹小车
- 智能小车循迹程序寻黑线
- 智能小车硬件课设循迹,避障,蓝牙
- 基于STM32的智能小车资料
- 基于STM32的智能小车设计
- 电动智能小车完整论文
- 树莓派智能小车教程 树莓派底板功能
- 基于FPGA的智能小车设计方案
- STM32-A0智能小车黑线循迹、避障、遥控
- 智能小车,四路循迹模块.pdf
- 基于arduino的蓝牙智能小车.zip
- 03年全国大赛 智能小车
- 基于Arduino的智能小车的火警系统代码
- 智能小车,黑线寻迹,PCB
- 基于STM32F103RCT6单片机的智能小车实验
- Arduino智能小车例程
- CC2530+DHT11+HCSR04+蜂鸣器+串口显示=简单
- 树莓派智能小车视频教程树莓派功能
- 基于stc51单片机的循迹智能小车程序
- 智能小车无线监控系统.vi
- 51单片机红外四路循迹小车程序
- 51单片机控制智能小车
- 基于arduino的跟随小车
- 智能小车测试程序.zip
- 基于Labview的智能小车控制平台
- 2011年全国大学生电子设计大赛C题(智
- 智能小车测速+12864显示 C程序
- 2011年全国大学生电子设计竞赛B题 智
- PI-Server+Client.rar
评论
共有 条评论