精华内容
下载资源
问答
  • 平时我们要求继电器处于断开状态,那就要让单片机的这个端口处于输出高电平的状态,但是如果这个单片机的端口在上电复位后是处于输出低电平的状态,这时候就会出现问题了,即使我们在程序中一开始就把这个端口置为...
  • 本文对单片机IO口无法输出高低电平的原因进行了分析。
  • 感觉自己的PWM程序写的没有问题,但是调试的时候PWM一直是高电平,不知道什么原因。...第一个参数时设置PWM的定时器,第二个参数是输出PWM的高电平的时间。这个值如果大于周期的值,将会与周期保持一致。用第二个参

    感觉自己的PWM程序写的没有问题,但是调试的时候PWM一直是高电平,不知道什么原因。
    出错的原因:
    1、配置引脚的错误
    在这里插入图片描述

    2、选择复用模式为定时器的时候,选择参数错误,特别注意这里的复用引脚功能要选择对,很多时候都是这里出了问题
    在这里插入图片描述

    3、PWM选择初始化的通道错误
    要看清楚设置PWM的定时器是通道几,要选择相应的通道函数来初始化。
    在这里插入图片描述
    4、比较定时器的寄存器函数没有写或者写的值超出了范围
    第一个参数时设置PWM的定时器,第二个参数是输出PWM的高电平的时间。这个值如果大于周期的值,将会与周期保持一致。用第二个参数除以周期就得占空比。
    在这里插入图片描述

    展开全文
  • 单片机 数字电压表(ADC0809)

    万次阅读 多人点赞 2018-06-02 11:42:44
    单片机 数字电压表(ADC0809) 一、简述 采用模数转换的芯片ADC0809实现设计数字电压表。例子中设计的数字电压表可以测量0~5V范围内的输入电压值,并且通过4位LED数码管显示采集的电压值,例子测量三个模拟值:4....

    单片机 数字电压表(ADC0809)

    一、简述

        采用模数转换的芯片ADC0809实现设计数字电压表。例子中设计的数字电压表可以测量0~5V范围内的输入电压值,并且通过4位LED数码管显示采集的电压值,例子测量三个模拟值:4.995、2.5、0.005。

        ADC0809是可以将我们要测量的模拟电压信号量转换为数字量从而可以进行存储或显示的一种转换器件。

       文件打包:链接: https://pan.baidu.com/s/1F2E135Jw7TG3EmUVx3xKGg 提取码: 5ttz

    二、效果

    三、工程文件

    1、Keil工程

    2、仿真电路图

    四、源文件

    #include<reg51.h>
    #define uint unsigned int
    #define uchar unsigned char
    uchar code led[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//数码管显示0-9的电平码
    uint volt,vtime; //电压值测定值 
    uchar addr;//测量地址位
    sbit LW1=P2^3; //对应第4个数码管
    sbit LW2=P2^2; //对应第3个数码管
    sbit LW3=P2^1; //对应第2个数码管
    sbit LW4=P2^0; //对应第1个数码管
    sbit LW5=P1^4;//指示当前显示的是第几个转换值
    sbit CLK=P2^4; //时钟信号
    sbit START=P2^5; //转换启动开关
    sbit EOC=P2^6;	//转换结束标志
    sbit OE=P2^7;//定义ADC0809各脚
    /**********************************************************/
    //函数名:delay(uint x)
    //功能:延时程序 改变测量地址 	
    //调用函数:
    //输入参数:x
    //输出参数:
    //说明:程序的延时时间为x乘以0.5ms 每5s改变测量地址位
    /**********************************************************/
    void delay(uint x)
    {
    	uchar y,z;
    	for(y=x;y>0;y--)
    		for(z=250;z>0;z--);//该步运行时间约为0.5ms
    		vtime++;
    		if(vtime==1000)
    		{
    			vtime=0;
    			addr++;
    			if(addr==3)	 //本例子一共有3个测量输入值,轮流读取这3个值并转换显示
    				addr=0;//以上语句实现测量地址位的改变		
    		}	
    }
    /**********************************************************/
    //函数名:ADC()
    //功能:数模转换程序
    //调用函数:
    //输入参数:
    //输出参数:
    //说明:将转换好的测定值保存在变量volt中
    /**********************************************************/
    void ADC()
    {
    	EA=1;//开中断
    
    	//确保进入正常AD转换状态?
    	START=0;
    	START=1;
    
    	START=0;//ad开始转换		
    	while(EOC==0); //等待转换结束
    	OE=1; //输出数据标志为真
    	
    	EA=0;//关中断
    	volt=P3;//获取转换值保存到volt中,(P3为转换后数据)
    	volt=volt*196;//转换值处理 (例子的满量程为5V,转换分辩率为8位即最大值是255,5/255=196mV,即1代表196mV)
    	
    	OE=0;//输出转换结束 (要在获取转换值之后)
    }
    /**********************************************************/
    //函数名:display()
    //功能:4位数码管显示
    //调用函数:delay(uint x)
    //输入参数:
    //输出参数:
    //说明:将处理后的电压值显示在4位数码管上
    /**********************************************************/
    void display()
    {
    	P0=0xff;//消隐 (相当于全部灭灯,清除上次显示效果)
    	LW1=0;
    	P0=~led[volt/10000]&0x7f;//带小数点1伏显示位
    	delay(2);
    	P0=0xff;
    	LW1=1;
    	LW2=0;
    	P0=~led[(volt/1000)%10];//100毫伏显示位
    	delay(2);
    	P0=0xff;
    	LW2=1; 
    	LW3=0;
    	P0=~led[(volt/100)%10];//10毫伏显示位
    	delay(2);
    	P0=0xff;
    	LW3=1;
    	LW4=0;
    	P0=~led[(volt/10)%10];//1毫伏显示位
    	delay(2);
    	P0=0xff;
    	LW4=1;
    	LW5=0;
    	P0=~led[addr+1];//显示电压测量位
    	delay(2);
    	LW5=1;//指示当前显示的是第几个转换值								
    }
    /**********************************************************/
    //主程序
    /**********************************************************/ 
    void main()
    {
    	EA=1;//开总中断		   
        TMOD=0x01;//设定定时计数工作方式
    	//为定时器初赋值
    	TH0=0XFF;
        TL0=0XB4;
    
    	ET0=1;//开定时器0中断 
    	TR0=1;//开启定时器0
    	while(1)
    	{
    		P1=addr;//装入测量地址
    		LW5=1;
    		ADC();//调用模数转换程序
    		display();//调用显示程序
    	}
    }
    /**********************************************************/
    //函数名:timer() interrupt 1
    //功能:定时中断0响应程序
    //调用函数:
    //输入参数:
    //输出参数:
    //说明:为ADC提供时钟信号
    /**********************************************************/
    void timer() interrupt 1
    {
    	//初值重置
    	TH0=0XFF;
        TL0=0XF0;
    	CLK=~CLK;//取反 产生时钟信号
    }
    

    五、总结

        ADC0809是一种有8路模拟输入、8位并行数字输出的逐次逼近式A/D器件。

    1、主要技术指标和特性
        (1) 分辨率:8位;
        (2) 转换时间:取决于芯片的时钟频率,转换1次所需时间;
        (3) 单一电源:+5V;

        (4) 模拟输入电压范围:单级性为0~+5V。

    2、引脚介绍

    管脚功能说明:
    IN0-IN7:模拟量输入通道。就是说它可以分时地分别对八个模拟量进行测量转换。
    ADDA-C:地址线。也就是通过这三根地址线的不同编码来选择对哪个模拟量进行测量转换。
    ALE:地址锁存允许信号。在低电平时向ADDA-C写地址,当ALE跳至高电平后ADDA-C上的数据被锁存
    START:启动转换信号。当它为上升沿后,将内部寄存器清0。当它为下降沿后,开始A/D转换。
    D0-D7:数据输出口。转换后的数字数据量就是从这输出给S52的。
    OE:输出允许信号,是对D0-D7的输出控制端,OE=0,输出端呈高阻态,OE=1,输出转换得到的数据。
    CLOCK:时种信号。ADC0809内部没有时钟电路,需由外部提供时钟脉冲信号。
    EOC:转换结束状态信号。EOC=0,正在进行转换。EOC=1,转换结束,可以进行下一步输出操作

    Vref(+)、Vref(-):参考电压。参考电压用来与输入的模拟量进行比较,作为测量的基准。一般Vref(+)=5v ,Vref(-)=0V。

    3、时序图与工作过程

        时序图:

    工作过程:

     ①在IN0-IN7上可分别接上要测量转换的8路模拟量信号。可只接一路。
     ②将ADDA-ADDC端给上代表选择测量通道的代码。如000(B)则代表通道0;001(B)代表通道1;111则代表通道7。
     ③将ALE由低电平置为高电平,从而将ADDA-ADDC送进的通道代码锁存,经译码后被选中的通道的模拟量送给内部转换单元。
     ④给START一个正脉冲。当上升沿时,所有内部寄存器清零。下降沿时,开始进行A/D转换;在转换期间,START保持低电平。
     ⑤EOC为转换结束信号。在上述的A/D转换期间,可以对EOC进行不断测量,当EOC为高电平时,表明转换工作结束。否则,表明正在进行A/D转换。
     ⑥当A/D转换结束后,将OE设置为1,这时D0-D7的数据便可以读取了。OE=0,D0-D7输出端为高阻态,OE=1,D0-D7端输出转换的数据。
        说明:ADC0809的转换工作是在时钟脉冲的条件下完成的,因此首先要在CLOCK端给它一个时钟信号,说明书上给出了可以接入的脉冲信号频率是在10KHz-1280KHz,典型值是640KHz。我们这里取值50KHz。
      时序图上的teoc时长为:从START上升沿开始后的8个时钟同期再加2微秒。这一点得注意,因为当START脉冲刚结束进入转换工作时,EOC还没有立即变为低电平而是过了8个时钟周期后才进入低电平的,所以再给出START脉冲后最好延时一会再进行EOC的检测。

      一个通道的转换时间一般为64个时钟周期,如时钟频率为640KHz时,时钟周期为1.5625微秒,一个通道的转换时间则为1.5625×64=100微秒,那么1秒种就可以转换1000000÷100=10000次。

    4、计算定时器初值:

        信号频率取值50KHz,晶振频率是12MHz。

        12MHz时钟频率下,12MHz = 12000KHz = 12000000Hz,一个时钟振荡周期就是1/12000000秒,亦即1/12微秒,标准MCS51系列单片机的一个机器周期是12个时钟振荡周期,也就是12 * (1/12) = 1微秒。

    要输出50KHz的矩形方波 周期 T = (1/50K)s 等宽 也就是占空比50% 高电平时间是(0.5/50K)s = 0.01 ms = 10us

     

    然而,实际上仿真时这个频率是太快了(不知道是否是计算方法错了),编程中没有使用该初值。

    六、Proteus相关操作

          1、电压探针元件(显示电压)

               

       2、自定义电源电压

            

    -------------------------------------------------以下是回复 Rainynightsunset 这位兄弟---------------------------

    下载打包文件之后:

    ========================以下回复  木子Jasmine 这位兄弟======================

    手动复位效果 (使用轮询方式检测按键有没有按下,因为外部中断引脚被使用了)

    测试代码以及仿真文件:链接: https://pan.baidu.com/s/1zC8uhzlbIFRBOkOWuWzAWQ 提取码: wr39

     

     

    ===================以下回复 Leon. 这位兄弟=======================

    将程序中的addr最值修改为8,如下:

    在仿真上,添加5个模拟输入

    效果:(注:想要查看电压,请加上电压探针元件)

     

     

    ============== ===== 以下回复    馨心愢忞   ========================

    简单的测量20v(采用分压法:先把电压除以4再进行转换,得到转换的值后再乘以4)

    测试例子:链接: https://pan.baidu.com/s/10RzT9lFVbB8db4CO7at_0A 提取码: zwem

    测试效果:

    分压测量20V说明:

     

    =======================以下回复 yikai0511validatetoken==============================

    以下例子是:按键设置最高电压,当前电压大于等于最高电压时蜂鸣器报警以及LED亮,测试环境为Win10

    电压为20V的可以自己设置的,上下限值同时设置暂时没弄好(感觉引脚不够用,需要复用引脚)

    例子打包:链接: https://pan.baidu.com/s/1RY18AeWCCsXXqlgUBeTv_w 提取码: pdf7

    仿真截图:

     

    效果:

     

    展开全文
  • 在项目中需要用到STM32F103C8T6的GPIOA13引脚,发现无论如何初始化都无法控制该引脚的输出电平,该引脚一直输出高电平,而且非常稳定。查阅相关资料发现是JTAG模式搞的鬼。原因如下: 可以看到PA13口的Main ...

    使用环境(蓝色粗体字为特别注意内容)
    1、软件环境:Keil MDK 5.15
    2、硬件环境:STM32F103C8T6最小系统
    在项目中需要用到STM32F103C8T6的GPIOA13引脚,发现无论如何初始化都无法控制该引脚的输出电平,该引脚一直输出高电平,而且非常稳定。查阅相关资料发现是JTAG模式搞的鬼。原因如下:


    可以看到PA13口的Main function是JTMS-SWDIO,不是PA13,所以要想使用PA13的普通IO口能力,就要先把IO口的复用功能打开,再把JTMS-SWDIO功能关掉就可以。我从来不用JTAG的,于是采用以下方式禁用PA13引脚的JTAG模式:

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
    GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable , ENABLE);

    发现问题依旧存在,多方查找资料,完全没有理由啊。。怀疑是IO口初始化方式不对,最后终于发现少了这一句:

    GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);

    最后贴上PA13引脚的调试代码;

    Main.c

    void DisableJTAG()
    {
    
    	GPIO_InitTypeDef GPIO_InitStruct;
    	//开启AFIO 时钟
    	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
    	// 改变指定管脚的映射 GPIO_Remap_SWJ_Disable SWJ 完全禁用(JTAG+SW-DP)
    	GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable , ENABLE);
    	// 改变指定管脚的映射 GPIO_Remap_SWJ_JTAGDisable ,JTAG-DP 禁用 + SW-DP 使能
    	GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);
    
    
    	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //使能GPIOA时钟
    	GPIO_InitStruct.GPIO_Mode  = GPIO_Mode_Out_PP;  //配置模式
    	GPIO_InitStruct.GPIO_Pin  = GPIO_Pin_13; //配置哪个IO口
    	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;  //配置IO口速度,仅输出有效
    	GPIO_Init(GPIOA, &GPIO_InitStruct);
    
    }
    
    int main(void)
    {
    	DisableJTAG(); // 禁用PA13的JTAG调试模式
    	delay_ms(1000);
    
    	while(1)
    	{
    		GPIO_ResetBits(GPIOA, GPIO_Pin_13);
    		delay_ms(500);
    		GPIO_SetBits(GPIOA, GPIO_Pin_13);
    		delay_ms(500);
    	}
    }
    

    PA13引脚输出波形如下:

     

     

    展开全文
  • 经过长时间调试和查阅资料发现,esp32的引脚分为数字引脚和模拟引脚(官方叫电容式触摸GPIO和模数转换GPIO),当使用以下程序输出高电平时 digitalWrite(GOPIOPin, HIGH); 只有数字引脚正常输出,模拟引脚将不受...

    本文章是基于arduino的库编写esp32程序,为本人亲测文章。
    在使用esp32的spi通信,自定义片选引脚过程中发现,自定义引脚输出高低电平不受控制。
    经过长时间调试和查阅资料发现,esp32的引脚分为数字引脚和模拟引脚(官方叫电容式触摸GPIO和模数转换GPIO),当使用以下程序输出高电平时

    digitalWrite(GOPIOPin, HIGH);
    

    只有数字引脚正常输出,模拟引脚将不受控制。但是在板子的引脚标号上分不出来模拟和数字引脚,需对照官方手册或者代码库区分。
    在arduino库中,引脚分类如下:
    在这里插入图片描述
    其中A开头的引脚即为模拟引脚。T开头的引脚即为数字引脚,等号右边是在板上的引脚丝印号码。
    大家正常输出高低电平,可优先以数字引脚为主。

    展开全文
  • VCC=5V,程序里将P32置,不接L298N的时候输出正常,但是接上之后输出就被拉低到2.2V了,然后L298N的输出就没有了,使能端和IN4的输入都没有问题,单片机的引脚也换着试过了,只有置的那个引脚电压会被拉低,我搞...
  • 51单片机蓝牙小车

    万次阅读 多人点赞 2019-02-25 20:41:23
    51单片机蓝牙小车(是我大二做的一个课程设计,小菜鸟一个,欢迎大家指正和参考。) 摘要 本次设计选择基于蓝牙遥控的多功能智能小车为对象。选用STC98C52RC单片机作为主控芯片,电机驱动采用L293N ,...
  • 基于51单片机的交通灯控制系统设计

    万次阅读 多人点赞 2018-11-24 13:38:11
    摘 要 交通灯是生活中的重要系统。本设计为基于51单片机交通灯系统的设计,采用模块...系统电路简单、集成度、工作稳定、调试方便、检测精度,具有一定的实用价值。 【关键词】AT89C51 8位数码管 发光二级管 按键
  • 关于单片机检测高电平

    万次阅读 2011-04-13 20:59:00
    可以通过设置DDRx的值来设置输入输出(详见数据手册~~)3、切忌要将单片机的检测端口设置为输入,否则可能影响被检测模块端口的电压(如:被拉低电平至0v,或被拉高)4、注意单片机一般是TTL电平模式的,因此高电平...
  • 单片机小知识总结

    千次阅读 多人点赞 2017-07-17 13:17:37
    单片机
  • 作为一个刚开始学习32的孩子,这是我第一篇CSDN文章,在学习过程中经常会得到CSDN大佬们的启蒙和帮助,并立誓当解决一些网上... **问题描述:做了板子,我习惯将用到的引脚置后看看芯片有没有虚焊。但是烧入程序,...
  • 在学习板P3.3接外部脉冲,脉冲是24V金属接近开关输出信号,用39k、10k电阻分压至5V左右,输入单片机P3.3引脚。用检测外部中断程序测试,中断一直不响应,无论外部脉冲是、低电平,测量P3.3和GND电压一直是4V多。...
  • 关于高电平与低电平的使用

    千次阅读 2019-10-09 20:13:38
    经客户描述,为了省电处理,客户要求在PE7处,拉高电平(量的电压3.3V)时,喇叭才能激活,有声音。 在播放音乐时能有声音,在有提示音时需要拉高电平,在通话去,来电时,需要拉高电平。 如何定义PE7 在config...
  • 单片机GPIO 口输入输出详解

    千次阅读 2020-06-04 22:46:09
    单片机GPIO功能: 一、输入功能: 1.悬浮输入模式: 这种结构的输入阻抗较高,可以用于模拟信号转换为数字信号的场合使用,类似于...将引脚上不确定的电平信号通过一个上拉电阻到高电平(起到固定电平的作用),电阻同
  • STM32中空的I/O管脚是高电平还是低电平取决于具体情况。 1、IO端口复位后处于浮空状态,也就是其电平状态由外围电路决定。 2、STM32上电复位瞬间I/O口的电平状态默认是浮空输入,因此是高阻。做到低功耗。 3、 STM32...
  • 【51/STM32】详解单片机GPIO口输入输出的各种模式

    千次阅读 多人点赞 2020-05-10 18:54:04
    通用型输入输出端口,简称GPIO口,是单片机与其他外围设备和电路进行信息交换和控制的桥梁。本文从复习模电中所学的场效应管开始,逐步引出开漏输出与推挽输出的概念及阐述其原理,并结合点亮一盏LED灯的实例进一步...
  • STM32 PA15读取时一直为高电平

    千次阅读 2017-07-16 15:13:25
    配置为输入下拉模式后,对数据进行采样发现数据一直为。通过阅读datasheet及网上资料发现此脚为JTAG口调试口。因此需要对此脚做一下重新映射,重新映射方法如下:GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable,...
  • 51单片机PWM控制电机

    万次阅读 多人点赞 2015-01-02 17:38:19
    小时候玩的四驱车,给直流马达接... 电源电压输出是固定的,电机的转速也因此是固定的,为了调节电机的转速,就得改变电源电压输出。how?用PWM调制的方法,把恒定的直流电源电压调制成频率一定宽度可变的脉冲电压
  • 本温度测量系统以AT89C51单片机为核心控制器,配合DS18B20数字温度传感器、LCD1602、蜂鸣器、LED灯进行温度的测量、显示和预警。本系统可通过按键设置温度上限值,单片机将检测到的温度信号与输入温度的上限值进行...
  • 当逻辑门输出端是低平时,灌入逻辑门的电流称为灌电流,灌电流越大,输出端的低 电平就越。由三极管输出特性曲线也可以看出,灌电流越大,饱和压降越大,低电平越大。 然而,逻辑门的低电平是有一定限制的,它有...
  • ULN2003是耐压、大电流复合晶体管阵列,由七个硅NPN 复合晶体管组成。一般采用DIP—16 或SOP—16 塑料封装。 ULN2003的主要特点: ULN2003 的每一对达林顿都串联一个2.7K 的基极电阻,在5V 的工作电压下它能与...
  • 单片机 最小系统原理图

    万次阅读 多人点赞 2016-08-02 10:37:18
    可以自动复位,可以是高电平使他复位也可以是低电平使他复位,跳转到0地址,然后重新开始。 高电平复位电路图:    这张图可以自动复位也可以手动复位  自动复位:导通的一瞬间,VCC由0到5,电容通交流阻直流,...
  • 单片机原理及应用》复习提纲

    万次阅读 多人点赞 2015-12-14 10:42:02
    单片机原理及应用》复习提纲 单片机应用系统的典型结构图   单片机应用系统核心硬件技术包括: 1.时序 2.中断 3.地址译码   单片机应用系统核心软件技术包括: 1.寻址...
  • 基于51单片机的wifi智能led灯的毕业设计

    万次阅读 多人点赞 2020-02-13 11:28:09
    基于51单片机的wifi智能led灯的毕业设计 摘要 系统基于STC89C52RC单片机设计,拥有自动与手动两种模式,自动模式下可以过热释红外传感器检测是否有人,采用光敏电阻构成的电路检测环境光的强度,从而自动实现灯的...
  • 由于它体积小,兼容性,性价比而深受单片机爱好者及企业欢迎,已经有很的普及率。 特点 · 输入输出电平与TTL/CMOS相兼容; · 5V电源供电时输入电压在0~5V之间; · 工作频率为250KHZ,转换时间为32μS; · ...
  • “TTL电平”最常用于有关电专业,如:电路、数字...输出高电平Uoh和输出低电平Uol Uoh≥2.4V,Uol≤0.4V 2.输入高电平和输入低电平 Uih≥2.0V,Uil≤0.8V CMOS电路 CMOS电路是电压控制器件,输入电阻极大,对于干
  • 单片机如何与L298N和继器连接?什么时候选择L298N或继器模块? L298N模块 主控芯片为L298N的双H桥电机驱动模块,驱动电压为5~35V,一般驱动直流电机正反转一般使用L298N。 接线引脚 VCC:有12V端口和5V端口...
  • 图中输出端上拉电阻R31,R32,一方面可以提高反向器74HC04输出高电平的驱动能力,另一方面可以增加超声换能器的阻尼效果,缩短其自由振荡的时间。 上述TCT40-16T发射的在空气中传播,遇到障碍物就会返回,超声波...
  • 4-基于51单片机的多量程数字电压

    千次阅读 2020-04-10 20:20:10
    以51单片机和A/D转换器为核心、以LCD1602位显示,设计一个可以自动选择档位的多档位直流电压测量电路。可测电压范围0V—500V。电压量程范围: 2V, 20V, 200V 和500V,共四个档位,可判断出电压范围并用继器实现档位...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,598
精华内容 3,439
关键字:

单片机高电平输出电压