AT89C51单片机设计详解:自动追光系统与光源跟踪系统(光敏电阻+步进电机)

想要更多项目私wo!!!

一、电路设计

        51 单片机双轴自动追光系统主要由 STC89C52RC + 5516 光敏电阻 + ADC0832 + ULN2803 + 步进电机 + LCD1602 显示屏组成。

        1.通过子电路板的上、下、左、右四个光敏电阻来感受四个方向的光强,自

动寻找光强最强的方向。四个光敏电阻的分压电路将测得的光强转换为电信号,

再通过两个 ADC0832 转换为数字量,单片机对数据进行比较处理之后进行显示

并输出控制信号通过 ULN2803 芯片驱动步进电机转动。

        2.系统共设置有两个模式,自动模式与手动模式,可通过按键切换。

        3.自动模式下分为寻光与避光模式,寻光模式下系统会自动寻找光照最强的

地方,避光模式下系统会避开光照强烈的地方,可通过按键切换。

        4.手动模式下可通过上下左右四个按键(只在手动模式有效)来控制电机的

转动。

        5.LCD1602 液晶屏实时显示 ADC 芯片转换的光敏数值

二、运行结果

三、部分代码

 

#include <reg52.h>
#include "Delay.h"
#include "ADC0832.h"
#include "LCD1602.h"
#include "StepMotor.h"

#define uchar unsigned char	//ºê¶¨Òå
#define uint  unsigned int	//ºê¶¨Òå

#define Light_Sensty  3		 //¸Ð¹âÁéÃô¶È

sbit Key_Pattern = P3^4;	//ģʽÇл»
sbit Key_Blk_or_Lgt = P3^5;	//×Ô¶¯Ñ°/±Ü¹â
sbit Key_Up   	=	P3^0; 	//ÉÏ°´¼ü 
sbit Key_Down 	= 	P3^1; 	//Ï°´¼ü 
sbit Key_Left 	= 	P3^2; 	//×ó°´¼ü 
sbit Key_Right	= 	P3^3; 	//ÓÒ°´¼ü 

uchar Up_data,Down_data,Right_data,Left_data;//X,Y·½ÏòµÄ¹âÕÕÊýÖµ
bit flag_Blk_or_Lgt;	//ÓÃÓÚÇл»Ñ°ºÚ¡¢Ñ°¹â
bit flag_Auto_or_Hand;	//ÓÃÓÚÇл»×Ô¶¯¡¢ÊÖ¶¯


uchar code *DIS1=" Welcome to use ";
uchar code *DIS2=" Wait a jiff    ";
uchar code *DIS3="                ";
uchar code table[]={0,1,2,3,4,5,6,7,8,9};//ÏÔʾÊý×ÖÂë±í

/********************************************************************
* Ãû³Æ : void DataDisplay(void)
* ¹¦ÄÜ : »ñÈ¡¹âÕÕÊýÖµµÄ¸ö¡¢Ê®¡¢°ÙλµÄÊý 
* ÊäÈë : ÎÞ
* Êä³ö : ÎÞ
***********************************************************************/
typedef struct LIGHT 	 
{
	uchar bai1,shi1,ge1; //ÉÏÏÂ
	uchar bai2,shi2,ge2; //×óÓÒ
}LIGHT1;
LIGHT1 AD1,AD2;

void DisplayInit(void)
{
	L1602_string(1,1,DIS1);//¿ª»úÏÔʾ
   	L1602_string(2,1,DIS2);   
   	DelayMs(200);
   	L1602_char(2,13,'.');
   	DelayMs(200);
   	L1602_char(2,14,'.');
   	DelayMs(200);
   	L1602_char(2,15,'.');
   	DelayMs(300);  
   	L1602_string(1,1,"U:000 D:000 Auto");	//¿ª»úÏÔʾ
   	L1602_string(2,1,"L:000 R:000 Sun ");
}

/********************************************************************
* Ãû³Æ : void DataDisplay(void)
* ¹¦ÄÜ : ¹âÕÕÊýÖµÏÔʾ
* ÊäÈë : ÎÞ
* Êä³ö : ÎÞ
***********************************************************************/
void DataDisplay(void)
{
	uchar i;
	for(i=0;i<5;i++)
	{Up_data = Adc0832_Read_1(0);}Delayus(100); 	//»ñÈ¡ÉÏ·½µçѹֵ			   

	for(i=0;i<5;i++)
	{Down_data = Adc0832_Read_1(1);}Delayus(100); 	//»ñÈ¡Ï·½µçѹֵ			   

	for(i=0;i<5;i++)
	{Right_data = Adc0832_Read_2(0);}Delayus(100);	//»ñÈ¡ÓÒ·½µçѹֵ 		

	for(i=0;i<5;i++)
	{Left_data = Adc0832_Read_2(1);}Delayus(100);	//»ñÈ¡×ó·½µçѹֵ
	
	

	AD1.bai1 = Up_data/100%10;	  	//·ÖÀë°Ùλ
	AD1.shi1 = Up_data/10%10;	  	//·ÖÀëʮλ
	AD1.ge1  = Up_data%10;		  	//·ÖÀë¸öλ

	AD1.bai2 = Down_data/100%10;
	AD1.shi2 = Down_data/10%10;
	AD1.ge2  = Down_data%10;

	AD2.bai1 = Right_data/100%10;
	AD2.shi1 = Right_data/10%10;
	AD2.ge1  = Right_data%10;

	AD2.bai2 = Left_data/100%10;
	AD2.shi2 = Left_data/10%10;
	AD2.ge2  = Left_data%10;

	L1602_char(1,3,table[AD1.bai1]+0X30); //ÏÔʾ°Ùλ
	L1602_char(1,4,table[AD1.shi1]+0X30); //ÏÔʾʮλ
	L1602_char(1,5,table[AD1.ge1]+0X30);  //ÏÔʾ¸öλ
	DelayMs(5);							  //ÑÓʱ5ºÁÃë
	L1602_char(1,9,table[AD1.bai2]+0X30);
	L1602_char(1,10,table[AD1.shi2]+0X30);
	L1602_char(1,11,table[AD1.ge2]+0X30);
	DelayMs(5);
	L1602_char(2,3,table[AD2.bai1]+0X30);
	L1602_char(2,4,table[AD2.shi1]+0X30);
	L1602_char(2,5,table[AD2.ge1]+0X30);
	DelayMs(5);
	L1602_char(2,9,table[AD2.bai2]+0X30);
	L1602_char(2,10,table[AD2.shi2]+0X30);
	L1602_char(2,11,table[AD2.ge2]+0X30);
	DelayMs(5);

	if(flag_Auto_or_Hand)	 //×Ô¶¯Ä£Ê½Ê±ÏÔʾ
	{
		L1602_string(1,13,"Auto");
		if(flag_Blk_or_Lgt)
		{
			L1602_string(2,13,"Sun ");
		}
		else
		{
			L1602_string(2,13,"Dark");
		}
	}
	else				    //ÊÖ¶¯Ä£Ê½Ê±ÏÔʾ
	{
		L1602_string(1,13,"Hand");
		L1602_string(2,13,"    ");
	}


}

 

物联沃分享整理
物联沃-IOTWORD物联网 » AT89C51单片机设计详解:自动追光系统与光源跟踪系统(光敏电阻+步进电机)

发表评论