> 文章列表 > 单片机设计_自动追光系统、光源跟踪系统(AT89C51 光敏电阻 步进电机)

单片机设计_自动追光系统、光源跟踪系统(AT89C51 光敏电阻 步进电机)

单片机设计_自动追光系统、光源跟踪系统(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,"    ");}}

 

91魔方网