精华内容
下载资源
问答
  • 停车位显示系统
    2022-03-17 10:26:03

    51单片机停车场车位管理

    前言

    本系统包括:电源模块、传感器模块、显示模块、手动键盘输入模块、车辆车位模拟模块等。它可以实现控制的开启、显示停车场现有车辆数和已停放过车辆数、人工的设置总车位数以及剩余车位数的数值显示等功能。并且拥有16个模拟的停车位,用来显示车辆停放的具体位置。
    系统的特点:
    (1)由于本系统采用电子元件无需人工管理。
    (2)自动显示停车场的车位状态,进出和停放车辆统计。
    (3)统计小区当天已停放车辆总数,并且显示停放位置。
    (4)本系统适用于任意停车场。
    (5)检测小区车位车辆是否已满,报警指示灯闪烁。
    在这里插入图片描述

    一、原理图

    在这里插入图片描述

    二、仿真电路

    在这里插入图片描述

    三、主程序代码

    #include <reg52.h>	         //调用单片机头文件
    #define uchar unsigned char  //无符号字符型 宏定义	变量范围0~255
    #define uint  unsigned int	 //无符号整型 宏定义	变量范围0~65535
    #include <intrins.h>
    
    sbit K1=P1^0;
    sbit K2=P1^1;
    
    sbit K3=P1^2;
    sbit K4=P1^3;
    
    sbit beep = P1^7;   //蜂鸣器IO口定义
    
    sbit SH = P3^5;
    sbit ST = P3^6;
    sbit DS = P3^7;
    
    uchar num_jin;
    uchar num_chu;
    uchar num_car;
    
    #include "lcd1602.h"
    
    /***********************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;
    }
    
    unsigned int num_2_led(unsigned int num)
    {
    	int i;
    	unsigned int ret=0;
    	if (num > 16) 
    	    return 0xFFFF;
    	for(i=0;i<num;i++)
    	{
    		ret |= 1<<i;
    	}
    	return ret;
    }
    
    void key()	 //独立按键程序
    {
    	if(!K1)	       // 	  汽车进入
    	  {
    		delay_1ms(20);
    		if(!K1)
    		  {
                while(!K1)
    		    ;
    			if(num_car==16)	 { beep=0; 	delay_1ms(2000);  beep=1;}
                if(num_car<16)	 { num_car++;  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);
               if(num_car>=1) {	num_car--;  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));
    		  }
    	}		
    
     /***********************手动修改小区内停车位*************************************/
    	if(!K3)	       // 		   人工调节
    	  {
    		delay_1ms(20);
    		if(!K3)
    		  {
                while(!K3);
     		   if(num_car<16)	 { num_car++; }
    			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);  
    		  }
    	}	
    	if(!K4)	       // 	 // 		   人工调节
    	  {
    		delay_1ms(20);
    		if(!K4)
    		  {
                while(!K4);
               if(num_car>=1) {	num_car--;  }	
    		    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);  
    		  }
    	}				
    }			
    
    /***************主函数*****************/
    void main()
    {
        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();					//独立按键程序
    	}
    }
    
    
    更多相关内容
  • 汽车停车场停车位显示系统的设计讲解.pdf汽车停车场停车位显示系统的设计讲解.pdf汽车停车场停车位显示系统的设计讲解.pdf汽车停车场停车位显示系统的设计讲解.pdf汽车停车场停车位显示系统的设计讲解.pdf汽车停车场...
  • 汽车停车场停车位显示系统的设计讲解.docx汽车停车场停车位显示系统的设计讲解.docx汽车停车场停车位显示系统的设计讲解.docx汽车停车场停车位显示系统的设计讲解.docx汽车停车场停车位显示系统的设计讲解.docx汽车...
  • 基于51单片机的停车车位显示系统(嵌入式).pdf基于51单片机的停车车位显示系统(嵌入式).pdf基于51单片机的停车车位显示系统(嵌入式).pdf基于51单片机的停车车位显示系统(嵌入式).pdf基于51单片机的停车车位...
  • 基于51单片机的停车车位显示系统(嵌入式).docx基于51单片机的停车车位显示系统(嵌入式).docx基于51单片机的停车车位显示系统(嵌入式).docx基于51单片机的停车车位显示系统(嵌入式).docx基于51单片机的停车场...
  • 行业资料-交通装置-一种停车位显示系统.zip
  • 汽车停车场停车位显示系统的设计说明.doc
  • 行业资料-交通装置-一种停车位显示系统的线圈感应车辆检测器.zip
  • 基于51单片机的停车车位显示系统(嵌入式).doc
  • 行业资料-交通装置-一种停车车位显示系统.zip
  • 小区停车车位自动显示系统设计说明.pdf小区停车车位自动显示系统设计说明.pdf小区停车车位自动显示系统设计说明.pdf小区停车车位自动显示系统设计说明.pdf小区停车车位自动显示系统设计说明.pdf小区停车场...
  • 小区停车车位自动显示系统设计说明.docx小区停车车位自动显示系统设计说明.docx小区停车车位自动显示系统设计说明.docx小区停车车位自动显示系统设计说明.docx小区停车车位自动显示系统设计说明.docx小区...
  • 小区停车车位自动显示系统设计.docx
  • 基于CC2530 ZIGBEE的物联网车位管理系统系统由下列部分组成: 车位探测器,采用干电池供电。...车位指示灯, 检测到有车显示红色,没车显示绿色。 后台管理系统,汇集所有车位信息,以微信或APP的方式推给用户。
  • 行业资料-交通装置-一种智能显示停车位引导系统.zip
  • 小区停车车位自动显示系统设计说明.doc
  • 行业资料-交通装置-一种停车场空车位自动显示系统.zip
  • 系统的主要目的是确定免费停车位的可用性并将此数据显示给用户。 该系统将允许用户(驾驶员)实时接收有关停车位状态的最新信息。 抽象的 文凭项目致力于开发停车位监控系统。 在执行文凭项目时,对交通基础设施...
  • 介绍一种停车车位自动化管理系统...该系统设计通过超声传感器、单片机控制、嵌入式无线串口通讯模块以及星形通信网络技术的有机结合,可自动完成车位信息采集管理和显示功能,从而优化了停车场管理,方便了用户泊车。
  • 并且拥有16个模拟的停车位,用来显示车辆停放的具体位置。 系统的特点: 由于本系统采用电子元件无需人工管理。 自动显示停车场的车位状态,进出和停放车辆统计。 统计小区当天已停放车辆总数,并且显示停放位置。 本...
  • 本设计由STC89C52单片机电路+红外对管传感器+LCD1602液晶显示电路+LED指示灯电路+电源电路组成。 1、通过红外对管模块实时检测车位是否占用,车位分为1车位,2车位,3车位。...3、车位处是否停车并有状态指示灯指示。
  • 模拟临大停车场车位管理系统 首页显示: 欢迎来到临沂大学 空闲停车位n个(n个灯亮) “by姓名” 按下K1(停车位数递减),显示“欢迎来到临沂大学,停车位剩余n个”。连续按n次,显示“没有空闲停车位”。 按...
  • 为解决这一痛点,在微控制器技术日益成熟的当下,本文以51微控制器为核心开发了地下停车车位管理系统,一定程度上提高了城市土地的利用率,缓解了停车难的痛点,使得城市交通越来越畅宽,空气中汽车尾气的含量...

    任务要求:

    地下停车场车位管理系统要求能够实时动态显示地下停车场的车位状态,动态显示空余车位的位置,根据车位状态判断是否能够允许车辆进入。

    1. 地上部分

    地面视野开阔,但是车位数量恒定,可以利用传感器技术制作车位引导系统,实时检测进出停车场的车辆,检测车位状态,展示车位剩余数,进而方便车主,提升车库管理效率,减少不必要的劳动投入。

    1. 地下部分

    进入地下车库时,车主可以根据液晶显示屏实时了解车库内A、B两个大区内的车位占用情况,根据空位指引和箭头指示快速进入车库,进入车库后根据车位灯的颜色快速找到车位,非常快捷的完成整个停车过程,如果液晶显示器显示A、B两大区域车位状态饱和,驾驶员也无需在此浪费时间。

    硬件设计方案

    软件设计方案

    电路设计

     主程序设计

    车位引导程序 

     

    车位状态技术程序 

    #include<reg51.h>
    #include"zifuku.h"
    #include "intrins.h"
    #include<stdio.h>
    #define uchar unsigned char
    #define uint unsigned int
    
    sbit CS1=P2^3;			//LCD右屏幕
    sbit CS2=P2^4;			//LCD左屏幕
    sbit RS=P2^0;			//LCD数据、指令寄存器
    sbit RW=P2^1;			//LCD读、写操作
    sbit E=P2^2;			//LCD使能信号,下降沿有效
    
    /*sbit IR_0 = P1^2;
    
    sbit IR_1 = P1^3;
    sbit IR_2 = P1^7;
    sbit IR_3 = P3^4;
    sbit IR_4 = P3^0;*/
    
    sbit ir_a = P1^3;
    sbit ir_b = P1^4;
    sbit ir_r = P1^5;
    
    sbit led_zuo = P3^7;
    sbit led_you = P3^4;
    sbit led_zho1 = P3^5;
    sbit led_zho2 = P3^6;
    
    sbit Red_1 = P1^4;
    sbit Green_1 = P1^5;
    sbit Yellow_1 = P1^6;
    sbit Red_2 = P3^7;
    sbit Green_2 = P3^6;
    sbit Yellow_2 = P3^5;
    
    sbit Red_3 = P3^3;
    sbit Green_3 = P3^2;
    sbit Yellow_3 = P3^1;
    
    sbit Red_4 = P2^7;
    sbit Green_4 = P2^6;
    sbit Yellow_4 = P2^5;
    
    sbit KEY1 = P1^0;
    sbit KEY2 = P1^1;
    sbit KEY3 = P1^2;
    
    sbit led = P1^6;
    
    sbit beep = P1^7;
    
    uint Set_Value = 20;
    uint ADC_Value = 0;
    
    uchar cs = 0;
    uint sum = 0;			  //10次AD值的综合变量
    
    bit Auto = 1;
    
    sbit LED = P1^6;
    
    bit Time_Flag = 0;
    uchar chewei_a = 0;	//已使用的车位
    uchar chewei_b = 0;
    
    uchar chewei_a_max = 2;
    uchar chewei_b_max = 2;
    
    uchar Flga_ir_r = 0;
    uchar Flga_ir_ca = 0;
    uchar Flga_ir_cb = 0;
    uchar Flga_use = 0;
    uchar menu = 0;
    /*
    	自定义延时子函数
    */
    void delayms(uchar z)
    {
    	 int x,y;
    	 for(x=z;x>0;x--)
    	    for(y=110;y>0;y--);
    }
    
    /*
         判断LCD忙信号状态
    */
    void buys()
    {
    	 int dat;
    	 RW=1;
    	 RS=0;
    	 do
    	   {	
    	        P0=0x00;_nop_();
    	        E=1;_nop_();
    			dat=P0;_nop_();
    			E=0;_nop_();
    			dat=0x80 & dat;
    		} while(!(dat==0x00));
    }
    
    /*
         LCD写指令函数
    */
    void w_com(uchar com)
    {
    	 //buys();
    	 RW=0;
    	 RS=0;
    	 E=1;_nop_();
    	 P0=com;_nop_();
    	 E=0;_nop_();
    	
    }
    
     /*
         LCD写数据函数
    */
    void w_date(uchar date)
    {
    	 //buys();
    	 RW=0;
    	 RS=1;
    	 E=1;_nop_();
    	 P0=date;_nop_();
    	 E=0;_nop_();
    }
    
    
    /*
    	   LCD选屏函数
    */
    void select_screen(uchar screen)
    {
    	   switch(screen)
    	   {
    	   		  case 0:     //选择全屏
    			           CS1=0;
    							  CS2=0;
    	   					 break;
    			  case 1:     //选择左屏
    			             CS1=0;
    						 CS2=1;
    	   					 break;
    			           
    	   	   	  case 2:     //选择右屏
    			             CS1=1;
    						 CS2=0;
    	   					 break;
    		  	  case 3:     //选择右屏
    			             CS1=1;
    						   CS2=1;
    	   				      break;
    		
    	   }	   	  
    	   
    }
    
    
    /*
    	   LCD清屏函数:清屏从第一页的第一列开始,总共8页,64列
    */
    void clear_screen(screen)
    {
    	 int x,y;
    	 select_screen(screen);		   //screen:0-选择全屏,1-选择左半屏,2-选择右半屏
    	 for(x=0xb8;x<0xc0;x++)			//从0xb8-0xbf,共8页
    	    {
    			w_com(x);
    			w_com(0x40);			//列的初始地址是0x40
    			for(y=0;y<64;y++)
    			   {
    			   	    w_date(0x00);
    			   
    			    }
    	     }	   
    }
    
    /*
    		LCD显示汉字字库函数
    */
    void lcd_display_hanzi(uchar screen,uchar page,uchar col,uint mun)
    {		//screen:选择屏幕参数,page:选择页参数0-3,col:选择列参数0-3,mun:显示第几个汉字的参数
          int a;
    	  mun=mun*32;
    	  select_screen(screen);
    	  w_com(0xb8+(page*2));
    	  w_com(0x40+(col*16));
    	  for (	a=0;a<16;a++)
    	     {
    		 	   w_date(hanzi[mun++]);
    		 
    		 }
    	  w_com(0xb8+(page*2)+1);
    	  w_com(0x40+(col*16));
    	  for (	a=0;a<16;a++)
    	     {
    		 	   w_date(hanzi[mun++]);
    		 
    		 }
    }
    
    void LCD12864_HanZi(uchar page,uchar col,uint mun)
    {
    	
       int a;
    	 
    	if(col >= 4)
    	{
    		select_screen(2);
    		col -= 4;
    	}
    	else
    	{
    		select_screen(1);		
    	}
    	
    	  mun=mun*32;
    	 
    	  w_com(0xb8+(page*2));
    	  w_com(0x40+(col*16));
    	  for (	a=0;a<16;a++)
    	     {
    		 	   w_date(hanzi[mun++]);
    		 }
    	  w_com(0xb8+(page*2)+1);
    	  w_com(0x40+(col*16));
    	  for (	a=0;a<16;a++)
    	     {
    		 	   w_date(hanzi[mun++]);
    		 }
    }
    
    //void LCD12864_HanZi_Str(uchar page,uchar col,uint* mun)
    //{
    
    //	while(*mun)
    //	{
    //		LCD12864_HanZi(page,col,mun);
    //		mun++;
    //	}
    //}
    
    void lcd_display_shuzi(uchar screen,uchar page,uchar col,uchar mun)
    {		//screen:选择屏幕参数,page:选择页参数0-3,col:选择列参数0-7,mun:显示第几个汉字的参数
          int a;
    	  mun=mun*16;
    	  select_screen(screen);
    	  w_com(0xb8+(page*2));
    	  w_com(0x40+(col*8));
    	  for (	a=0;a<8;a++)
    	     {
    		 	   w_date(shuzi[mun++]); 
    		 }
    	  w_com(0xb8+(page*2)+1);
    	  w_com(0x40+(col*8));
    	  for (	a=0;a<8;a++)
    	   {
    		 	   w_date(shuzi[mun++]);
    		 }
    }
    
    void LCD12864_ShuZi(uchar page,uchar col,uint mun)
    {
    	
       int a; 
    	if(col >= 8)
    	{
    		select_screen(2);
    		col -= 8;
    	}
    	else
    	{
    		select_screen(1);		
    	}
    	  mun=mun*16;
    	  w_com(0xb8+(page*2));
    	  w_com(0x40+(col*8));
    	  for (	a=0;a<8;a++)
    	     {
    		 	   w_date(shuzi[mun++]); 
    		 }
    	  w_com(0xb8+(page*2)+1);
    	  w_com(0x40+(col*8));
    	  for (	a=0;a<8;a++)
    	   {
    		 	   w_date(shuzi[mun++]);
    		 
    		 }
    		 
    }
    
    void LCD12864_Numb(uchar page,uchar col,uint mun)
    {
    }
    
    //void DisplayNumb(uchar screen,uchar page,uchar col,uint mun)
    //{
    //	
    //	uchar Numb[8];
    //	unsigned char y;
    //	lcd_display_shuzi(screen,page,col+1,10);
    //	lcd_display_shuzi(screen,page,col+2,10);
    //	lcd_display_shuzi(screen,page,col+3,10);
    //	lcd_display_shuzi(screen,page,col+4,10);
    //	lcd_display_shuzi(screen,page,col+5,10);
    //	lcd_display_shuzi(screen,page,col+6,10);
    //	sprintf(Numb,"%d",(uint)mun);
    //	y = 0;	
    //	do
    //	{	
    //		lcd_display_shuzi(screen,page,y+col,Numb[y]);
    //	  lcd_display_shuzi(screen,page,y+col+1,10);
    //		//lcd_display_shuzi(screen,page,y+col+2,10);
    //		y++;	
    //	}while(Numb[y]);
    //	lcd_display_shuzi(screen,page,y+col,11);
    //	lcd_display_shuzi(screen,page,y+col+1,12);	
    //}
    
    void Delay_ms(int cnt)		//@11.0592MHz
    {
    	unsigned char i, j;
    	while(cnt--)
    	{
    		i = 2;
    		j = 199;
    		do
    		{
    			while (--j);
    		} while (--i);
    	}
    }
    
    /*
    		LCD初始化函数
    */
    void lcd_init()
    {
    	 w_com(0x3f);		 //LCD开显示
    	 w_com(0xc0);		 //LCD行初始地址,共64行
    	 w_com(0xb8);		 //LCD页初始地址,共8页
    	 w_com(0x40);		 //LCD列初始地址,共64列
        
    }
    		//$GPRMC,055607.00,A,3959.44811,N,11625.31055,E,2.312,,300317,,,A*78
    		//$GPRMC,055609.00,A,3959.44931,N,11625.31260,E,0.802,,300317,,,A*79
    		//20180424定位数据
    	//$GPRMC,123824.000,A,3300.8520,N,11237.0341,E,0.00,0.00,240418,,,A*6460		//$GPGGA,124123.000,3300.8535,N,11237.0404,E,6,05,2.0,96.8,M,0.0,M,,*		//$GPGGA,124521.000,3300.8496,N,11237.0337,E,1,06,2.1,109.9,M,0.0,M,,		//$GPGGA,124932.000,3300.8753,N,11237.0498,E,6,05,9.4,77.6,M,0.0,M,,*5053	
    void UART_ISR(void) interrupt 4
    {
    	unsigned char a;
    	
    	if(RI)
    	{
    		RI = 0;
    		a = SBUF;	
    	}
    	else 
    	{
    		TI = 0;	
    	}
    	
    }
    
    char putchar (char c)   
    {        
        ES=0;        
        SBUF = c;        
        while(TI==0);        
        TI=0;        
        ES=1;        
        return 0;
    }
    
    void SendData(uchar dat) {
    
    	SBUF = dat;       //把数据放到SBUF中
    	while (TI == 0);//未发送完毕就等待
    	TI = 0;    //发送完毕后,要把TI重新置0
    	
    }
    
    void SendString(char *s) {
        while (*s) {            //Check the end of the string
            SendData(*s++);     //Send current char and increment string ptr
        }
    }
    
    void UART0_Init(void)		//9600bps@11.0592MHz
    {
    	PCON &= 0x7F;		//波特率不倍速
    	SCON = 0x50;		//8位数据,可变波特率
    	//AUXR &= 0xBF;		//定时器1时钟为Fosc/12,即12T
    	//AUXR &= 0xFE;		//串口1选择定时器1为波特率发生器
    	TMOD &= 0x0F;		//清除定时器1模式位
    	TMOD |= 0x20;		//设定定时器1为8位自动重装方式
    	TL1 = 0xFD;		//设定定时初值
    	TH1 = 0xFD;		//设定定时器重装值
    	ET1 = 0;		//禁止定时器1中断
    	TR1 = 1;		//启动定时器1
    	ES = 1;       //允许串口禁止
    	EA = 1;
    }
    
    typedef unsigned char BYTE;
    typedef unsigned int WORD;
    
    /*Declare SFR associated with the IAP */
    sfr IAP_DATA    =   0xE2;           //Flash data register
    sfr IAP_ADDRH   =   0xE3;           //Flash address HIGH
    sfr IAP_ADDRL   =   0xE4;           //Flash address LOW
    sfr IAP_CMD     =   0xE5;           //Flash command register
    sfr IAP_TRIG    =   0xE6;           //Flash command trigger
    sfr IAP_CONTR   =   0xE7;           //Flash control register
    
    /*Define ISP/IAP/EEPROM command*/
    #define CMD_IDLE    0               //Stand-By
    #define CMD_READ    1               //Byte-Read
    #define CMD_PROGRAM 2               //Byte-Program
    #define CMD_ERASE   3               //Sector-Erase
    
    /*Define ISP/IAP/EEPROM operation const for IAP_CONTR*/
    //#define ENABLE_IAP 0x80           //if SYSCLK<40MHz
    #define ENABLE_IAP   0x81           //if SYSCLK<20MHz
    //#define ENABLE_IAP x82            //if SYSCLK<10MHz
    //#define ENABLE_IAP 0x83           //if SYSCLK<5MHz
    
    
    /*----------------------------
    Disable ISP/IAP/EEPROM function
    Make MCU in a safe state
    ----------------------------*/
    void IapIdle()
    {
        IAP_CONTR = 0;                  //Close IAP function
        IAP_CMD = 0;                    //Clear command to standby
        IAP_TRIG = 0;                   //Clear trigger register
        IAP_ADDRH = 0x80;               //Data ptr point to non-EEPROM area
        IAP_ADDRL = 0;                  //Clear IAP address to prevent misuse
    }
    
    /*----------------------------
    Read one byte from ISP/IAP/EEPROM area
    Input: addr (ISP/IAP/EEPROM address)
    Output:Flash data
    ----------------------------*/
    BYTE IapReadByte(WORD addr)
    {
        BYTE dat;                       //Data buffer
    
        IAP_CONTR = ENABLE_IAP;         //Open IAP function, and set wait time
        IAP_CMD = CMD_READ;             //Set ISP/IAP/EEPROM READ command
        IAP_ADDRL = addr;               //Set ISP/IAP/EEPROM address low
        IAP_ADDRH = addr >> 8;          //Set ISP/IAP/EEPROM address high
        IAP_TRIG = 0x46;                //Send trigger command1 (0x46)
        IAP_TRIG = 0xb9;                //Send trigger command2 (0xb9)
        _nop_();                        //MCU will hold here until ISP/IAP/EEPROM operation complete
        dat = IAP_DATA;                 //Read ISP/IAP/EEPROM data
        IapIdle();                      //Close ISP/IAP/EEPROM function
    
        return dat;                     //Return Flash data
    }
    
    /*----------------------------
    Program one byte to ISP/IAP/EEPROM area
    Input: addr (ISP/IAP/EEPROM address)
           dat (ISP/IAP/EEPROM data)
    Output:-
    ----------------------------*/
    void IapProgramByte(WORD addr, BYTE dat)
    {
        IAP_CONTR = ENABLE_IAP;         //Open IAP function, and set wait time
        IAP_CMD = CMD_PROGRAM;          //Set ISP/IAP/EEPROM PROGRAM command
        IAP_ADDRL = addr;               //Set ISP/IAP/EEPROM address low
        IAP_ADDRH = addr >> 8;          //Set ISP/IAP/EEPROM address high
        IAP_DATA = dat;                 //Write ISP/IAP/EEPROM data
        IAP_TRIG = 0x46;                //Send trigger command1 (0x46)
        IAP_TRIG = 0xb9;                //Send trigger command2 (0xb9)
        _nop_();                        //MCU will hold here until ISP/IAP/EEPROM operation complete
        IapIdle();
    }
    
    /*----------------------------
    Erase one sector area
    Input: addr (ISP/IAP/EEPROM address)
    Output:-
    ----------------------------*/
    void IapEraseSector(WORD addr)
    {
        IAP_CONTR = ENABLE_IAP;         //Open IAP function, and set wait time
        IAP_CMD = CMD_ERASE;            //Set ISP/IAP/EEPROM ERASE command
        IAP_ADDRL = addr;               //Set ISP/IAP/EEPROM address low
        IAP_ADDRH = addr >> 8;          //Set ISP/IAP/EEPROM address high
        IAP_TRIG = 0x46;                //Send trigger command1 (0x46)
        IAP_TRIG = 0xb9;                //Send trigger command2 (0xb9)
        _nop_();                        //MCU will hold here until ISP/IAP/EEPROM operation complete
        IapIdle();
    }
    
    volatile unsigned char Mode_Cnt = 0;
    volatile unsigned char Mode = 0;
    
    unsigned char Input = 0;
    
    #define Delay_CONST   50
    volatile unsigned short Delay_Cnt = Delay_CONST;
    
    /*
    		LCD显示主函数
    */
    /*void main()
    {
    
    	static unsigned short Delay_Cnt = 0;
    	static unsigned Numb = 0;
      //第一行
          int x;
    	
    	 Delay_ms(200);
    	  lcd_init();			  //LCD初始化
    	  clear_screen(0);		  //LCD清屏幕
    	  clear_screen(1);
    	  clear_screen(2);
    	  clear_screen(3);
    		TR0 = 1;
    	
    		 // LCD12864_HanZi(0,0,1);
    		  LCD12864_HanZi(0,1,1);
    		  LCD12864_HanZi(0,2,2);
    		  LCD12864_HanZi(0,3,3);
    		  LCD12864_HanZi(0,4,4);
    		  LCD12864_HanZi(0,5,5);
    		  LCD12864_HanZi(0,6,6);
    		//  LCD12864_HanZi(0,7,7);
    		 
    			LCD12864_HanZi(1,0,7);
    			LCD12864_HanZi(1,1,8);
    			LCD12864_HanZi(1,2,9);
    			LCD12864_HanZi(1,3,10);	 
    			
    			LCD12864_HanZi(2,0,11);
    			LCD12864_HanZi(2,1,12);
    			LCD12864_HanZi(2,2,13);
    			LCD12864_HanZi(2,3,14);	 			
    
    			LCD12864_HanZi(3,2,15); //欢迎光临
    			LCD12864_HanZi(3,3,16);
    			LCD12864_HanZi(3,4,17);
    			LCD12864_HanZi(3,5,18);	 
      
    	   while(1)
    	   {				 
    			 
    			  Input = 0;
    				if(IR_1 == 0)
    				{
    					Input++;
    					Red_1 = 0;
    					Green_1 = 1;
    					Yellow_1 = 1;
    				}
    				else
    				{
    					Red_1 = 1;
    					Green_1 = 0;
    				}
    				
    				if(IR_2 == 0)
    				{
    					Input++;
    				  Red_2 = 0;
    					Green_2 = 1;Yellow_2 = 1;
    				}
    				else
    				{
    					Red_2 = 1;
    					Green_2 = 0;
    				}
    				
    				if(IR_3 == 0)
    				{
    					Input++;
    				  Red_3 = 0;
    					Green_3 = 1;Yellow_3 = 1;
    				}
    				else
    				{
    					Red_3 = 1;
    					Green_3 = 0;
    				}
    				
    				
    				if(IR_4 == 0)
    				{
    					Input++;
    				  Red_4 = 0;
    					Green_4 = 1;Yellow_4 = 1;
    				}
    				else
    				{
    					Red_4 = 1;
    					Green_4 = 0;
    				}
    
    			 LCD12864_ShuZi(1,10,Input);
    			 LCD12864_HanZi(1,6,23);	 
    			 
    			 LCD12864_ShuZi(2,10,4-Input);
    			 LCD12864_HanZi(2,6,23);		
    
    			 if(IR_0 == 0)
    			 {
    				 
    				 Delay_Cnt = Delay_CONST;
    				 
    				 	LCD12864_HanZi(3,2,15); //欢迎光临
    					LCD12864_HanZi(3,3,16);
    					LCD12864_HanZi(3,4,17);
    					LCD12864_HanZi(3,5,18);
    				 
    				 if(IR_1 == 1)
    				{
    					Yellow_1 = 0;
    				}
    				else if(IR_2 == 1)
    				{
    					Yellow_2 = 0;
    				}
    				else if(IR_3 == 1)
    				{
    					Yellow_3 = 0;
    					
    				}
    				else
    				{
    					Yellow_4 = 0;
    					
    				}
    				 
    //				 switch(TH0 % 4)
    //				 {
    //					 case 0:
    //						 
    //								Yellow_1 = 0;
    //					 
    //								break;
    //					 
    //					 case 1:
    //						 
    //								Yellow_2 = 0;
    //					 
    //								break;
    //					 case 2:
    //						 
    //								Yellow_3 = 0;
    //					 
    //								break;
    //					 case 3:
    //						 
    //								Yellow_4 = 0;
    //					 
    //								break;
    //				 }
    			 }
    			 	 
    			 if(Input == 4)
    			 {
    					LCD12864_HanZi(3,2,19); //车位已满
    					LCD12864_HanZi(3,3,20);
    					LCD12864_HanZi(3,4,21);
    					LCD12864_HanZi(3,5,22);	  
    			 }
    			 else
    			 {
    				 
    				 if(Delay_Cnt == 0)
    				 {
    				 	LCD12864_HanZi(3,2,0); //不显示
    					LCD12864_HanZi(3,3,0);
    					LCD12864_HanZi(3,4,0);
    					LCD12864_HanZi(3,5,0);
    					  
    					 Yellow_1 = 1;
    					 Yellow_2 = 1;
    					 Yellow_3 = 1;
    					 Yellow_4 = 1;
    					 
    				 }
    				 else
    				 {
    					 Delay_Cnt--;			 
    				 }
    			 
    		   }
    			 
    			 
    			 switch(Mode)
    			 {
    				 
    					case 0:
     
    					break;
    					
    					case 1:
    							
    						//	Display_Telephone(); 
    								
    							break;
    					
    			 }
    
    			 if(KEY1 == 0)
    			 {
    				 Delay_ms(100);
    
    				 while(KEY1 == 0);					 
    				 	 
    			 }
    			 
    			 if(KEY2 == 0)
    			 {
    				 Delay_ms(200);
     
    				while(KEY2 == 0);					 
     
    			 }			 
     
    			 if(KEY3 == 0)
    			 {
    				
    				 Delay_ms(20);
     
    				 while(KEY3 == 0);
    			 }				 
    
    			 Delay_ms(100);
    			
    	 }  
    }
    
    */
    
    void display_zhu()
    {	
    	//A区剩余车位:
    	LCD12864_ShuZi(1,0,13);
    	LCD12864_HanZi(1,1,7);	  
    	LCD12864_HanZi(1,2,8);	  
    	LCD12864_HanZi(1,3,9);	  
    	LCD12864_HanZi(1,4,10);	  
    	LCD12864_HanZi(1,5,11);	  
    	LCD12864_ShuZi(1,12,12);
    
    	LCD12864_ShuZi(1,14,((chewei_a_max-chewei_a)/10%10));
    	LCD12864_ShuZi(1,15,((chewei_a_max-chewei_a)%10));
    	
    	//B区剩余车位
    	LCD12864_ShuZi(2,0,14);
    	LCD12864_HanZi(2,1,7);	  
    	LCD12864_HanZi(2,2,8);	  
    	LCD12864_HanZi(2,3,9);	  
    	LCD12864_HanZi(2,4,10);	  
    	LCD12864_HanZi(2,5,11);	  
    	LCD12864_ShuZi(2,12,12);
    
    	LCD12864_ShuZi(2,14,((chewei_b_max-chewei_b)/10%10));
    	LCD12864_ShuZi(2,15,((chewei_b_max-chewei_b)%10));
    	
    }
    
    void proc_cr()
    {
    	if(Flga_ir_ca == 0 && Flga_ir_cb == 0)
    	{
    		if(ir_r == 0)
    		{
    			Delay_ms(30);
    			if(ir_r == 0)
    			{
    			if(Flga_ir_r == 0)//防止车辆通过检测口又回去了
    				Flga_ir_r = 1;
    			else
    				Flga_ir_r = 0;
    			}
    			while(!ir_r);
    		}
    		if(Flga_ir_r == 1)
    		{
    			if(ir_a == 0)
    			{		
    				Delay_ms(30);
    				if(ir_a == 0)
    				{
    					if(chewei_a < chewei_a_max)
    						chewei_a++;
    					Flga_ir_r = 0;
    				}
    				while(ir_a == 0);
    			}
    			if(ir_b == 0)
    			{
    				Delay_ms(30);
    				if(ir_b == 0)
    				{
    					if(chewei_b < chewei_b_max)
    						chewei_b++;
    					Flga_ir_r = 0;
    				}
    				while(!ir_b);
    			}
    		}
    	}
    	
    	//判断出去的车辆,这样车位应该增加
    	if(Flga_ir_r == 0)
    	{
    		if(ir_a == 0)
    		{
    			Delay_ms(30);
    			if(ir_a == 0)
    			{
    				if(Flga_ir_ca == 0)
    					Flga_ir_ca = 1;
    				else
    					Flga_ir_ca = 0;
    			}
    			while(ir_a == 0);
    		}
    		if(ir_b == 0)
    		{
    			Delay_ms(30);
    			if(ir_b == 0)
    			{
    				if(Flga_ir_cb == 0)
    					Flga_ir_cb = 1;
    				else
    					Flga_ir_cb = 0;
    			}
    			while(ir_b == 0);
    		}
    		if(Flga_ir_ca == 1 || Flga_ir_cb == 1)
    		{
    			if(ir_r == 0)
    			{
    				Delay_ms(30);
    				if(ir_r == 0)
    				{
    					if(Flga_ir_ca == 1)
    					{
    						if(chewei_a>0)
    							chewei_a--;
    						Flga_ir_ca = 0;
    					}
    					if(Flga_ir_cb == 1)
    					{
    						if(chewei_b>0)
    							chewei_b--;
    						Flga_ir_cb = 0;
    					}
    				}
    				while(!ir_r);
    			}
    		}
    	}
    	
    }
    void clearn_lcd(uchar hang)
    {
    	uchar i = 0;
    	for(i = 0;i<8;i++)
    	{
    		LCD12864_HanZi(hang,i,0);	  
    	}
    }
    
    void proc_led()
    {
    	if(Flga_ir_ca == 1 || Flga_ir_cb == 1)
    	{
    		LCD12864_HanZi(3,0,0);	  
    		LCD12864_HanZi(3,1,25);	  
    		LCD12864_HanZi(3,2,26);	  //祝您一路顺丰
    		LCD12864_HanZi(3,3,27);	  
    		LCD12864_HanZi(3,4,28);	  
    		LCD12864_HanZi(3,5,29);
    		LCD12864_HanZi(3,6,30);	
    		LCD12864_HanZi(3,7,0);	
    		led_zuo = 1;
    		led_you = 1;
    		led_zho1 = 1;
    		led_zho2 = 1;
    		return;
    	}
    	
    	
    	if(chewei_a == chewei_a_max && chewei_b == chewei_b_max)
    	{
    		LCD12864_HanZi(3,0,0);	  
    		LCD12864_HanZi(3,1,0);	  
    		LCD12864_HanZi(3,2,17);	  //车位已满
    		LCD12864_HanZi(3,3,18);	  
    		LCD12864_HanZi(3,4,19);	  
    		LCD12864_HanZi(3,5,20);
    		LCD12864_HanZi(3,6,0);	
    		LCD12864_HanZi(3,7,0);	
    		led_zuo = 0;
    		led_you = 0;
    		led_zho1 = 0;
    		led_zho2 = 0;
    		return ;
    	}
    	
    	if((chewei_a_max-chewei_a)>=(chewei_b_max-chewei_b))
    	{
    		Flga_use = 0;
    	}
    	else
    	{
    		Flga_use = 1;
    	}
    	
    	if(Flga_ir_r == 1)
    	{
    		LCD12864_HanZi(3,0,13);	  
    		LCD12864_HanZi(3,1,14);	  
    		LCD12864_HanZi(3,2,15);	  
    		LCD12864_HanZi(3,3,16);
    		LCD12864_HanZi(3,4,0);	  
    		LCD12864_HanZi(3,5,21);	
    		if(Flga_use == 0)
    		{
    			LCD12864_HanZi(3,6,22);
    			led_zuo = 0;
    			led_you = 1;
    			led_zho1 = 0;
    			led_zho2 = 0;
    		}
    		else
    		{
    			LCD12864_HanZi(3,6,23);
    			led_zuo = 1;
    			led_you = 0;
    			led_zho1 = 0;
    			led_zho2 = 0;
    		}
    		LCD12864_HanZi(3,7,24);	  
    	}
    	else
    	{
    		LCD12864_HanZi(3,0,0);	  
    		LCD12864_HanZi(3,1,0);	  
    		LCD12864_HanZi(3,2,13);	  //欢迎光临
    		LCD12864_HanZi(3,3,14);	  
    		LCD12864_HanZi(3,4,15);	  
    		LCD12864_HanZi(3,5,16);
    		LCD12864_HanZi(3,6,0);	
    		LCD12864_HanZi(3,7,0);		
    		led_zuo = 1;
    		led_you = 1;
    		led_zho1 = 1;
    		led_zho2 = 1;
    	}
    }
    
    void key_scan()
    {
    	if(!KEY1)
    	{
    		Delay_ms(30);
    		if(!KEY1)
    		{
    			menu++;
    			if(menu >= 3)
    				menu = 0;
    			if(menu == 0)
    			{
    				clear_screen(0);		  //LCD清屏幕
    				clear_screen(1);
    				clear_screen(2);
    				clear_screen(3);
    				LCD12864_HanZi(0,1,1);	  
    				LCD12864_HanZi(0,2,2);	  
    				LCD12864_HanZi(0,3,3);	  
    				LCD12864_HanZi(0,4,4);	  
    				LCD12864_HanZi(0,5,5);	  
    				LCD12864_HanZi(0,6,6);	  
    			}
    			else if(menu == 1)
    			{
    				clear_screen(0);		  //LCD清屏幕
    				clear_screen(1);
    				clear_screen(2);
    				clear_screen(3);
    				LCD12864_HanZi(0,1,31);	  
    				LCD12864_HanZi(0,2,32);	  
    				LCD12864_HanZi(0,3,33);	  
    				LCD12864_HanZi(0,4,34);	  
    				LCD12864_HanZi(0,5,35);	  
    				
    				//A区总车位:
    				LCD12864_ShuZi(1,0,13);
    				LCD12864_HanZi(1,1,7);	  
    				LCD12864_HanZi(1,2,31);	  
    				LCD12864_HanZi(1,3,10);	  
    				LCD12864_HanZi(1,4,11);	  
    				LCD12864_ShuZi(1,10,12);
    
    				LCD12864_ShuZi(1,12,((chewei_a_max)/10%10));
    				LCD12864_ShuZi(1,13,((chewei_a_max)%10));
    				LCD12864_ShuZi(1,15,15);
    				
    				//B区总车位
    				LCD12864_ShuZi(2,0,14);
    				LCD12864_HanZi(2,1,7);	  
    				LCD12864_HanZi(2,2,31);	  
    				LCD12864_HanZi(2,3,10);	  
    				LCD12864_HanZi(2,4,11);	  
    				LCD12864_ShuZi(2,10,12);
    
    				LCD12864_ShuZi(2,12,((chewei_b_max)/10%10));
    				LCD12864_ShuZi(2,13,((chewei_b_max)%10));
    			}
    			else if(menu == 2)
    			{
    				clear_screen(0);		  //LCD清屏幕
    				clear_screen(1);
    				clear_screen(2);
    				clear_screen(3);
    				LCD12864_HanZi(0,1,31);	  
    				LCD12864_HanZi(0,2,32);	  
    				LCD12864_HanZi(0,3,33);	  
    				LCD12864_HanZi(0,4,34);	  
    				LCD12864_HanZi(0,5,35);	  
    				
    				//A区总车位:
    				LCD12864_ShuZi(1,0,13);
    				LCD12864_HanZi(1,1,7);	  
    				LCD12864_HanZi(1,2,31);	  
    				LCD12864_HanZi(1,3,10);	  
    				LCD12864_HanZi(1,4,11);	  
    				LCD12864_ShuZi(1,10,12);
    
    				LCD12864_ShuZi(1,12,((chewei_a_max)/10%10));
    				LCD12864_ShuZi(1,13,((chewei_a_max)%10));
    				
    				//B区总车位
    				LCD12864_ShuZi(2,0,14);
    				LCD12864_HanZi(2,1,7);	  
    				LCD12864_HanZi(2,2,31);	  
    				LCD12864_HanZi(2,3,10);	  
    				LCD12864_HanZi(2,4,11);	  
    				LCD12864_ShuZi(2,10,12);
    
    				LCD12864_ShuZi(2,12,((chewei_b_max)/10%10));
    				LCD12864_ShuZi(2,13,((chewei_b_max)%10));
    				LCD12864_ShuZi(2,15,15);
    			}
    		}
    		while(!KEY1);
    	}
    	if(!KEY2)
    	{
    		Delay_ms(30);
    		if(!KEY2)
    		{
    			if(menu == 1)
    			{
    				if(chewei_a_max<99)
    					chewei_a_max++;
    				LCD12864_ShuZi(1,12,((chewei_a_max)/10%10));
    				LCD12864_ShuZi(1,13,((chewei_a_max)%10));
    			}
    			else if(menu == 2)
    			{
    				if(chewei_b_max<99)
    					chewei_b_max++;
    				LCD12864_ShuZi(2,12,((chewei_b_max)/10%10));
    				LCD12864_ShuZi(2,13,((chewei_b_max)%10));
    			}
    		}
    		while(!KEY2);
    	}
    	if(!KEY3)
    	{
    		Delay_ms(30);
    		if(!KEY3)
    		{
    			if(menu == 1)
    			{
    				if(chewei_a_max>0+chewei_a)
    					chewei_a_max--;
    				LCD12864_ShuZi(1,12,((chewei_a_max)/10%10));
    				LCD12864_ShuZi(1,13,((chewei_a_max)%10));
    			}
    			else if(menu == 2)
    			{
    				if(chewei_b_max>0+chewei_b)
    					chewei_b_max--;
    				LCD12864_ShuZi(2,12,((chewei_b_max)/10%10));
    				LCD12864_ShuZi(2,13,((chewei_b_max)%10));
    			}
    		}
    		while(!KEY3);
    	}
    }
    
    void main()
    {
    	Delay_ms(200);
    	lcd_init();			  //LCD初始化
    	clear_screen(0);		  //LCD清屏幕
    	clear_screen(1);
    	clear_screen(2);
    	clear_screen(3);
    	LCD12864_HanZi(0,1,1);	  
    	LCD12864_HanZi(0,2,2);	  
    	LCD12864_HanZi(0,3,3);	  
    	LCD12864_HanZi(0,4,4);	  
    	LCD12864_HanZi(0,5,5);	  
    	LCD12864_HanZi(0,6,6);	  
    	
    	while(1)
    	{
    		if(menu == 0)
    		{
    			display_zhu();
    			proc_cr();
    			proc_led();
    		}
    		key_scan();
    	}
    }

     

     

    展开全文
  • 基于微信小程序的停车位预约系统设计与实现毕业设计

    【用户功能】

    1. 用户注册:普通用户的账号由用户自行注册
    2. 户登录:用自己注册的账号登录,也可以使用微信账号授权登录

    (3)资讯功能:家政服务预约小程序的资讯,用户可以任意浏览资讯列表和详细信息

    (4)停车场列表:列出所有的停车场信息

    (5)停车场查询:可以输入关键字,查询指定的停车场

    (6)停车场详情:显示名称、收费标准、停车场介绍

    (7)停车场评论:使用过该停车场人员的评论列表

    (8)停车场收藏:在详情页面底部点击收藏,加入收藏列表

    (9)预约车位:选择停车场、选车停车位置、立即预约车位

    (10)我的车位预约订单:显示我的所有预约信息列表

    (11)取消预约:对于刚提交的车位预约,还没有付款之前,可以取消

    (12)去付款:模拟付款

    (13)出库和付费:模拟付费后成功出库

    (14)去评论:对于已经完结的订单,可以对停车场进行评论

    (14)我的收藏:用户收藏的停车场列表

    (15)用户信息修改

    (16)退出登录:清除登状态

     

     

     

     

    展开全文
  • 以前落后的人力停车管理即将被高科技化的自动停车管理系统所取代,高度自动化的停车场管理系统节省了大量时间和人力物资消耗,大大提高了效率。 功能描述: 1、采用51单片机作为主控芯片; 2、采用红外避障...

    随着人们生活水平的提高,汽车的数量也与日俱增,于是停车正在成为世界性的问题。以前落后的人力停车管理即将被高科技化的自动停车管理系统所取代,高度自动化的停车场管理系统节省了大量时间和人力物资消耗,大大提高了效率。

    功能描述

    1、采用51单片机作为主控芯片;

    2、采用红外避障传感器作为计数电路;

    3、采用LCD1602作为显示模块;

    4、当剩余车位数为0时,蜂鸣器报警、红灯亮(平时绿灯亮);

    按键说明

    1、设置键:设置车位总量;

    2、加值键:对设置值+1操作;

    3、减值键:对设置值-1操作;

    整体方案

    电路设计

    采用Altium Designer作为电路设计工具。Altium Designer通过把原理图设计、PCB绘制编辑、拓扑逻辑自动布线、信号完整性分析和设计输出等技术的完美融合,为设计者提供了全新的设计解决方案,使设计者可以轻松进行设计,熟练使用这一软件必将使电路设计的质量和效率大大提高。

    仿真设计

    采用Proteus作为仿真设计工具。Proteus是一款著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。

    主程序设计

    
    void main()
    {
    	init_1602();	//lcd1602初始化
    	while(1)
    	{
    		key();			   //按键扫描函数
    		if(key_can < 10)
    			key_with();    //按键执行函数
    		hw_jin_dis();	//红外计数	
    		hw_chu_dis();	//红外计数	
    		if(num == 0)
    		{
    			red  = 0;  green = 1; //车位为0 红灯亮
    		}else 
    		{
    			red  = 1;  green = 0; //绿灯亮
    		}						
    		delay_1ms(100);
    
    	}
    }

    源文件获取

    微信扫码关注公众号【电子开发圈】,首页发送 “车位” 获取;

     

    展开全文
  • 基于微信停车位预约小程序系统开题报告
  • 本文设计了一种智能停车场的车位信息检测及管理系统系统通过在停车车位上安装地磁感应装置,实时采集车位的状态信息,然后借助GPRS无线网络传输至信息管理平台,信息管理平台进行后续数据的处理及信息显示,最后...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,265
精华内容 2,906
热门标签
关键字:

停车位显示系统