基于51单片机的百叶窗智能窗户窗帘仿真

仿真图:

在这里插入图片描述

芯片/模块的特点:

L298特点:

高驱动能力:L298具有高驱动电流能力,能够提供最高4安培的峰值输出电流。这使得它可以驱动较大功率的直流电机,适用于许多高性能应用。

双全桥结构:L298具有双全桥结构,即两个独立的H桥电路,可以分别控制两个直流电机的运行方向和速度。这种结构使得同时控制多个电机变得更加方便。

输入控制灵活:L298的输入控制接口可以使用标准的逻辑电平(TTL或CMOS)来控制电机的运行。它可以接受脉冲宽度调制(PWM)信号来实现速度控制,并且支持正向、反向和制动模式的控制。

内置保护功能:L298具有内置的过流保护和过温保护功能,可以保护芯片和外部电路免受损坏。当输出电流超过设定值或芯片温度过高时,保护功能会自动触发。

低功耗待机模式:L298具有低功耗待机模式,可以通过控制输入信号将芯片置于低功耗状态。这有助于节省电能和延长电池寿命。

多种封装形式:L298可提供不同的封装形式,如多引脚直插式封装(DIP)和表面贴装技术(SMT)封装。这使得L298适应不同应用的安装需求。

PCF8591特点:
多功能性:PCF8591芯片包含了4个独立的模拟输入通道和一个模拟输出通道。这意味着它可以同时读取多个模拟信号并输出一个模拟信号。

高精度:芯片的ADC和DAC都是8位的,所以它可以提供较高的信号分辨率和精确度。

可编程增益:PCF8591芯片允许用户通过软件配置增益,以适应不同的信号幅度。

低功耗:该芯片的功耗相对较低,适合在功耗要求较低的应用中使用。

I2C接口:PCF8591芯片通过I2C(Inter-Integrated Circuit)总线与微控制器或其他设备进行通信。这种接口设计简单,方便与其他设备进行连接。

主程序:

//题目:智能电动百叶窗
//要求:两种模式
//模式一:自动模式:通过光敏电阻检测进光量,使电机正反转 ,同时使LED亮
//模式二:手动模式,两个按键分别控制电机正反转
//两个限位开关限制电机转动,中断0切换控制模式
//收获:在使用if。。。 else 时如果多个选择模式应使用if else 而不是if   if   else  这时后面的else仅仅与
//前一个if配对,第一个if就失去了意义
//2,数据处理还是要注意,不要混淆
//3,不同模式时要先相互独立分析再分析其共性。
#include<reg52.h>
#include<intrins.h>
#include"I2C.h"
unsigned char GetADCValue(unsigned char chn);//PCF8591读取光敏电阻电压值
unsigned char  M[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//数码管显示当前值0-83
void System_Init();	   //外部中断初始化
bit flag=0;//模式选择
sbit LED=P1^7;
sbit IN1=P1^3;	   //电机
sbit IN2=P1^4; 
sbit K2=P3^3;			//按键控制正反转
sbit K3=P3^4;
sbit xianwei1=P3^6;	   //限位开关
sbit xianwei2=P3^7;
void main()			
{
  unsigned char val;
  System_Init();
  while(1)
  {
    val=(char)(GetADCValue(0)/3);
	P0=M[val/10];
	P2=M[val%10];
	if(flag==0)
	{
	  xianwei1=1;
	  xianwei2=1;
	  LED=1;
	  _nop_();
	 if((val<30)&&(xianwei1==1)) //0-30
	  {IN1=1;IN2=0;}			 //正传
	  else if((val>50)&&(xianwei2==1)) //50-80
	  {IN1=0;IN2=1;}		//反转
	  else
	  {IN1=1;IN2=1;}//30-50
	}
	if(flag==1)
	{
	  K3=1;
	  K2=1;
	  xianwei1=1;
	  xianwei2=1;
	  LED=0;
	  if((K2==0)&&(xianwei1==1))
	  {IN1=1;IN2=0;while(!K2);}
	  if((K3==0)&&(xianwei2==1))
	  {IN1=0;IN2=1;while(!K3);}
	  else
	  {IN1=1;IN2=1;}
	}
  } 
}
void System_Init()
{
  EA=1;
 
  IT0=1;
  EX0=1;

}
unsigned char GetADCValue(unsigned char chn)
{
	unsigned char val;

	I2CStart();
	if(!I2CWrite(0x48<<1))
	{
		I2CStop();
		return 0;
	}
	I2CWrite(0x40 | chn);
	I2CStart();
	I2CWrite(0x48<<1 | 0x01);
	I2CReadACK();
	val = I2CReadNAK();
	I2CStop();

	return val;
}
void Int0() interrupt 0
{
  flag=~flag;  //模式变换
}

设计文件:

链接:https://pan.baidu.com/s/1S1lasGDG0A7XNCNLQ6iqdA?pwd=nft5

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值