在本文中,我们提出了一个新的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免费下载的数字电压表。您可以使用下面给出的链接下载代码。
笔记:-如果你对这个项目有任何疑问,请在评论部分问你的问题。我们很乐意帮助你。
11注释
你好,
当我编译代码时,它会在中断和显示功能中为我提供错误。它表示,变量portb,portc,tmr0和其他突出的声明。请问你能帮帮我吗?
我正在使用高科技c编译器。
谢谢你!
非常好。你正在使用哪个编译器。请发送
什么是编译器名称。请发送给我的十六进制文件。
数字电压表使用微控制器PIC16F73A
你好!
我是一个要了解照片的新手,问先生。编译错误。请注明回复。
谢谢你!
非常好的帖子,它将帮助我很多,你能给我的想法,我如何使用pic微控制器制作电流表
在上述代码中使用的中断的目的是什么?
PLS帮助...如何修改源代码,以使微控制器读取输入电压可达1000V ......我想用它来显示我的逆变器输出电压......谢谢......
也许你可以改变可变电阻的值从1K欧姆到更多..
主席先生,我有兴趣在做这个项目请收件箱我的完整项目细节如果可能的话,概要。
谢谢你和问候
@Sampi - 网站上有电路图和代码。您可以自由使用它们来创建项目。如果您需要任何其他信息,请随时在此处询问。
我可以知道电压表可能的范围......以及AMMeter的设计。