带摄头GPS行车控制器设计
中文题目
摘
课题核心行车单片机控制系统该系统采4红外探测头进行循迹避障循迹中利黑色光线反射率特点面颜色黑色时障碍物光线会反射样避障程中红外光反射回时传感器会点亮灯输出低电0超声波测距较相似控制口发出高电接收口会高电输出样计算出距离
关键词:智车红外避障黑线循迹超声波测距避障
Abstract
This topic is at the heart of the car by single chip microcomputer control system the system USES four infrared detection head tracking and obstacle avoidance use black to light reflectivity in the tracking this characteristic when the surface color is not black in the reflection characteristics of obstacle avoidance of obstacles to light with an obstacle on the surface of the current the infrared sensor to launch out by most reflected The sensor outputs low level 0 and lights up the lamp At the same time the ultrasonic probe is used for ranging and obstacle avoidance When the control port emits a high level it can wait for the high level output at the receiving port so as to calculate the distance
Keywords smart car Infrared obstacle avoidanceBlack line trackingUltrasonic distance measurement and obstacle avoidance
目录
1前言 6
11 设计目意义应达技术求 6
12 设计国外发展概况存问题 7
13 设计应解决问题 7
2设计 8
21设计原理 9
22方案选择 15
221分析问题 15
222设计程 16
3结 22
参考文献 23
致谢 24
附录 25
1前言
21世纪类研究单品机方式正进行场前未世纪革命次革命中会社会产生巨革命印刷术产生影响更电气革命基础迎世界第四次伟革命现世界已单片机包围未察觉生活中手机计算机洗衣机板空调中少配12部单片机较型工业控制系统中甚会百台运行未单片机运更加广泛汽车水龙头电饭煲电灯会包含说会巨发展空间
11设计目意义应达技术求
设计智车目通红外发射接收达动避障通超声波达测距避障动化智化基础求软件硬件结合C语言编程通学单片机类巩固加深理解前理提高动手力增强安装调试水够编写程序学控制里面资源懂软硬件联系日学工作基础
12设计国外发展概况存问题
121研究现状意义
着工业40时代单片机工智解探索断加深量公司开始投入研究生产智车现实生产生活中越越越广泛工厂运输快递便捷离开智典型新型高科技更驾驶基础集众知识领域学科交叉结合体环境感知规划决策动驾驶等世界许国家20年前开始研发中国开始重视取成
122设计应解决问题
解决程序硬件结合问题:程序实现特定目标解决特定问题计算机语言编写命令序列集合写出意思执行事情做事情次解决车红外避障黑线循迹超声波测距问题
2设计
(1)掌握单片机电路结构功特性基础利单片机C51通Keil软件编写程序烧录软件车种行动方式功通动手安装车学单片机理知识编写程序
(2)采C51开发板车功进行设计通车底板部位调试设计烧入程序运行通车实验测试成功终完成结构设计图21
图21 图中P7接法:
IN1接实验板P12
IN2接实验板P13
EN1接实验板P14
EN2接实验板P15
IN3接实验板P16
IN4接实验板P17
J3接法:
IN5接实验板P21
IN6接实验板P20
P4接法:
OUT1接实验板P32
OUT2接实验板P33
OUT3接实验板P34
OUT4接实验板P35
电源接法:
P1(4VCC 4GND 选)
VCC接实验板 VCC 引脚
GND接实验板 GND 引脚图21 P7:
21设计原理
211红外避障:
车左右两边两组红外发送装置车红外避障功红外探头感知周围障碍物障碍时收红外反射光线区时烧入程序进单片机控制车进行避障利红外光物体反射功判断黑白
1 根反射特点反射回光会传感器输出低电0时L4L5灯会点亮
2 前面空旷情况红外光反射回少时传感器输出1
3什传感器输出01判断否存障碍物然进行避障
原理图:
图2223红外发射发射光线然接收光线接受红外线根障碍物进行改变然电阻会变电压变
图22 红外检测电路
图23 红外检测发射接受电路
图24通IN3IN4检测模块提示模块:
电压参考电压会输出高电指示灯会灭
电压相时输出低电指示灯亮
图24 检测提示电路
212黑线循迹:
车背两红外探测探测面实现黑白线识黑线相红外光吸收时传感器会输出高电1果黑线白色区域红外光量返回样传感器会输出0否黑线保持循迹传感器高者低电调节
原理图:
图25 红外检测电路
图26 红外发射接受电路
图27P2P3车头前方底板传感器通红外接受RC1接收信号改变身阻值时IN3值改变然图中IN3接口
图27
213超声波测距避障
超声波种波频率高指性强超声波测距原理默认波速度概光速通车超声波探头发射超声波测量碰障碍物返回时间然计算出发射点障碍物实际距离知道点外点时间速度时间算出回距离二需距离速度已知时间已知距离计算果精确测量考虑环境温度问题
模块工作原理:
(1)首先IO口触发Trig引脚段发送等10us 高电超声波模块收信号会认外界控制开始工作时发出超声波脉脉40KHZ
(2)超声波模块部行测试完毕段时间时超声波部通IO Echo输出高电图28时序图里面测少高电时间回时间少
图28时序图硬件软件结合紧密方首先触发信号引脚Trig中发送10UsTTL触发信号10us全部高电时波型代表脉高电软件中直接输出1然延迟时模块部圆形探头会发出840khz脉接着输出高电直收840KHZ止然立马Echo引脚输出高电检查距离约信号持续时间越长
图28 超声波时序图
电路原理图:
图29 发射接收电路
图图30 IO口:单片机IO口相连P20P21直接接线开发板中P20Echo接收端接收端P21指持续接收高电通高电时间判断超声波运行时间控制端控制端发送10US信号控制
图210 单片机IO口
22方案选择
红外避障黑线循迹:
PWM调速样车速度选择变化特避障黑线循迹中车速度必须控制PWM调速果车太快传感器反应行动间车速快足调整车会撞障碍物
超声波测距避障:
电压般5V数元器件工作电压开发板工作电压需电流2mA前方整体探测角度15度探测距离高精度厘米级
表21 超声波电气参数表
221分析问题
1红外避障:
太阳光直射中光线太强会较影响红外线耳朵身原外传感器灵敏度问题果灵敏度高话相微弱反射光线检测认障碍物时候需调低中间程度根调电阻调节
2循迹:
会出现黑线传感器感应黑线情况黑线传感器灵敏度调太高应该调低灵敏度样检测黑线灵敏度太高黑色反射红外光传感器识
3超声波测距
(1)测距时测物体面积05方米然测
(2)果带电连接时会影响模块正常工作
(3)程序插液晶屏需P07杜邦线接
222设计程
1设计基础:
首先学keli明白录入程序话必须先保存电脑文件里然KELI中存入main明白创造性提出问题学计算机重性次懂软件中找问题循环中时序控制明白写法做什检测键盘输入轻触开关种电子开关时轻轻开关钮开关接通松开手时开关断开开关图:
P30—P37 双功口(置拉电阻)
具特定第二功第二功时普通通准双IO口键盘分类独立式键盘电路原理
编写简单键盘输入程序: KEY1LED显示出信号
读端口读Pn端口寄存器读引脚读该引脚Pn端口寄存器中应位通引Pn端口寄存器值者引Pn端口寄存器中应位实现读端口者读引脚IF语句
键盘输入检测种基方法:轮询法
键释放时输入信号抖动现象进行键盘软件消抖
键般利机械触点闭合断开作机械触点弹性作闭合断开瞬间均右抖动程抖动时间般5—10mS稳定闭合时间操作员键动作决定般零点秒秒保证单片机次闭合仅作次键输入操作必须编程时候编写必程序代码抖动影响称键盘软件消抖
2模块调试:
(1) 避障模块:W1(W2)两电位器组成L4(L5)信号指示灯左(右)光电传感器组成 L4信号灯接收低电亮没高电
W1左光电信号强度调节时针测远逆时针 W2右光电信号强度调节理
(2)黑白线识模块调试: W3(W4)电位器L2(L3)信号指示灯左光电传感器组成 中间两灯方片白色时探测器接收会发出低电灯亮方条黑线时时红外反射量偏传感器会输出高电灯灭 W3左光电信号强度调节时针测远逆时针 W4右光电信号强度调节理
(3)电机模块调试:般需调试调试
图211 电机电路
3软件设计
(1)车动作
图31 车前左右动作图
(2) 黑线循迹流程图:
图32 红外循迹图
(2)红外避障流程图:
图214 红外避障图
(4)超声波测距:
图215 超声波测距图
(5)超声波避障:
图216 超声波避障图
3结
通原理图实验操作分析出红外循迹避障间关系红外发送接收完成硬件通滑动电阻调节灵敏度指示灯亮起时候信号输出低着探测方位面前方第二循迹话需没信号灯灭判断黑线位置避障需灯亮信号判断位置循迹需精细调节左右避障需转弯电机速度会更快终该车实现功板黑线循迹红外避障车身前部超声波循迹避障
参考文献
杨阳民编著亚博科技北京理工学出版社2002年4月第版
蒋明编著单片机原理应清华学出版社2018年2月第1版
张志良编著单片机原理控制技术第二版机械工业出版社2014年5月第1版
周立功编著单片机基础实验指导书广州周立功单片机发展限公司出版社2016年3月第1版
杨志忠编著模拟电子技术 高等教育出版社出版2012年8月第1版
严雨编著新编51单片机C语言实战教程电子工业出版社2017年4月第1版
张俊涛数字电路逻辑设计清华学出版社2017年7月第1版
崔岩松电路设计仿真PCB设计清华学出版社2019年8月1日
谭浩强C程序设计清华学出版社2017年9月第五版
史蒂夫卢奇工智民邮电出版社2018年9月第1版
谢 辞
时学期毕业设计结束意味者北京理工学珠海学院学生涯结束毕业设计段时间里身提高中包含电气电子电路理解软件编程理解运硬件软件结合许新感悟更加解单片机C语言行业创造发展关方面书籍认识学新思维帮助等等然益指导老师蒋伟荣力帮助身学中断指出错误点点指导现成果希继续加深学
附 录
(1)车动作程序:
#include
定义智车驱动模块输入IO口
sbit IN1P1^2 高电1 退(反转)
sbit IN2P1^3 高电1 前进(正转)
sbit IN3P1^6 高电1 前进(正转)
sbit IN4P1^7 高电1 退(反转)
sbit EN1P1^4 高电
sbit EN2P1^5 高电
void delay(unsigned int xms)
{
unsigned int ij
for(ixmsi>0i) ixms延时约xms毫秒
for(j112j>0j)
}
void run(void) 前进函数
{
EN11
EN21电机
IN10
IN21 左电机正转
IN31
IN40右电机正转
}
void back(void) 退函数
{
EN11
EN21电机
IN11
IN20 左电机反转
IN30
IN41右电机反转
}
void right(void) 右转函数
{
EN11
EN21电机
IN10
IN21 左电机正转
IN30
IN40右电机动
}
*void right(void) 右转函数 写法2供参考
{
EN11
EN20右电机
IN10
IN21 左电机正转
IN31
IN40IN3 IN4赋值右电机动
} *
void left(void) 左转函数
{
EN11
EN21电机
IN10
IN20 左电机动
IN31
IN40右电机正转
}
void stop(void) 停止函数
{
EN11
EN21电机
IN10
IN20 左电机动
IN30
IN40右电机正转
}
void spin_right(void) 右转函数
{
EN11
EN21电机
IN10
IN21 左电机正转
IN30
IN41右电机反转
}
void spin_left(void) 左转函数
{
EN11
EN21电机
IN11
IN20 左电机反转
IN31
IN40右电机正转
}
void main(void)
{
int i
delay(2000) 延时2s启动
run()
delay(1000)
back()
delay(1000) 全速前进急停退(电压足够情况会甩尾)
stop()
delay(500)
for(i0i<5i++)
{
run()
delay(100) 车间断性前进5步
stop()
delay(80)
}
for(i0i<5i++)
{
back()
delay(100) 车间断性退5步
stop()
delay(80)
}
for(i0i<5i++)
{
left()
delay(1000) 弯套弯连续左旋转
spin_left()
delay(500)
}
for(i0i<5i++)
{
right()
delay(1000) 弯套弯连续右旋转
spin_right()
delay(500)
}
for(i0i<10i++)
{
right()
delay(100) 间断性原右转弯
stop()
delay(100)
}
for(i0i<10i++)
{
left()
delay(100) 间断性原左转弯
stop()
delay(100)
}
for(i0i<10i++)
{
left()
delay(300) 走S形前进
right()
delay(300)
}
for(i0i<10i++)
{
spin_left()
delay(300) 间断性原左转
stop()
delay(300)
}
for(i0i<10i++)
{
spin_right()
delay(300) 间断性原右转
stop()
delay(300)
}
while(1) 死循环 复位键重新跑程序
}
(2)黑线循迹:
#include
#include bst_carh 包含bst_carh智车头文件
unsigned char pwm_val_left 0变量定义
unsigned char pwm_val_right 0
unsigned char push_val_left 5 左电机占空N20 速度调节变量 020020
unsigned char push_val_right5 右电机占空N20
家根循迹效果修改两数值
bit Right_PWM_ON1 右电机PWM开关
bit Left_PWM_ON 1 左电机PWM开关
延时函数
void delay(unsigned int xms)
{
unsigned int ij
for(ixmsi>0i) ixms延时约xms毫秒
for(j112j>0j)
}
前进
void run(void)
{
push_val_left6 速度调节变量 020020
push_val_right6
Left_moto_go 左电机前走
Right_moto_go 右电机前走
}
左转
void leftrun(void)
{
push_val_left5
push_val_right5
Right_moto_go 右电机前走
Left_moto_Stop 左电机停止
}
右转
void rightrun(void)
{
push_val_left5
push_val_right5
Left_moto_go 左电机前走
Right_moto_Stop 右电机前走
}
停止
void stop(void)
{
Left_moto_Stop
Right_moto_Stop
}
************************************************************************
PWM调制电机转速
左电机调速
*调节push_val_left值改变电机转速占空*
void pwm_out_left_moto(void)
{
if(Left_PWM_ON)
{
if(pwm_val_left
EN11
}
else
{
EN10
}
if(pwm_val_left>20)
pwm_val_left0
}
else
{
EN10 未开启PWMEN10 左电机 停止
}
}
******************************************************************
* 右电机调速 *
void pwm_out_right_moto(void)
{
if(Right_PWM_ON)
{
if(pwm_val_right
EN21 占空620
}
else
{
EN20
}
if(pwm_val_right>20)
pwm_val_right0
}
else
{
EN20 未开启PWMEN20 右电机 停止
}
}
TIMER0中断服务子函数产生PWM信号
void timer0()interrupt 1 using 2
{
TH00XFC 1Ms定时
TL00X66
pwm_val_left++
pwm_val_right++
pwm_out_left_moto()
pwm_out_right_moto()
}
void keyscan(void) 键扫描函数
{
A if(K40) 判断否信号
{
delay(10) 延时10ms
if(K40) 次判断否
{
FM0 蜂鸣器响
while(K40) 判断否松开键
FM1 蜂鸣器停止
}
else
{
goto A 跳转A重新检测
}
}
else
{
goto A 跳转A重新检测
}
}
函数
void main(void)
{
P10X00 关电机
keyscan() 键启动检测
delay(1000)1s启动
TMOD0X01
TH0 0XFC 1ms定时
TL0 0X66
TR0 1
ET0 1
EA 1 开总中断
while(1) 限循环
{
信号0 没信号1
if(Left_1_led0&&Right_1_led0)
run() 调前进函数
else if(Left_1_led1&&Right_1_led0) 左边检测黑线
{
leftrun() 调车左转函数
}
else if(Right_1_led1&&Left_1_led0) 右边检测黑线
{
rightrun() 调车右转函数
}
else
stop()
}
}
(3)红外避障:
#include
#include bst_carh 包含bst_carh智车头文件
unsigned char pwm_val_left 0变量定义
unsigned char pwm_val_right 0
unsigned char push_val_left 9 左电机占空N20 速度调节变量 020020
unsigned char push_val_right9 右电机占空N20
bit Right_PWM_ON1 右电机PWM开关
bit Left_PWM_ON 1 左电机PWM开关
延时函数
void delay(unsigned int xms)
{
unsigned int ij
for(ixmsi>0i) ixms延时约xms毫秒
for(j112j>0j)
}
前进
void run(void)
{
push_val_left5 速度调节变量 020020
push_val_right5
Left_moto_go 左电机前走
Right_moto_go 右电机前走
}
左转
void leftrun(void)
{
push_val_left5
push_val_right5
Right_moto_go 右电机前走
Left_moto_Stop 左电机停止
}
右转
void rightrun(void)
{
push_val_left5
push_val_right5
Left_moto_go 左电机前走
Right_moto_Stop 右电机前走
}
************************************************************************
PWM调制电机转速
左电机调速
*调节push_val_left值改变电机转速占空*
void pwm_out_left_moto(void)
{
if(Left_PWM_ON)
{
if(pwm_val_left
EN11
}
else
{
EN10
}
if(pwm_val_left>20)
pwm_val_left0
}
else
{
EN10 未开启PWMEN10 左电机 停止
}
}
******************************************************************
* 右电机调速 *
void pwm_out_right_moto(void)
{
if(Right_PWM_ON)
{
if(pwm_val_right
EN21 占空620
}
else
{
EN20
}
if(pwm_val_right>20)
pwm_val_right0
}
else
{
EN20 未开启PWMEN20 右电机 停止
}
}
TIMER0中断服务子函数产生PWM信号
void timer0()interrupt 1 using 2
{
TH00XFC 1Ms定时
TL00X66
pwm_val_left++
pwm_val_right++
pwm_out_left_moto()
pwm_out_right_moto()
}
void keyscan(void) 键扫描函数
{
A if(K40) 判断否信号
{
delay(10) 延时10ms
if(K40) 次判断否
{
FM0 蜂鸣器响
while(K40) 判断否松开键
FM1 蜂鸣器停止
}
else
{
goto A 跳转A重新检测
}
}
else
{
goto A 跳转A重新检测
}
}
函数
void main(void)
{
P10X00 关电机
keyscan() 键启动检测
delay(1000)1s启动
TMOD0X01
TH0 0XFC 1ms定时
TL0 0X66
TR0 1
ET0 1
EA 1 开总中断
while(1) 限循环
{
信号0 没信号1
if(Left_2_led1&&Right_2_led1)
run() 调前进函数
if(Left_2_led1&&Right_2_led0) 右边检测障碍物
{
leftrun() 调车左转函数
}
if(Right_2_led1&&Left_2_led0) 左边检测障碍物
{
rightrun() 调车右转函数
}
}
}
(4) 超声波避障
#include
#include
#include bst_carh 包含bst—v51智车头文件
#define LCM_Data P0 定义液晶屏数口
#define Busy 0x80 检测LCM状态字中Busy标识
sbit DU P2^6 数码段选
sbit WE P2^7 数码位选
sbit LCM_RWP1^1 定义LCD引脚
sbit LCM_RSP1^0
sbit LCM_EP2^5
unsigned char code Range[] Range FinderLCD1602显示格式
unsigned char code ASCII[13] 0123456789M
unsigned char code table[]Distance0000cm
unsigned char code table1[] Out of range
unsigned char disbuff[4]{0000}分存放距离值01mmmmcmm值
unsigned int time0存放定时器时间值
unsigned long S0存放距离值
bit flag 0 量程溢出标志位
char a0
void delay(unsigned int xms)
{
unsigned int ij
for(ixmsi>0i) ixms延时约xms毫秒
for(j112j>0j)
}
void Delay10us(unsigned char i) 10us延时函数 启动超声波模块时
{
unsigned char j
do{
j 10
do{
_nop_()
}while(j)
}while(i)
}
void cmg88()关数码
{
DU1
P00X00
DU0
}
************************************LCD1602液晶屏驱动函数************************************************
*******************读状态*************************
unsigned char ReadStatusLCM(void)
{
LCM_Data 0xFF
LCM_RS 0
Delay10us(1)
LCM_RW 1
Delay10us(1)
do{
LCM_E 0
Delay10us(1)
LCM_E 0
Delay10us(1)
LCM_E 1
Delay10us(1)
}
while (LCM_Data & Busy) 检测忙信号
return(LCM_Data)
}
****************写数************************
void WriteDataLCM(unsigned char WDLCM)
{
ReadStatusLCM() 检测忙
LCM_Data WDLCM
LCM_RS 1
Delay10us(1)
LCM_RW 0
Delay10us(1)
LCM_E 0 晶振速度太高加延时
Delay10us(1)
LCM_E 0 延时
Delay10us(1)
LCM_E 1
Delay10us(1)
}
****************写指令*************************
void WriteCommandLCM(unsigned char WCLCMBuysC) BuysC0时忽略忙检测
{
if (BuysC) ReadStatusLCM() 根需检测忙
LCM_Data WCLCM
LCM_RS 0
Delay10us(1)
LCM_RW 0
Delay10us(1)
LCM_E 0
Delay10us(1)
LCM_E 0
Delay10us(1)
LCM_E 1
Delay10us(1)
}
*******************LCM初始化**********************
void LCMInit(void)
{
LCM_Data 0
WriteCommandLCM(0x380) 三次显示模式设置检测忙信号
delay(5)
WriteCommandLCM(0x380)
delay(5)
WriteCommandLCM(0x380)
delay(5)
WriteCommandLCM(0x381) 显示模式设置开始求次检测忙信号
WriteCommandLCM(0x081) 关闭显示
WriteCommandLCM(0x011) 显示清屏
WriteCommandLCM(0x061) 显示光标移动设置
WriteCommandLCM(0x0c1) 显示开光标设置
}
*********************指定位置显示字符***********************
void DisplayOneChar(unsigned char X unsigned char Y unsigned char DData)
{
Y & 0x1
X & 0xF 限制X15Y1
if (Y) X | 0x40 显示第二行时址码+0x40
X | 0x80 算出指令码
WriteCommandLCM(X 1) 发命令字
WriteDataLCM(DData) 发数
}
**********************指定位置显示串字符*************************
void DisplayListChar(unsigned char X unsigned char Y unsigned char code *DData)
{
unsigned char ListLength
ListLength 0
Y & 0x1
X & 0xF 限制X15Y1
while (DData[ListLength]>0x19) 达字串尾退出
{
if (X < 0xF) X坐标应0xF
{
DisplayOneChar(X Y DData[ListLength]) 显示单字符
ListLength++
X++
}
}
}
***************************************************************************
void StartModule() 启动超声波模块
{
TX1 启动次模块
Delay10us(2)
TX0
}
void Forward(void)前进
{
IN21
IN31
IN10
IN40
}
void Stop(void) 停车
{
IN10
IN20
IN30
IN40
}
void back(void) 退
{
IN11
IN20
IN30
IN41
}
void Turn_Right(void) 右旋转
{
IN10
IN21
IN30
IN41
}
********距离计算程序***************
void conut1(void)
{
timeTH1*256+TL1
TH10
TL10
时time时间单位决定晶振频率外接晶振110592MHZ
1us声波走远距离呢?1s1000ms1000000us
3401000000000034米
000034米1000034毫米 1us走034毫米
现计算超声波发射反射接收双路程
计算结果2实际路程
Stime*017+10时计算结果毫米精确毫米两位两数点
}
void Conut(void)
{
conut1()
显示部分
if((S>5000)||flag1) 超出测量范围
{
a0
flag0
DisplayListChar(0 1 table1)
}
else
{
disbuff[0]S10
disbuff[1]S1010
disbuff[2]S10010
disbuff[3]S1000
DisplayListChar(0 1 table)
DisplayOneChar(9 1 ASCII[disbuff[3]])
DisplayOneChar(10 1 ASCII[disbuff[2]])
DisplayOneChar(11 1 ASCII[disbuff[1]])
DisplayOneChar(12 1 ASCII[10])
DisplayOneChar(13 1 ASCII[disbuff[0]])
}
避障部分
if(S<240) 刹车障碍物距离 车速关 更改
{
a++
if(a>2)
{
a0
FM0
Stop()
back() 退缓
delay(230) 退缓时间 车速关 更改
BTurn_Right()
delay(50) 旋转角度 环境复杂程度关 更改
Stop()
delay(100) 旋转顿挫时间 视觉效果 更改
StartModule()
while(RX0)
TR11 开启计数
while(RX) RX1计数等
TR10 关闭计数
conut1()
if(S>340) 直行方障碍物距离 环境关 更改
{
Turn_Right()
delay(90)
Stop() 微调前进方 避免车宽前进影响
delay(200)
FM1
Forward()
}
else
{
goto B 没转空旷方 回B点 继续旋转次
}
}
else
{
Forward() 障碍物 直行
}
}
else
{
a0
Forward() 障碍物 直行
}
}
********************************************************
void zd0() interrupt 3 T0中断计数器溢出超测距范围
{
flag1 中断溢出标志
RX0
}
********超声波高电脉宽度计算程序***************
void Timer_Count(void)
{
TR11 开启计数
while(RX) RX1计数等
TR10 关闭计数
Conut() 计算
}
********************************************************
void keyscan(void) 键扫描函数
{
A if(K40) 判断否信号
{
delay(10) 延时10ms
if(K40) 次判断否
{
FM0 蜂鸣器响
while(K40) 判断否松开键
FM1 蜂鸣器停止
}
else
{
goto A 跳转A重新检测
}
}
else
{
goto A 跳转A重新检测
}
}
********************************************************
*************程序********************
void main(void)
{
unsigned int a
cmg88()关数码
delay(400) 启动等等LCM讲入工作状态
LCMInit() LCM初始化
delay(5)延时片刻
DisplayListChar(0 0 Range)
DisplayListChar(0 1 table)
TMODTMOD|0x10设T0方式1GATE1
EA1 开启总中断
TH10
TL10
ET11 允许T0中断
keyscan() 键扫描
while(1)
{
RX1
StartModule() 启动模块
for(a951a>0a)
{
if(RX1)
{
Timer_Count() 超声波高电脉宽度计算函数
}
}
}
}
文档香网(httpswwwxiangdangnet)户传
《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
该内容是文档的文本内容,更好的格式请下载文档