遥控汽车的编程c语言,智能小车循迹、避障、红外遥控C语言代码.docx

//智能小车避障、循迹、红外遥控C语言代码

// 实现功能有超声波避障, 红外遥控智能小车, 红外传感器实现小车自动循迹, 1602 显示小 车的工作状态,另有三个独立按键分别控制三种状态的转换

// 注:每个小车的引脚配置都不一样,要注意引脚的配置,但是我的代码注释比较多,看起 来比较容易一点

#include <>

#include <>

#include""

#include <>

#defineucharunsigned char

#defineuintunsigned int

uchar ENCHAR_PuZh1[8]=" uchar ENCHAR_PuZh2[8]=" uchar ENCHAR_PuZh3[8]=" uchar ENCHAR_PuZh4[8]=" uchar ENCHAR_PuZh5[8]="

run back stop left right ";

";//1602 显示数组

H.

H.

H.

uchar ENCHAR_PuZh6[8]=" xunji "; uchar ENCHAR_PuZh7[8]=" bizhang"; uchar ENCHAR_PuZh8[8]=" yaokong";

#define HWP2

#define PWM

/******************************

P1

//红外传感器引脚配置P2k 口

/* L298N管脚定义 */

超声波引脚控制 ******************************/ sbitECHO=P3A2;

sbitTRIG=P3A3;

/ 红外控制引脚配置 sbit sbit

uchar

KEY2=P3A7;

KEY仁 P3M;

state_total=3,state_2=0;//

2 为红外遥控

uchar

uchar

time_1 uchar 局变量

// 超声波接收引脚定义

// 超声波发送引脚定义

// 红外接收器数据线 // 独立按键控制 总状态控制全局变量

state_1,DAT; // 红外扫描标志位 time_1=0,time_2=0;// 定时器 1 中断全局变量 控制转弯延时计数也做延时一次

time,timeH,timeL,state=0;// 超声波测量缓冲变量

count=0;

//1602 显示计数

兼红外遥控按键 state_total =2

兼循迹按键 state_total= 0自动避障 state_total=10 为自动循迹模块 1 为自动避障模块

time_ 2 控制 PWM 脉冲计数

state 为超声波状态检测控制全

uint

/**************************/

unsigned charIRC0M[7];// 红外接收头接收数据缓存

unsigned charNumber,distance[4],date_data[8]={0,0,0,0,0,0,0,0};

/*********

void

void

void

IRC0M[2 ]存放的为数据

// 红外接收缓存变量

**/

IRdelay(char x);//x* 红外头专用 delay

run();

back();

void

stop();

void

left_90();

void

left_180();

void

right_90();

void

delay(uint dat);//

void

init_test();

void

delay_100ms(uint ms) ;

void

display(uchar temp);

void

bizhang_test();

void

xunji_test();

void

hongwai_test();

void

Delay10ms(void);

void

init_test()// 定时器 0

{

1 外部中断

// 超声波显示 驱动

0 1 延时初始化

TMOD=0x11;

TH1=0Xfe;

TL1=0x0c;

TF0=0;

TF1=0;

ET0=1;

ET1=1;

EA=1;

// 设置定时器 0 1 // 装入初值定时一次为

工作方式 1 16 位初值定时器

2000hz

// 定时器

// 定时器 // 允许定时器 // 允许定时器

0 方式 1 计数溢出标志

1 方式 1 计数溢出标志

0 中断溢出

1 中断溢出

// 开总中断

if(state_total==1)// 为超声波模块时初始化 {

TRIG=0;

ECHO=0;

EX0=0;

IT0=1;

} if(state_total==2)

// 发射引脚低电平

// 接收引脚低电平

// 关闭外部中断

// 由高电平变低电平,触发外部中断 0

// 红

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个基于CC2530芯片控制人体红外传感器的C语言程序: ```c #include "ZComDef.h" #include "OSAL.h" #include "OSAL_Tasks.h" #include "ZGlobals.h" #include "ZDApp.h" #include "ZDObject.h" #include "AF.h" #include "APS.h" #include "ZDProfile.h" #include "OnBoard.h" #include "hal_led.h" #include "hal_key.h" #include "hal_uart.h" #include "hal_board.h" #include "hal_types.h" #include "hal_adc.h" #include "hal_timer.h" #define APP_TIMER_EVENT 0x0001 #define APP_ADC_EVENT 0x0002 #define ADC_CHANNEL HAL_BOARD_IO_AD3 #define TIMER_INTERVAL 1000 byte appTaskID; uint16 appTimer; uint16 adcData; uint16 adcValue; static void appTimerCb( uint8 data ) { (void)data; osal_set_event( appTaskID, APP_TIMER_EVENT ); } static void appADCCb( uint8 channel, uint16 adcValue ) { (void)channel; (void)adcValue; osal_set_event( appTaskID, APP_ADC_EVENT ); } static void appInit( uint8 task_id ) { appTaskID = task_id; appTimer = osal_start_timerEx( appTaskID, APP_TIMER_EVENT, TIMER_INTERVAL ); halAdcSetReference( HAL_ADC_REF_AVDD ); halAdcSetResolution( HAL_ADC_RESOLUTION_10 ); halAdcSetChannel( ADC_CHANNEL ); halAdcSetEvent( appADCCb ); } static uint16 appProcessEvent( uint8 task_id, uint16 events ) { uint8 buf[10]; if ( events & APP_TIMER_EVENT ) { adcData = halAdcRead( ADC_CHANNEL, HAL_ADC_RESOLUTION_10 ); hal_uart_write( buf, sprintf( buf, "ADC value = %d\r\n", adcData ) ); appTimer = osal_start_timerEx( appTaskID, APP_TIMER_EVENT, TIMER_INTERVAL ); } if ( events & APP_ADC_EVENT ) { adcValue = adcData; } return 0; } static void appTask( uint8 task_id, uint8 event ) { (void)event; switch ( task_id ) { case ZDO_DEVICE_TASK_ID: break; case appTaskID: appProcessEvent( task_id, osal_clear_event( task_id, 0 ) ); break; default: break; } } void zmain( void ) { uint8 status; status = systemInit(); if ( status == ZSUCCESS ) { osal_init_system(); osal_set_clock_rate( 16000000ul ); osal_start_system(); } } ``` 这个程序使用了CC2530的ADC模块读取人体红外传感器的输出电压,并将其通过串口输出。你可以根据具体的传感器型号和使用环境进行修改,例如改变ADC通道、参考电压和分辨率等参数。 此外,如果需要在程序中添加其他功能,例如发送传感器数据到云平台或控制其他设备,可以参考TI提供的CC2530软件开发包和相关文档进行开发。 关于人体红外传感器的详细教程,可以参考以下链接: - [人体红外传感器应用原理及选型](https://www.cirmall.com/circuit/2008.html) - [人体红外传感器应用技巧](http://www.elecfans.com/daogou/158.html) - [人体红外传感器的原理和使用](https://www.jianshu.com/p/9319e7a18bba)

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值