hvhcg 2023-04-30 08:14 采纳率: 50%
浏览 25

请问这个电路的原理是怎么运行的呢

img


就是现在只知道光敏电阻没有光照的时候,npn三极管导通,同时4角接地,3角输出低电平,但仿真结果是输出方波,是怎么回事呢?

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-04-30 10:02
    关注
    • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7735117
    • 这篇博客也不错, 你可以看下外部中断实验 编写程序学习外部中断的电平触发方式。无中断时发光让发光二极管从左到右依次点亮,有外部中断请求时,4位数码管从0000开始加1显示(加到9999后复位为0000),同时蜂鸣器报警。
    • 除此之外, 这篇博客: 备战蓝桥杯单片机倒数第四天 小蜜蜂老师公众号更新内容中的 【进阶01】灯光闪烁与数码管计数 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    • 这个主要是解决LED和数码管冲突问题,对锁存器初始化的写法加上了所有锁存器都不选择的代码,更好的可以避免不同操作之间的影响,并且先将要赋的值送到端口然后在打开锁存器

      特训案例【进阶02】长按与短按控制数码管显示

      #include "reg52.h"
      
      sbit L1 = P0^0;
      sbit L2 = P0^1;
      sbit L8 = P0^7;
      unsigned char led_stat = 0xff;
      unsigned char num1 = 0,num2 = 0;
      unsigned char code smg_data[] = {0xc0,0xf9,0xA4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
      
      void SMG_Display_Data(void);//1.简单延时
      
      void delay(unsigned int t)
      {
       	while(t--);
      }
      
      void Delay_s(unsigned int t)
      {
        while(t--)
        {
          SMG_Display_Data();                //在延时期间保持数码管刷新
        }
      }
      
      void Init_74HC138(unsigned char channel)//主要是在使用之后确定把锁存器关掉了
      {
       	switch(channel)
      	{
      	 	case 4:P2 = (P2 & 0x1f) | 0x80;break;//LED
      		case 5:P2 = (P2 & 0x1f) | 0xa0;break;//蜂鸣器和继电器
      		case 6:P2 = (P2 & 0x1f) | 0xc0;break; //数码管位选
      		case 7:P2 = (P2 & 0x1f) | 0xe0;break;//数码管段码
      		case 0:P2 = (P2 & 0x1f) | 0x00;break;//所有锁存器不选择
      	}
      		P2 = (P2 & 0x1f) | 0x00;//所有锁存器不选择
      }
      
      void SMG_DisplayBit(unsigned char pos,unsigned char dat)//先输送内容,再打开响应的端口
      {
       	P0 = (0x01 << pos); 
      	Init_74HC138(6);
      	P0 = dat;           
      	Init_74HC138(7);
      }
      
      void SMG_All(unsigned char dat)
      {
       	P0 = 0xff;        
      	Init_74HC138(6);
      	P0 = dat;         
      	Init_74HC138(7);
      }
      
      void Init_System()
      {
       	P0 = 0xff;      
      	Init_74HC138(4);
      	P0 = 0x00;     
      	Init_74HC138(5);
      	SMG_All(0xff); 
      }
      
      void SMG_Display_Data(void)
      {
      	SMG_DisplayBit(0,smg_data[num1]);
      	delay(200);
      	SMG_DisplayBit(1,0xff);
      	delay(200);
      	SMG_DisplayBit(2,0xff);
      	delay(200);
      	SMG_DisplayBit(3,0xff);
      	delay(200);
      	SMG_DisplayBit(4,0xff);
      	delay(200);
      	SMG_DisplayBit(5,0xff);
      	delay(200);
      	SMG_DisplayBit(6,smg_data[num2/10]);
      	delay(200);
      	SMG_DisplayBit(7,smg_data[num2%10]);
      	delay(200);
      	SMG_All(0xff);
      	delay(200);	
      }
      
      void Led()
      {
       	led_stat &= ~0x80;  //L8电亮
      	P0 = led_stat;
      	Init_74HC138(4);
      	Delay_s(200);   //在进行LED操作的时候也对数码管进行刷新
      
      	led_stat |= 0x80;   //熄灭
      	P0 = led_stat;
      	Init_74HC138(4);
      	Delay_s(200);
      
      	value2++;
      	if(value2 == 100)
      	{
      	 	value2 = 0;
      	}
      
      	//L1 和L2 灯同时翻转
      	if((led_stat & 0x03) == 0x03)
      	{
      	 	led_stat &= ~0x03;
      	}
      	else
      	{
      	 	led_stat |= 0x03;
      	}
      	P0 = led_stat;
      	Init_74HC138(4);
      	value1++;
      	if(value1 > 9)
      	{
      	 	value1 = 0;
      	} 
      }
      
      void main(void)
      {
      	Init_System();
      	while(1)
      	{
      		Led();
      		SMG_Display_Data(); 	
      	}
      }

    评论

报告相同问题?

问题事件

  • 创建了问题 4月30日

悬赏问题

  • ¥100 速求!商品购买力最优化问题(用遗传算法求解,给出python代码)
  • ¥15 虚拟机检测,可以是封装好的DLL,可付费
  • ¥15 kafka无法正常启动(只启动了一瞬间会然后挂了)
  • ¥30 使用matlab将观测点聚合成多条目标轨迹
  • ¥15 Workbench中材料库无法更新,如何解决?
  • ¥20 如何推断此服务器配置
  • ¥15 关于github的项目怎么在pycharm上面运行
  • ¥15 内存地址视频流转RTMP
  • ¥100 有偿,谁有移远的EC200S固件和最新的Qflsh工具。
  • ¥15 有没有整苹果智能分拣线上图像数据