目錄
一、主要功能
二、使用步驟
三、硬件資源
四、軟件設計
五、實驗現象
一、主要功能
1、LCD1602液晶顯示
2、統計并顯示停車場現有車輛數和已停放過車輛數
3、按鍵設置總車位數以及剩余車位數
4、統計并顯示累計駛入和累計駛出車輛數
5、用16個LED燈模擬停車位
6、車位停滿報警
二、使用步驟
基于51單片機的停車場車位管理系統,顯示模塊顯示當前車位信息,步進電機和led指示燈模擬車進入或出去停車場的狀態改變。
三、硬件資源
1、51單片機核心模塊
2、按鍵模塊
3、紅外對管模塊、步進電機模塊
4、蜂鳴器模塊
5、LED指示燈模塊
6、LCD1602顯示模塊
四、軟件設計
#include <reg52.h>? ? ? ? ? ??
#define uchar unsigned char??
#define uint ?unsigned int? ?
#include <intrins.h>
#include "lcd1602.h"
sbit K1=P1^0;
sbit K2=P1^1;
sbit K3=P1^2;
sbit K4=P1^3;
sbit beep = P1^7; ? //蜂鳴器IO口定義
sbit LED=P3^4;
sbit SH = P3^5;
sbit ST = P3^6;
sbit DS = P3^7;
uchar num_jin;
uchar num_chu;
uchar num_car;
uchar code zz[]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09}; ?
uchar code fz[]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01}; ??
?? ??
void motor_ting();
/***********************1ms延時函數*****************************/
void delay_1ms(uint q)
{
?? ?uint i,j;
?? ?for(i=0;i<q;i++)
?? ??? ?for(j=0;j<120;j++);
}
void write_74hc595(unsigned int num)
{
?? ?int i;?? ?
?? ?ST = 0;
?? ?for(i=0; i<16; i++)
?? ?{
?? ??? ?SH = 0;
?? ??? ?if (num & 0x0001)
?? ??? ?{
?? ??? ??? ?DS = 1;
?? ??? ?}
?? ??? ?else
?? ??? ?{
?? ??? ??? ?DS = 0;
?? ??? ?}
?? ??? ?SH = 1;
?? ??? ?num >>= 1;
?? ?}
?? ?ST = 1;
}
void key()?? ? //獨立按鍵程序
{
?? ?if(!K1)? ? ? ? ?
?? ? ?{
?? ??? ?delay_1ms(20);
?? ??? ?if(!K1)
?? ??? ? {
? ? ? ? ?while(!K1);?
?? ??? ??? ? ? if(num_car==16)?? ?
?? ??? ??? ??? ? {?
?? ??? ??? ??? ??? ? beep=0; ?? ?
?? ??? ??? ??? ??? ? delay_1ms(1000);?
?? ??? ??? ??? ??? ? delay_1ms(1000);?
?? ??? ??? ??? ??? ? delay_1ms(1000); ?? ??? ??? ??? ??? ??? ??
?? ??? ??? ??? ??? ? beep=1;
?? ??? ??? ??? ? }
?? ??? ??? ??? ? if(num_car<16)?? ??
?? ??? ??? ??? ? {?
?? ??? ??? ??? ??? ??? ?num_car++;?
?? ??? ??? ??? ??? ? ?motor_zz(1);//步進電機啟動開閘門
?? ??? ??? ? ??? ? ?motor_ting();//開啟停留時間
?? ??? ??? ??? ??? ??? ?motor_fz(1);//步進電機啟動關閘門?? ??? ??? ??
?? ??? ??? ??? ??? ??? ?if(num_jin<=255)?
?? ??? ??? ??? ??? ??? ?{?
?? ??? ??? ??? ??? ??? ??? ?num_jin++;
?? ??? ??? ??? ??? ??? ?} ?
?? ??? ??? ??? ? }
?? ??? ??? ??? ? write_sfm2(1,4,num_jin);?
?? ??? ??? ? ? write_sfm2(1,12,num_chu); ?
?? ??? ??? ??? ? write_sfm2(2,4,num_car);?
?? ??? ??? ??? ? write_sfm2(2,12,16-num_car); ?
?? ??? ??? ??? ? write_74hc595(num_2_led(num_car));
?? ??? ? ?}
?? ?}?? ?
?? ?if(!K2)? ? ? ? ?
{
?? ??? ?delay_1ms(20);
?? ??? ?if(!K2)
?? ??? ? ?{
? ? ? ? while(!K2);
?? ??? ??? ??? ?motor_zz(1);
? ? ? ? if(num_car>=1)?
? ? ? ?{?? ?
?? ??? ??? ??? ??? ?num_car--; ?
?? ??? ??? ??? ??? ?motor_zz(1);//步進電機啟動開閘門
?? ??? ??? ??? ??? ?motor_ting();//開啟停留時間
?? ??? ??? ??? ??? ?motor_fz(1);//步進電機啟動關閘門?? ?
? ? ? ? ? if(num_chu<=255)?
? ? ? ? ?{ ??
? ? ? ? ? ?num_chu++;
? ? ? ? ?} ?
? ? ? ? }?? ?
?? ??? ? ? ?write_sfm2(1,4,num_jin);?
?? ??? ??? ? ?write_sfm2(1,12,num_chu); ?
?? ??? ? ??? ?write_sfm2(2,4,num_car);?
?? ??? ? ? ?write_sfm2(2,12,16-num_car); ?
?? ??? ??? ? ?write_74hc595(num_2_led(num_car));
?? ??? ? ?}
?? ?}? ? ? ?
}?? ??? ??? ?
/***************主函數*****************/
void main()
{
?? ? ?LED=0;?
? ? init_1602();
? ? write_string(1,0,"Jin: ? ?Chu:");
? ? write_string(2,0,"Car: ? ? ?P:");
?? ?write_sfm2(1,4,num_jin);?
?? ?write_sfm2(1,12,num_chu); ?
?? ?write_sfm2(2,4,num_car);?
?? ?write_sfm2(2,12,16-num_car); ?
?? ?write_74hc595(0);
?? ?while(1)
?? ?{
?? ? ?key();?? ??? ??? ??? ??? ?//獨立按鍵程序
?? ?}
}
?
五、實驗現象
演示視頻: