超声波自动蔽障小车代码
更新时间:2024-05-09 10:18:01 阅读量: 综合文库 文档下载
#include
#define RS_CLR RS=0 #define RS_SET RS=1
#define RW_CLR RW=0 #define RW_SET RW=1
#define EN_CLR EN=0 #define EN_SET EN=1 #define STOP 0 #define ADD 1 #define SUB 2 #define ZHENG 3 #define FAN 4
sbit RS = P2^6; //定义端口 sbit RW = P2^5; sbit EN = P2^7; sbit csb=P3^1; sbit csbint=P3^2;
unsigned char Line_One[]=\
unsigned char Line_Two[]=\ S %unsigned int T;//时间 unsigned int Dis;//距离
unsigned char EleMachine1[4]={0x01,0x02,0x04,0x08};//电机1正传参数 unsigned char EleMachine2[4]={0x10,0x20,0x40,0x80};//电机2正转参数 unsigned char Count;//电机动作步骤 unsigned int Speed;//转速
unsigned char Turn_Flag;//转弯标志
unsigned int Timer1_Count=0;//定时器1中断次数统计 unsigned int Sys_timer=0;//系统时间计时 float csbc=0;
unsigned char time_out;
unsigned char sucess_flag;//测试成功
/*------------------------------------------------
启动一次模块
------------------------------------------------*/ void start_module(void) { csb=0;
_nop_();_nop_();_nop_();_nop_();_nop_(); //空操作5次 _nop_();_nop_();_nop_();_nop_();_nop_(); //空操作5次 _nop_();_nop_();_nop_();_nop_();_nop_(); //空操作5次 _nop_();_nop_();_nop_();_nop_();_nop_(); //空操作5次 csb=1; }
/*------------------------------------------------
uS延时函数,含有输入参数 unsigned char t,无返回值 unsigned char 是定义无符号字符变量,其值的范围是
0~255 这里使用晶振12M,精确延时请使用汇编,大致延时 长度如下 T=tx2+5 uS
------------------------------------------------*/ void DelayUs2x(unsigned char t) { while(--t); }
/*------------------------------------------------
mS延时函数,含有输入参数 unsigned char t,无返回值 unsigned char 是定义无符号字符变量,其值的范围是 0~255 这里使用晶振12M,精确延时请使用汇编 ------------------------------------------------*/ void DelayMs(unsigned char t) { while(t--) //大致延时1mS { DelayUs2x(245); DelayUs2x(245); } }
void write_com(unsigned char com) //写命令 { RS_CLR; RW_CLR; P0=com; DelayMs(5); EN_SET; DelayMs(5);
EN_CLR; }
void write_data(unsigned char date) { RS_SET; RW_CLR; P0=date; DelayMs(5); EN_SET; DelayMs(5); EN_CLR; }
//写一个字符
void init() //初始化 { write_com(0x38); write_com(0x0c); write_com(0x06); write_com(0x01); }
/*------------------------------------------------ 写入字符串函数 ------------------------------------------------*/
void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s) { if (y == 0) { write_com(0x80 + x); } else { write_com(0xC0 + x); } while (*s) { write_data( *s); s ++; } }
void LCD_Display(void) { Line_One[11]=Dis/100+'0';
Line_One[13]=Dis/10+'0'; Line_One[14]=Dis+'0'; Line_Two[2]=Sys_timer/10000+'0'; Line_Two[3]=Sys_timer000/1000+'0'; Line_Two[4]=Sys_timer00/100+'0'; Line_Two[5]=Sys_timer0/10+'0'; Line_Two[6]=Sys_timer+'0'; LCD_Write_String(0,0,Line_One); //显示 LCD_Write_String(8,0,Line_Two); }
main() { TH0=0; TL0=0;
Speed = 50000;//默认电机速度 TH1=(65536-Speed)/256; TL1=(65536-Speed)%6; TH2 = (65536-10000)/256; TL2 = (65536-10000)%6;
TMOD=0x11; //T1,T0为16位定时器 T2CON=0x00;//T2工作定时器方式 ET1 = 1;ET0 = 1;ET2=1;TF2=0; TR1 = 1;TR0 = 0;TR2=1; EA=1;EX0=0;IT0=0; init();
LCD_Display(); sucess_flag = 1; while(1) { if(sucess_flag == 1) { sucess_flag = 0; start_module(); while(csbint==0)start_module();//启动模块 ,避免卡死 EX0=1; TH0= 0; TL0 = 0; TR0=1;//启动计数器T0,用以计时 } csbc=0.0344; //声速344m/s(0.0344cm/us) csbc=csbc/2; //单位cm Dis=T*csbc; // 距离=(声速*时间)/2; if(Dis<30) //测量值小于下限 {
Speed = 5000; Turn_Flag = 1; } else { Speed = 5000; if(Turn_Flag == 1) { Count = 0; } Turn_Flag = 0; } LCD_Display(); DelayMs(20); } }
void T0_time() interrupt 1//定时器中断服务函数 { TH0=0; TL0=0; time_out =1 ; }
void T1_time() interrupt 3//定时器中断服务函数 { TH1=(65536-Speed)/256; TL1=(65536-Speed)%6; if(Turn_Flag==0) P1=EleMachine1[3-Count]|EleMachine2[Count];// 2个电机一起转,1反转,2正转 else P1=EleMachine1[3-Count]&0x0f;//转弯、第二个电机不转,第一个电机反转 Count++; if(Count>3) Count = 0; }
void T2_time() interrupt 5//定时器2中断服务函数 { TH2 = (65536-10000)/256; TL2 = (65536-10000)%6; TF2=0; Timer1_Count++; if(Timer1_Count>=100)// 1S计数 {
}
}
Sys_timer++;
Timer1_Count-=100;
void int0()interrupt 0//回响输出端高电平宽度测量(上升沿到来时候开始计时,下降沿到来进入外部中断,关闭计时器,停止计时) { }
TR0 = 0; //定时器停止计数
T=(TH0*256+TL0);//计算定时器内的测量值 TH0=0;//定时器清0 TL0=0;
EX0 = 0; //关闭外部中断 sucess_flag = 1;
}
}
Sys_timer++;
Timer1_Count-=100;
void int0()interrupt 0//回响输出端高电平宽度测量(上升沿到来时候开始计时,下降沿到来进入外部中断,关闭计时器,停止计时) { }
TR0 = 0; //定时器停止计数
T=(TH0*256+TL0);//计算定时器内的测量值 TH0=0;//定时器清0 TL0=0;
EX0 = 0; //关闭外部中断 sucess_flag = 1;
正在阅读:
超声波自动蔽障小车代码05-09
2020年在全市审计系统党风廉政建设工作会议上的报告09-06
食品化学复习题及答案05-07
120T汽车吊参数09-05
西华大学发动机课程设计说明书(含程序)05-22
线性常微分方程组06-08
2020年精选淘宝客服工作计划03-03
广州发展燃料港口有限公司珠电煤场煤炭铲配煤业务项目 - 图文12-15
2019年纳税筹划形考一答案10-21
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 超声波
- 小车
- 代码
- 自动
- 企业并购中财务风险的表现及其防范对策
- 安全备案表(4份)
- 中国羽泉种鸽行业市场调查研究报告(目录) - 图文
- 食品养生
- 如何防止碳刷打火
- 数学悖论及其对数学发展的影响
- 论会计人员职业道德建设研究
- 房建质量保证体系及工程质量保证措施
- 湖北省省属高校网球运动的现状调查分析与研究
- 发酵罐温度控制系统的设计
- 浅谈2002年高考英语真题全国卷完形填空题-最新教育资料
- 社区治理形考作业及答案
- 大一公共财政学期末考试 易考到的简答题
- 幼儿园教职工安全教育培训计划
- 双馈风机基础知识学习
- 嵌入式期末考试题
- 八十九学年度海外地区学生来台升读大学校
- 中国服装企业存在的经营问题全解析
- 2017-2022年中国孕妇上衣市场投资战略研究报告(目录) - 图文
- 质检员岗位职责(10篇) - 范文