仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
单片机源程序如下:
- #include <reg52.h> //调用单片机头文件
- #include <intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
- //引脚声明
- sbit rs=P2^0;//1602数据/命令选择引脚
- sbit rw=P2^1;//1602读写引脚
- sbit e =P2^2;//1602使能引脚
- sbit IN1=P3^3;//电动机方向引脚1
- sbit IN2=P3^4;//电动机方向引脚2
- sbit ENA=P3^5;//电动机使能引脚
- sbit key_hy=P3^7;//红外传感器
- sbit key_end=P3^6;//行程开关
- //us延时函数
- void delay(uint i)
- {
- while(--i);
- }
- //毫秒延时函数
- void delayms(uint xms)
- {
- uint x,y;
- for(x=0;x<xms;x++)
- for(y=0;y<122;y++);
- }
- //1602写命令函数
- void write_com(uchar com)
- {
- e=0;
- rs=0;//指令模式
- rw=0;//写
- P0=com;
- delay(3);
- e=1;
- delay(25);
- e=0;
- }
- //1602写数据函数
- void write_data(uchar dat)
- {
- e=0;
- rs=1;//数据模式
- rw=0;//写
- P0=dat;
- delay(3);
- e=1;
- delay(25);
- e=0;
- }
- //初始化1602液晶
- void init_1602()
- {
- delay(1000);
- write_com(0x38);//双行显示,5*7字符
- write_com(0x0c);//不显示光标
- write_com(0x06);//向后显示
- write_com(0x01);//清屏
- delay(1000);
- }
- //主函数
- void main()
- {
- init_1602();//1602液晶初始化
- IN1=0;//初始状态电动机停止
- IN2=0;
- ENA=0;
- write_com(0x80);
- write_data('C'); write_data('L');write_data('O');write_data('S');write_data('E');
- while(1)
- {
- if(key_hy==0) //红外传感器检测到信号
- {
- IN1=0;//电动机运行,后备箱车门打开
- IN2=1;
- ENA=1;
- //lcd1602显示ON
- write_com(0x80);
- write_data('O'); write_data('P');write_data('E');write_data('N');write_data(' ');
- delayms(5000);//开启5秒
- IN1=0;//电动机运停止
- IN2=0;
- ENA=0;
- //lcd1602显示STOP
- write_com(0x80);
- write_data('S'); write_data('T');write_data('O');write_data('P');write_data(' ');
- }
- }
- }
复制代码
所有资料51hei提供下载:
后备箱车门控制系统.rar
(34.22 KB, 下载次数: 43)
|