在本文中,我们提出了一个新的PIC微控制器项目。我们的作者Mithun使用PIC16F73A和多路复用7段显示了数字电压表电路。该电路用图表和源代码(以嵌入式C语言编写)良好解释,可用于下载。如果您在实施此项目时有任何疑问,请随时提交评论。

笔记:-你也可以看看我们的数字电压表采用8051创造了一段时间之前。在本电路中,我们用AT89S51单片机制作了一个电压表。此外,您将了解接口7段显示和ADC到8051微控制器。

多路复用七段显示有效

首先,我们需要了解多路复用7段显示是如何工作的。当4段显示连接为一个单一段,所有段的数据总线并行和使能引脚是不同的所有段。通过这种方式,我们控制了各个部分。让我们看看下面的图片:


这里的数据是发送彻底的'A,B,C,D,E,F,G'线和'S1,S2,S3,S4'是能够的直线。当数据通过数据总线发送数据和S1高,将在第一段中显示数据。类似地,当S2高时,数据将在第二段中示出。这是多路复用七个段显示的工作原理。但现在问题是我们如何一次在这4个细分市场中显示不同的数据?请记住,人眼无法在10ms内找到差异。我希望你已经了解了视觉暂留.如果我们能在10毫秒内用这4个片段的相应的使能引脚改变数据,我们的眼睛就会在这段中看到一组4位数字。换句话说,我们将在10毫秒内执行以下操作以显示1234。输入数据总线1并设置S1高。用2馈电数据总线,把S1调低,把S2调高。用3输入数据总线,把S2调低,把S3调高。用4输入数据总线,把S3调低,把S4调高。所有这些都必须在10毫秒内完成。最后重复这个过程以保持显示的稳定。

让我们来做这个程序:

首先,我们需要为正确的时间编写代码,这样我们就可以在不同的时间发送不同的数据,通过保持较高的段对应的使能引脚。所以我们需要利用定时器中断。

定时器中断设置如下所示。

让我们来到的其余部分。程序的下一步是端口初始化。您可以使用以下代码段初始化端口。

下一步是设置其他初始值。以下代码段初始化所有必要的变量。

最后一组初始化是针对PIC内部的ADC通道,如下所示。

现在我们已经完成了所有的初始化步骤,它们应该在main函数中调用void main()。在接下来的步骤中,我们将创建程序的其他重要部分,比如读取输入的循环。读取while(1)循环中给定的代码段。

你知道这里发生了什么吗?在第一行中,我们初始化ADC channel0以获取输入模拟信号。第二行是接收信号,转换并存储在adc寄存器中。第三行代码,tlong = (float)adc_rd0*1.9607843实际上是adc输出到毫伏的转换。由式(5/255)X100得到乘法因子1.9607843;其中5= VDD, 255表示8位,100表示减少分数误差。

在您看到的代码段中,Millivolts中的转换值将保存到变量“数字”。现在,这里是什么'号码'?要知道什么是'number',我们需要查看显示()子例程的内容。

通过分析代码段,您可能已理解,“Number”用于提取数据。所以'Number'是用于将数据存储通过显示子例程的临时变量。每个提取的数字通过名为'mask'的子程序传递。此“蒙版”子程序实际上是一个LUT(查找表),它为相应的数字选择精确的七个段显示模式。“蒙版”子程序如下所示。

项目总结

我希望你现在详细看一下电路图。单片机通过PIC16F73的AN0引脚获取模拟信号。PIC16F73内置的ADC将模拟输入转换为数字值。使用一个方程对这个数字数据进行分数转换,数据被转换成毫伏。使用子例程void display()逐个提取每个数字。匹配所提取的数字,并从写在掩码子例程内的LUT中获取相应的7段模式。然后使用PIC16F73的21到28引脚将LUT的数据传递到多路复用7段显示器的数据总线。使能引脚在引脚11、12、13和14连接微控制器。最后,不同的数据被发送到不同的段显示通过交替开关的使能引脚在10毫秒。这样我们的眼睛只能看到一个4位数的数字。 So here is our full project.

源代码

我们已经给出了这个项目的完整源代码,使用PIC Micro Controller免费下载的数字电压表。您可以使用下面给出的链接下载代码。

数字电压表-项目[源代码]

笔记:-如果你对这个项目有任何疑问,请在评论部分问你的问题。我们很乐意帮助你。

作者

嗨,我是engr。Mithun K. DAS。我喜欢电子产品。我一直在使用电子产品。我使用的现场是,电力电子,微控制器,带有其他电路的微量控制器的集成,控制电路等。我喜欢努力工作,并为我成功的关键词。有关更多信息,您可以查看我的投资组合:www.mlabsbd.wordpress.com/谢谢

11注释

  1. 妮基

    你好,
    当我编译代码时,它会在中断和显示功能中为我提供错误。它表示,变量portb,portc,tmr0和其他突出的声明。请问你能帮帮我吗?
    我正在使用高科技c编译器。
    谢谢你!

  2. arul

    非常好。你正在使用哪个编译器。请发送

    • md.mejbauzzaman.

      什么是编译器名称。请发送给我的十六进制文件。

  3. hscyg

    数字电压表使用微控制器PIC16F73A
    你好!
    我是一个要了解照片的新手,问先生。编译错误。请注明回复。
    谢谢你!

  4. 亚历克斯

    非常好的帖子,它将帮助我很多,你能给我的想法,我如何使用pic微控制器制作电流表

  5. 弥赛亚

    在上述代码中使用的中断的目的是什么?

  6. 德文郡

    PLS帮助...如何修改源代码,以使微控制器读取输入电压可达1000V ......我想用它来显示我的逆变器输出电压......谢谢......

    • SOS.

      也许你可以改变可变电阻的值从1K欧姆到更多..

  7. Sampi.

    主席先生,我有兴趣在做这个项目请收件箱我的完整项目细节如果可能的话,概要。

    谢谢你和问候

    • Jojo.

      @Sampi - 网站上有电路图和代码。您可以自由使用它们来创建项目。如果您需要任何其他信息,请随时在此处询问。

      • 克利须那神

        我可以知道电压表可能的范围......以及AMMeter的设计。

Baidu