仿真原理圖如下(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)
2020-4-18 13:18 上傳
點擊文件名下載附件
|