我的智能安防小车
来源:互联网 发布:软件企业增值税税率 编辑:程序博客网 时间:2024/04/30 06:33
温湿度显示模块程序
#include <reg52.h>#define uchar unsigned char#define uint unsigned intuchar lcd_x,lcd_y,data_byte=0,count;uint TH_data,TL_data,RH_data,RL_data,CK_data;uint TH_temp,TL_temp,RH_temp,RL_temp,CK_temp;uchar num;sbit LCD_RS = P1^5;//并行指令,数据选择信号//sbit LCD_RW = P1^6;//读写信号sbit LCD_EN = P1^7;//并行使能信号sbit io = P3^6;//DHT11总线uchar code lcd1[]={"℃"};uchar code lcd2[]={"%RH"};uchar str1[]={" "};uchar str2[]={" "}; void delay1()//延时10us{unsigned char i;for(i=0; i<3; i++);}void delay(uint a){uchar i;while(a--){for(i=0; i<113; i++);}}/**********************DHT11模块**********************/uchar receive_byte()//接收一个字节{uchar i,temp;for(i=0;i<8; i++){count = 2;while((!io) && count++)//等待50us低电平结束,并防止死循环temp = 0;delay1();delay1();delay1();if (io==1){ temp = 1;count = 2;while(io && count++);}elsetemp = 0;data_byte<<=1;data_byte|=temp;}return (data_byte);}void read_io()//开始信号,读数据并校验{io = 0;delay(18);//主机拉低18msio = 1;//DATA总线由上拉电阻拉高 主机延时20usdelay1();delay1();delay1();delay1();io = 1;//主机设置为输入高电平,判断从机响应信号if(!io){count = 2;while((!io)&&count++);//判断DHT11发出80us低电平响应信号是否结束count = 2;while(io && count++);//判断DHT11拉高总线80us高电平是否结束RH_temp = receive_byte(); RL_temp = receive_byte(); TH_temp = receive_byte(); TL_temp = receive_byte(); CK_temp = receive_byte();io = 1;num = (RH_temp + RL_temp + TH_temp + TL_temp);//数据校验if(num == CK_temp){RH_data = RH_temp; RL_data = RL_temp;TH_data = TH_temp; TL_data = TL_temp; CK_data = CK_temp;}}//湿度整数部分str1[0] = (char)(0x30 + RH_data/10);str1[1] = (char)(0x30 + RH_data%10);//温度整数部分str2[0] = (char)(0x30 + TH_data/10);str2[1] = (char)(0x30 + TH_data%10);}/**********************E N D**********************/ void delay1ms(uint x) { uint i,j; for(j=0;j<x;j++) for(i=0;i<110;i++); }/*******************************************************************//* *//*写指令数据到LCD *//*RS=L,RW=L,E=高脉冲,D0-D7=指令码。 *//* *//*******************************************************************/void write_com(uchar com){ LCD_RS = 0; //LCD_RW = 0; LCD_EN = 0; P0 = com;delay1ms(5); LCD_EN = 1;delay1ms(5); LCD_EN = 0; }/*******************************************************************//* *//*写显示数据到LCD *//*RS=H,RW=L,E=高脉冲,D0-D7=数据。 *//* *//*******************************************************************/void write_data(uchar dat){ LCD_RS = 1; // LCD_RW = 0; LCD_EN = 0; P0 = dat;delay1ms(5); LCD_EN = 1;delay1ms(5); LCD_EN = 0; }/****直接输出数组中的字符串***/void print(uchar *str) //LCD显示函数{ while(*str!='\0'){write_data(*str);str++;}}/*******************************************************************//* *//* LCD初始化设定 *//* *//*******************************************************************/void lcd_init(){ write_com(0x30); //基本指令操作 write_com(0x0C); //显示开,关光标 write_com(0x01); //清除LCD的显示内容}void main(){uchar k,j;lcd_init();write_com(0x80+4);print(lcd1);write_com(0x80+0x40+4);print(lcd2);while(1){read_io();//读取温湿度数据//clear_gcrom();//湿度for(k=0; k<2; k++){write_com(0x80);write_data(str1[k]);}//clear_gcrom();//温度for(j=0; j<2; j++){write_com(0x80+0x40);write_data(str2[j]);}delay(500);}}
蓝牙模块程序
#include<reg52.h>//声明头文件#define uchar unsigned char//宏定义#define uint unsigned int//宏定义sbit deng=P2^0;//定义车灯的控制引脚sbit z=P2^1;//定义左转向灯的控制引脚sbit y=P2^2;//定义右转向灯的引脚sbit BEEP=P2^3;//定义蜂鸣器的引脚sbit you1=P0^0;//定义控制左边电机的单片机引脚sbit you2=P0^1;//定义控制左边电机的单片机引脚sbit zuo1=P0^2;//定义控制右边电机的单片机引脚sbit zuo2=P0^3;//定义控制右边电机的单片机引脚uchar a=0;//定义一个变量a,用来读取串口的数据void delay(uint z)//一个带参数的延时程序{int i,j;//定义两个变量for(i=10;i>0;i--)for(j=z;j>0;j--);//将参数z赋值给j}void init()//初始化子程序{TMOD=0x20;//设置定时器T1为工作方式2TH1=0xfd;TL1=0xfd;//T1定时器装初值TR1=1;//启动定时器T1REN=1;//允许串口接收SM0=0;SM1=1;//设置串口工作方式1EA=1;//开总中断ES=1;//开串口中断}void go()//前进子程序{zuo1=0;zuo2=1;//左边轮子正转delay(25);//pwm有用值,越大左边方向的轮子越快zuo1=1;//关闭左边轮子you1=0;you2=1;//右边轮子正转delay(24);//pwm有用值,越大右边的轮子越快you1=1;//关闭右边轮子delay(100);//pwm无用值,越大,小车跑的越慢z=1;y=1;//关闭转向灯}void hui()//小车后退的子程序{zuo1=1;zuo2=0;//左边轮子倒转delay(25);//pwm有用值,越大左边方向的轮子越快zuo2=1;//关闭左边轮子you1=1;you2=0;//右边轮子倒转delay(24);//pwm有用值,越大右边的轮子越快you2=1;//关闭右边轮子delay(100);//pwm无用值,越大,小车跑的越慢z=1;y=1;//关闭转向灯}void turnleft()//小车左转弯子程序{zuo1=1;zuo2=1;//左边轮子停止转动you1=0;you2=1;//右边轮子正转delay(24);//pwm有用值,越大右边的轮子越快you1=1;//右边轮子停止delay(100);//pwm无用值,越大,小车跑的越慢z=1;y=1;//关闭转向灯z=~z;//左转向灯打开}void turnright()//小车右转弯子程序{zuo1=0;zuo2=1;//左边轮子正转delay(25);//pwm有用值,越大左边方向的轮子越快zuo1=1;//左边轮子停止you1=1;you2=1;//右边轮子停止delay(100);//pwm无用值,越大,小车跑的越慢z=1;y=1;//关闭转向灯y=~y;//右转向灯打开}void down()//停止子程序{zuo1=1;zuo2=1;you1=1;you2=1;//左右轮全部停止z=1;y=1;//关闭转向灯}void beep()//蜂鸣器鸣响子程序{BEEP=0;}void main()//主程序{init();//调用初始化子程序while(1)//死循环{switch(a)//判断a从串口读取到的数据{case 0x02://如果是0x1f就前进go();break;case 0x08://如果是0x2f就后退hui();break;case 0x04://如果是0x3f就左转turnright();break;case 0x06://如果是0x4f就右转turnleft();break;case 0x05://如果是0x00就停止down();break; }}}void chuan() interrupt 4//串口中断服务程序{RI=0;//软件清除串口响应a=SBUF;//读取单片机串口接受的蓝牙模块发送的数据}
寻光模块程序
#include<reg52.h>//包含必要头文件sbit you1=P0^0;//定义单片机控制右边电机的引脚sbit you2=P0^1;//定义单片机控制右边电机的引脚sbit zuo1=P0^2;//定义单片机控制左边电机的引脚sbit zuo2=P0^3;//定义单片机控制左边电机的引脚sbit zxg=P2^4;//定义单片机连接循迹板左边光电管的引脚sbit yxg=P2^5;//定义单片机连接循迹板右边光电管的引脚void delay(int z)//pwm中使用的延时函数{int i,j;for(i=2;i>0;i--)for(j=z;j>0;j--);}void qian()//左右轮协同前进子函数{you1=0;you2=1;zuo1=0;zuo2=1;delay(10-5);//pwm调速 此为pwm有效值you1=1;you2=1;zuo1=1;zuo2=1;delay(5);//pwm调速 此为pwm无效值 则此时pwm=9/10=90%}void hui()//左右轮协同前进子函数{you1=1;you2=0;zuo1=1;zuo2=0;delay(10-5);//pwm调速 此为pwm有效值you1=1;you2=1;zuo1=1;zuo2=1;delay(5);//pwm调速 此为pwm无效值 则此时pwm=9/10=90%}void zuo()//左右轮协同左转子函数{you1=0;you2=1;zuo1=1;zuo2=0;delay(10-5);//pwm调速 此为pwm有效值you1=1;you2=1;zuo1=1;zuo2=1;delay(5);//pwm调速 此为pwm无效值 则此时pwm=9/10=90%}void you()//左右轮协同右转子函数{you1=1;you2=0;zuo1=0;zuo2=1;delay(10-5);//pwm调速 此为pwm有效值you1=1;you2=1;zuo1=1;zuo2=1;delay(5);//pwm调速 此为pwm无效值 则此时pwm=9/10=90%}void down()//左右轮都停止转动{you1=1;you2=1;zuo1=1;zuo2=1;}void main()//主函数{while(1)//死循环{hui();while(zxg==0)//判断当左边光电管遇到黑线,{//右边和前边的光电管遇到白线时左转you();//调用左转函数}while(yxg==1)//判断当右边光电管遇到黑线,{//左边和前边的光电管遇到白线时右转zuo();//调用右转函数}}}
避障模块程序
#include<reg52.h>//包含必要头文件sbit you1=P0^0;//定义单片机控制右边电机的引脚sbit you2=P0^1;//定义单片机控制右边电机的引脚sbit zuo1=P0^2;//定义单片机控制左边电机的引脚sbit zuo2=P0^3;//定义单片机控制左边电机的引脚sbit z=P1^4;//定义单片机连接循迹板左边光电管的引脚sbit y=P1^3;//定义单片机连接循迹板右边光电管的引脚sbit q=P1^5;//定义单片机连接循迹板前边光电管的引脚void delay(int z)//pwm中使用的延时函数{int i,j;for(i=2;i>0;i--)for(j=z;j>0;j--);}void qian()//左右轮协同前进子函数{you1=0;you2=1;zuo1=0;zuo2=1;delay(10-5);//pwm调速 此为pwm有效值you1=1;you2=1;zuo1=1;zuo2=1;delay(5);//pwm调速 此为pwm无效值 则此时pwm=9/10=90%}void zuo()//左右轮协同左转子函数{you1=0;you2=1;zuo1=1;zuo2=0;delay(10-5);//pwm调速 此为pwm有效值you1=1;you2=1;zuo1=1;zuo2=1;delay(5);//pwm调速 此为pwm无效值 则此时pwm=9/10=90%}void you()//左右轮协同右转子函数{you1=1;you2=0;zuo1=0;zuo2=1;delay(10-5);//pwm调速 此为pwm有效值you1=1;you2=1;zuo1=1;zuo2=1;delay(5);//pwm调速 此为pwm无效值 则此时pwm=9/10=90%}void down()//左右轮都停止转动{you1=1;you2=1;zuo1=1;zuo2=1;}void main()//主函数{while(1)//死循环{qian();//调用前进子函数,使小车光电管不满足以下几个条件时都处于前进状态while(z==0)//判断当左边光电管遇到黑线,{//右边和前边的光电管遇到白线时左转zuo();//调用左转函数}while(y==0)//判断当右边光电管遇到黑线,{//左边和前边的光电管遇到白线时右转you();//调用右转函数}while(q==0)//判断当左边光电管遇到黑线,右边光电管也遇到黑线{//前边的光电管遇到白线时停止you();//调用停止函数}while((y==0)&&(q==0))//判断当左边、右边、前边光电管同时遇到黑线{//即遇到十字路口,小车前进you();//调用前进函数}while((z==0)&&(q==0))//判断当左边、右边、前边光电管同时遇到黑线{//即遇到十字路口,小车前进zuo();//调用前进函数}}}
循迹模块程序
#include<reg52.h>//包含必要头文件sbit you1=P0^0;//定义单片机控制右边电机的引脚sbit you2=P0^1;//定义单片机控制右边电机的引脚sbit zuo1=P0^2;//定义单片机控制左边电机的引脚sbit zuo2=P0^3;//定义单片机控制左边电机的引脚sbit z=P1^1;//定义单片机连接循迹板左边光电管的引脚sbit y=P1^0;//定义单片机连接循迹板右边光电管的引脚sbit q=P1^2;//定义单片机连接循迹板前边光电管的引脚void delay(int z)//pwm中使用的延时函数{int i,j;for(i=2;i>0;i--)for(j=z;j>0;j--);}void qian()//左右轮协同前进子函数{you1=0;you2=1;zuo1=0;zuo2=1;delay(10-1);//pwm调速 此为pwm有效值you1=1;you2=1;'zuo1=1;zuo2=1;delay(1);//pwm调速 此为pwm无效值 则此时pwm=9/10=90%}void zuo()//左右轮协同左转子函数{you1=0;you2=1;zuo1=1;zuo2=0;delay(10-1);//pwm调速 此为pwm有效值you1=1;you2=1;zuo1=1;zuo2=1;delay(1);//pwm调速 此为pwm无效值 则此时pwm=9/10=90%}void you()//左右轮协同右转子函数{you1=1;you2=0;zuo1=0;zuo2=1;delay(10-1);//pwm调速 此为pwm有效值you1=1;you2=1;zuo1=1;zuo2=1;delay(1);//pwm调速 此为pwm无效值 则此时pwm=9/10=90%}void down()//左右轮都停止转动{you1=1;you2=1;zuo1=1;zuo2=1;}void main()//主函数{while(1)//死循环{qian();//调用前进子函数,使小车光电管不满足以下几个条件时都处于前进状态while((z==0)&&(y==1)&&(q==1))//判断当左边光电管遇到黑线,{//右边和前边的光电管遇到白线时左转zuo();//调用左转函数}while((z==1)&&(y==0)&&(q==1))//判断当右边光电管遇到黑线,{//左边和前边的光电管遇到白线时右转you();//调用右转函数}while((z==0)&&(y==0)&&(q==1))//判断当左边光电管遇到黑线,右边光电管也遇到黑线{//前边的光电管遇到白线时停止down();//调用停止函数}while((z==0)&&(y==0)&&(q==0))//判断当左边、右边、前边光电管同时遇到黑线{//即遇到十字路口,小车前进qian();//调用前进函数}}}
1602液晶显示模块
#include<reg52.h>#define uchar unsigned char#define uint unsigned intsbit rs=P1^0;sbit rw=P1^1;sbit lcden=P2^5;uchar code table0[]="Welcome!";uchar code table1[]="BY Chi Gui Liang";uchar code table2[]="distance is:";uchar num; void delay(uint x){uint a,b;for(a=x;a>0;a--)for(b=10;b>0;b--); }void delay1(uint x){uint a,b;for(a=x;a>0;a--)for(b=100;b>0;b--); }void write_com(uchar com)//写指令,输入:RS=L,RW=L,D0-D7=指令码,E=高脉冲{P0=com;rs=0;lcden=0;delay(10);lcden=1;delay(10);lcden=0;}void write_date(uchar date)//写数据,输入:RS=H,RW=L,D0-D7=数据,E=高脉冲{P0=date;rs=1;lcden=0;delay(10);lcden=1;delay(10);lcden=0;}void init() //初始化{ rw=0;write_com(0x38); //显示模式设置:16×2显示,5×7点阵,8位数据接口delay(20);write_com(0x0f); //显示模式设置delay(20);write_com(0x06); //显示模式设置:光标右移,字符不移delay(20);write_com(0x01); //清屏幕指令,将以前的显示内容清除delay(20);}void main(){init();write_com(0x80+4);//右移4个空格for(num=0;num<8;num++){ write_date(table0[num]); delay1(200);}write_com(0x80+0x40);//换行for(num=0;num<16;num++){ write_date(table1[num]); delay1(200);}write_com(1);//清屏for(num=0;num<12;num++){ write_date(table2[num]); delay1(200);}while(1);}
0 0
- 我的智能安防小车
- 防坠落智能小车
- ioimage,即插即用的智能安防“家电”
- 毕业设计--基于安卓的智能小车(一)
- 毕业设计--基于安卓的智能小车(二)
- 毕业设计--基于安卓的智能小车(三)
- 晒一下我的智能小车,留作纪念
- PSIM可视化智能安防
- PSIM可视化智能安防
- PSIM可视化智能安防
- 智能安防项目模型
- 智能安防的行业现状及发展趋势
- “前端智能为安防产生新的数据价值”
- 我的小车
- 我的小车-RUNNER
- 智能小车
- 现代安防离不开智能分析
- 智能住宅小区安防报警网络系统
- Eclipse 开发Android 常用快捷键
- poj2388
- ie的兼容性模式
- float 型 float f=3.4 是否正确 ?
- NOJ [1116] Flandre's Passageway
- 我的智能安防小车
- Graphics DrawLine 坐标值很大时出现的异常
- Rom移植环境配置
- java 追踪方法调用
- 1-深度学习-发展历程
- 有统计的百度分享
- 基金将根据海关监管将根据海关监管国际化
- poj2299
- linux下IPTABLES配置详解