2301_77640666 2023-05-11 00:35 采纳率: 0%
浏览 13

51单片机的红色按钮有什么用?

51单片机的红色按钮有什么用?为什么我的单片机光发的很弱,是不是接触不良?

img

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-05-11 02:01
    关注
    • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/7599095
    • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:51单片机练习题:1.采用两种定时方式,使发光二极管闪烁。2.采用中断的方式,利用数码管显示,编写从100开始倒计时的程序(可显示高位0)。
    • 除此之外, 这篇博客: 51单片机~光敏传感器,比较器(模电,运放,放大原理)原理芯片中的 51单片机之光敏传感器,比较器原理芯片 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    • (一)光敏传感器说明:
      在这里插入图片描述
      (二)电压比较器功能:
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      (二)输出模式:
      由于比较器的输出电压在0~36V,所以要是把Vout接在比较器的VCC上的话,Vout的电压便也输出 0~ 36V,导致比较器无法和芯片沟通传递数据,所以要在Vout上加一个开漏输出的上拉电阻,使其输出5V电压,方便和其他电器和芯片沟通。
      在这里插入图片描述
      在这里插入图片描述
      (2).强推挽输出:(当输出为高(低)电平时,还有驱动能力,因为驱动电流比较大)
      既可以输出高电平也可以输出低电平,当输入为1时,下方晶体管(当三极管来看待),导通右边Vout输出为低电平,此时有灌电流。
      当输如=入为0时,下方晶体管不导通,上方导通VDD电压下来,使Vout输出为高电平。

      (3).难点:参数
      在这里插入图片描述
      共模输入电压:
      就是限制比较器的V+和V-的电压范围,以此来使Vout的输出在一个正常范围内。
      我们单片机上是VCC-1.5V或者2V。
      所以我们输入的两个电压必须在0~3.5V(VCC-1.5V=3.5V)。

      在这里插入图片描述
      (3).输入失调电压:(输入失调电流是由输入失调电压导致的)
      在这里插入图片描述
      在这里插入图片描述
      计算:(放大倍数)
      在这里插入图片描述
      (4).电路分析:(手写是电路原理)
      GM-OUT就是Vout,U14就是LM393,J15就是电路板上的排针,只要把5和6连起来就可以将光敏电阻接到P1.7上,此时将KS-OUT,ZS-OUT,GM-out接到指示灯上,即可完成光敏控制电路。
      在这里插入图片描述
      (5)家用安全电压知识:
      在这里插入图片描述
      (6)代码:
      光控电路代码:继电器控制光控电路:

      #include"reg52.h"
      
      typedef signed char int8;
      typedef signed int  int16;
      typedef signed long  int32;
      typedef unsigned char uint8;   //字符型
      typedef unsigned int uint16;
      typedef unsigned long uint32;
      
      sbit GK  =P1^7;
      
      sbit JDQ = P2 ^ 0;
      sbit SHIFT_CLOCK_595 = P1 ^ 4;    //74HC595
      sbit data_A_595 = P1 ^ 0;
      sbit LATCH_CLOCK_595 = P2 ^ 3;
      
      	void delay(uint16 x_ms)			   //延时毫秒
      	{
      			uint16 i,j;
      			for(i=x_ms;i>0;i--)
      				for(j=114;j>0;j--);
      	}
      
      	void xp74HC595(uint16 dat)
      	{
      		uint16 i;
      		for (i = 0; i < 8; i++)
      		{
      			data_A_595 = (dat << i) & 0X80;
      			SHIFT_CLOCK_595 = 0;		//时钟上升沿
      			SHIFT_CLOCK_595 = 1;
      		}
      		LATCH_CLOCK_595 = 0;			 //给锁存器脉冲,上升沿
      		LATCH_CLOCK_595 = 1;
      	}
      	int16 i;		
      	void main(void)
      	{
      		P1  =0XFF;  //关闭流水灯
      		xp74HC595(0X40);   //打开流水灯573锁存器的使能端
      		xp74HC595(0X00);   //锁存关掉流水灯的数据
      		GK=1;  //打开光敏控制孔,使其处于变暗状态
      		while(1)
      		{
      			if(GK==0)    //因为光线偏暗就输出低电平
      			{
      				delay(10);
      				if(GK==0)
      				{
      					xp74HC595(0X08);    //控制打开继电器
      				}
      			}
      			else
      			{
      				xp74HC595(0X00);    //光线偏亮,控制关闭继电器
      			}
      		}
      	}
      
      
      

      (7).作业:
      在这里插入图片描述
      作业代码:

      #include"reg52.h"
      
      typedef signed char int8;
      typedef signed int  int16;
      typedef signed long  int32;
      typedef unsigned char uint8;   //字符型
      typedef unsigned int uint16;
      typedef unsigned long uint32;
      
      sbit GK  =P1^7;     //光控模块
      
      sbit key1 = P3 ^ 7;       //独立按键接口
      sbit key2 = P3 ^ 6;
      sbit key3 = P3 ^ 5;
      sbit key4 = P3 ^ 4;
      
      sbit JDQ = P2 ^ 0;
      sbit SHIFT_CLOCK_595 = P1 ^ 4;    //74HC595
      sbit data_A_595 = P1 ^ 0;
      sbit LATCH_CLOCK_595 = P2 ^ 3;
      
      
      sbit duanxuan = P2 ^ 5;    //段选控制数字显示 
      sbit weixuan = P2 ^ 6;     //位选控制有几个或者第几个显示数字
      
      
      //自加变量,用来测试编码表
      uint8 code zifu[19] = { 0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0X88,0X83,0XC6,0XA1,0X86,0X8E,0X89,0X7F,0XBF };
      uint8  code wei_test[8] = { 0X01,0X02,0X04,0X08,0X10,0X20,0X40,0X80 };//位选数组
      
      	void delay(uint16 x_ms)			   //延时毫秒
      	{
      			uint16 i,j;
      			for(i=x_ms;i>0;i--)
      				for(j=114;j>0;j--);
      	}
      
      	void Disp()   //数码管显示OFF
      	{
      				duanxuan=0;   //首先归零
      				weixuan=0;
      				P0= zifu[0];   //控制输入 , 自加变量,测试编码表
      				duanxuan=1;
      				duanxuan=0;  //以上是我们锁存器芯片段选的控制
      				
      				duanxuan=0;   //再次归零
      				weixuan=0;
      				P0=   0X20;   //位选输入
      				weixuan=1;    //位选控制
      				weixuan=0;    //位选锁存
      				delay(1);     //通过计算得出,视觉暂留的时间为5.2毫秒   、
      				/*****************************************************/
      				
      				
      					duanxuan=0;   //首先归零
      				weixuan=0;
      				P0= zifu[15];   //控制输入 , 自加变量,测试编码表
      				duanxuan=1;
      				duanxuan=0;  //以上是我们锁存器芯片段选的控制
      				
      				duanxuan=0;   //再次归零
      				weixuan=0;
      				P0=   0X40;   //位选输入
      				weixuan=1;    //位选控制
      				weixuan=0;    //位选锁存
      				delay(1);     //通过计算得出,视觉暂留的时间为5.2毫秒   、
      				/*****************************************************/
      				
      				
      					duanxuan=0;   //首先归零
      				weixuan=0;
      				P0= zifu[15];   //控制输入 , 自加变量,测试编码表
      				duanxuan=1;
      				duanxuan=0;  //以上是我们锁存器芯片段选的控制
      				
      				duanxuan=0;   //再次归零
      				weixuan=0;
      				P0=   0X80;   //位选输入
      				weixuan=1;    //位选控制
      				weixuan=0;    //位选锁存
      				delay(1);     //通过计算得出,视觉暂留的时间为5.2毫秒   、
      				/*****************************************************/
      	}
      	
      	void Disp2()     //控制数码管显示ON
      	{
      			duanxuan=0;   //首先归零
      				weixuan=0;
      				P0= zifu[0];   //控制输入 , 自加变量,测试编码表
      				duanxuan=1;
      				duanxuan=0;  //以上是我们锁存器芯片段选的控制
      				
      				duanxuan=0;   //再次归零
      				weixuan=0;
      				P0=   0X40;   //位选输入
      				weixuan=1;    //位选控制
      				weixuan=0;    //位选锁存
      				delay(1);     //通过计算得出,视觉暂留的时间为5.2毫秒   、
      				/*****************************************************/
      				
      				
      					duanxuan=0;   //首先归零
      				weixuan=0;
      				P0= zifu[16];   //控制输入 , 自加变量,测试编码表
      				duanxuan=1;
      				duanxuan=0;  //以上是我们锁存器芯片段选的控制
      				
      				duanxuan=0;   //再次归零
      				weixuan=0;
      				P0=   0X80;   //位选输入
      				weixuan=1;    //位选控制
      				weixuan=0;    //位选锁存
      				delay(1);     //通过计算得出,视觉暂留的时间为5.2毫秒   、
      				/*****************************************************/
      	}
      
      	void xp74HC595(uint16 dat)
      	{
      		uint16 i;
      		for (i = 0; i < 8; i++)
      		{
      			data_A_595 = (dat << i) & 0X80;
      			SHIFT_CLOCK_595 = 0;		//时钟上升沿
      			SHIFT_CLOCK_595 = 1;
      		}
      		LATCH_CLOCK_595 = 0;			 //给锁存器脉冲,上升沿
      		LATCH_CLOCK_595 = 1;
      	}
      	int16 i;
      	
      	void sunshine()    //光控电路
      	{
      		if(GK==0)    //因为光线偏暗就输出低电平
      			{
      				delay(10);
      				if(GK==0)
      				{
      					xp74HC595(0X08);    //控制打开继电器
      					Disp2();       //显示OFF
      				}
      			}
      			else
      			{
      				xp74HC595(0X00);    //光线偏亮,控制关闭继电器
      				Disp();
      			}
      	}
      			
      	void mos1()
      	{
      		sunshine();   //调用sunshine函数写出光控电路
      	}
      	uint16 num;
      	void mos2()      //人工控制电路
      	{
      		num=0;        //初始化key2按键按下次数
      		if(num%2==0)    //按下key2键次数为偶数
      		{
      			if(key2==0)   //检测到按键按下
      			{
      				xp74HC595(0X04);  //继电器闭合
      				GK ==1;     //灯亮
      				Disp();    //显示ON
      				delay(10);   //按键消抖
      				while(key2==0)  //松手检测
      				{
      					//空:因为保持原状即可,无需再进行操作
      					num++;
      				}
      			}			
      		}
      		else
      		{
      			if(key2==0)
      			{
      				xp74HC595(0X00);  //继电器断开
      				GK  ==0;    //灯灭
      				Disp2();    //显示OFF
      				delay(10);
      				while(key2==0)   //松手检测
      				{
      					  //空:因为保持原状即可,无需再进行操作
      					  num++;
      				}
      			}
      		}
      	}		
      			
      	void main(void)
      	{
      		P1  =0XFF;  //关闭流水灯
      		xp74HC595(0X40);   //打开流水灯573锁存器的使能端
      		xp74HC595(0X00);   //锁存关掉流水灯的数据
      		key1  =1;   //初始化按键
      		key2  =1;
      		i=0;     //用i来控制按下key1的次数,用来判断模式1or2   
      		GK=1;  //打开光敏控制孔,使其处于变暗状态
      		while(1)
      		{
      			if(i%2==0)
      			{
      				i++;
      				mos2();    //如果为偶数,则是模式2
      			}
      			else
      			{
      				i++;
      				mos1();    //为奇数,则是模式1
      			}	
      		}
      	}
      
      
      
    评论

报告相同问题?

问题事件

  • 创建了问题 5月11日

悬赏问题

  • ¥15 STM32F103上电短路问题
  • ¥15 关于#单片机#的问题:以ATMEGA128或相近型号单片机为控制器设计直流电机调速的闭环控制系统(相关搜索:设计报告|软件设计|流程图)
  • ¥15 打开软件提示错误:failed to get wglChoosePixelFormatARB
  • ¥15 (标签-python|关键词-char)
  • ¥15 python+selenium,在新增时弹出了一个输入框
  • ¥15 苹果验机结果的api接口哪里有??单次调用1毛钱及以下。
  • ¥20 学生成绩管理系统设计
  • ¥15 来一个cc穿盾脚本开发者
  • ¥15 CST2023安装报错
  • ¥15 使用diffusionbert生成文字 结果是PAD和UNK怎么办