小蜜蜂老师【基于PCF8951的电压信号探测器】

2023-12-16 09:48

本文主要是介绍小蜜蜂老师【基于PCF8951的电压信号探测器】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

关于PCF8951模块,有一点需要指出, 

IIC_SendByte(0x03);和IIC_SendByte(0x43);

0x43是打开了模拟输出,如果用到DAC最好写0x43,不然可能误关开关

如果只需要进行DAC的话,写0x03就ok了

什么时候用到ADC呢,要把电压值显示在数码管上的时候

什么时候用到DAC呢,要有模拟电压输出的时候,这个是用万用表进行测量的

 

#include"reg52.h"
#include"iic.h"sbit S4=P3^3;
sbit S5=P3^2;
sbit S6=P3^1;unsigned char code SMG_duanma[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff};
unsigned int adc_value=0;
float adc_volt=0;
unsigned int smg_volt=0;
unsigned int para=300;
unsigned char stat=0;
unsigned char num=0;
unsigned int count=0;
unsigned char stat_led=0xff;
unsigned char led_f=0;
unsigned char count_k=0;void HC138(unsigned char m)
{switch(m){case 4:P2=(P2&0x1f)|0x80;break;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_bit(unsigned char pos,unsigned char dat)
{P0=(0x01<<pos);HC138(6);P0=dat;HC138(7);
}void SMG_off()
{P0=0xff;HC138(6);P0=0xff;HC138(7);
}void SMG_delay(unsigned char y)
{while(y--);
}void SMG_display()
{if(stat==0){SMG_bit(0,0xc1);SMG_delay(200);SMG_bit(0,0xff);SMG_delay(200);SMG_bit(5,SMG_duanma[smg_volt/100]);SMG_delay(200);SMG_bit(5,0xff);SMG_delay(200);SMG_bit(6,SMG_duanma[(smg_volt/10)%10]);SMG_delay(200);SMG_bit(6,0xff);SMG_delay(200);SMG_bit(7,SMG_duanma[smg_volt%10]);SMG_delay(200);SMG_bit(7,0xff);SMG_delay(200);SMG_off();SMG_delay(200);}else if(stat==1){SMG_bit(0,0x8c);SMG_delay(200);SMG_bit(0,0xff);SMG_delay(200);SMG_bit(5,SMG_duanma[para/100]);SMG_delay(200);SMG_bit(5,0xff);SMG_delay(200);SMG_bit(6,SMG_duanma[(para/10)%10]);SMG_delay(200);SMG_bit(6,0xff);SMG_delay(200);SMG_bit(7,SMG_duanma[para%10]);SMG_delay(200);SMG_bit(7,0xff);SMG_delay(200);SMG_off();SMG_delay(200);}else if(stat==2){SMG_bit(0,0x92);SMG_delay(200);SMG_bit(0,0xff);SMG_delay(200);if(num>9){SMG_bit(6,SMG_duanma[num/10]);SMG_delay(200);SMG_bit(7,0xff);SMG_delay(200);}SMG_bit(7,SMG_duanma[num%10]);SMG_delay(200);SMG_bit(7,0xff);SMG_delay(200);SMG_off();SMG_delay(200);}	
}void InitTimer0()
{TMOD=0x01;TH0=(65535-50000)/256;TL0=(65535-50000)%256;EA=1;TR0=1;ET0=1;
}void serviceTimer0() interrupt 1
{TH0=(65535-50000)/256;TL0=(65535-50000)%256;if(count_k==1){count++;if(count%20==0){if(num!=99){num++;}if(led_f==1){if((stat_led&0x80)==0x80){stat_led&=~0x80;}else{stat_led|=0x80;}}}if(count>120){stat_led&=~0x07;led_f=1;}else if(count>80){stat_led&=~0x03;}else if(count>40){stat_led&=~0x01;}else{stat_led=0xff;}}
}unsigned char ReadPCF88951()
{unsigned char tmp;IIC_Start();IIC_SendByte(0x90);IIC_WaitAck();IIC_SendByte(0x03);IIC_WaitAck();IIC_Stop();SMG_display();IIC_Start();IIC_SendByte(0x91);IIC_WaitAck();tmp=IIC_RecByte();IIC_SendAck(1);IIC_Stop();return tmp;	
}void analysize_volt()
{unsigned char i;adc_value=0;for(i=0;i<3;i++){adc_value+=ReadPCF88951();}adc_value=adc_value/3;adc_volt=adc_value*(5.0/255);smg_volt=adc_volt*100;if(smg_volt<para){if(count_k==0){count_k=1;}}else{count_k=0;led_f=0;count=0;num=0;stat_led|=0xff;}SMG_display();P0=stat_led;HC138(4);
}void key_delay(unsigned char p)
{while(p--);
}void keyboard()
{if(S4==0){key_delay(200);if(S4==0){while(S4==0){analysize_volt();}if(stat==0){stat=1;}else if(stat==1){stat=2;}else if(stat==2){stat=0;}}}if(S5==0){key_delay(200);if(S5==0){while(S5==0){analysize_volt();}if(stat==1){if(para!=0){para=para-50;}else{para=500;}}}}if(S6==0){key_delay(200);if(S6==0){while(S6==0){analysize_volt();}if(stat==1){if(para!=500){para=para+50;}else{para=0;}}}}
}void Initsystem()
{P0=0xff;HC138(4);P0=0x00;HC138(5);SMG_off();
}void main()
{Initsystem();InitTimer0();while(1){analysize_volt();keyboard();}
}

这篇关于小蜜蜂老师【基于PCF8951的电压信号探测器】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/500038

相关文章

使用C++将处理后的信号保存为PNG和TIFF格式

《使用C++将处理后的信号保存为PNG和TIFF格式》在信号处理领域,我们常常需要将处理结果以图像的形式保存下来,方便后续分析和展示,C++提供了多种库来处理图像数据,本文将介绍如何使用stb_ima... 目录1. PNG格式保存使用stb_imagephp_write库1.1 安装和包含库1.2 代码解

无线路由器哪个品牌好用信号强? 口碑最好的三个路由器大比拼

《无线路由器哪个品牌好用信号强?口碑最好的三个路由器大比拼》不同品牌在信号覆盖、稳定性和易用性等方面各有特色,如何在众多选择中找到最适合自己的那款无线路由器呢?今天推荐三款路由器让你的网速起飞... 今天我们来聊聊那些让网速飞起来的路由器。在这个信息爆炸的时代,一个好路由器简直就是家庭网编程络的心脏。无论你

电脑显示hdmi无信号怎么办? 电脑显示器无信号的终极解决指南

《电脑显示hdmi无信号怎么办?电脑显示器无信号的终极解决指南》HDMI无信号的问题却让人头疼不已,遇到这种情况该怎么办?针对这种情况,我们可以采取一系列步骤来逐一排查并解决问题,以下是详细的方法... 无论你是试图为笔记本电脑设置多个显示器还是使用外部显示器,都可能会弹出“无HDMI信号”错误。此消息可能

列举你能想到的UNIX信号,并说明信号用途

信号是一种软中断,是一种处理异步事件的方法。一般来说,操作系统都支持许多信号。尤其是UNIX,比较重要应用程序一般都会处理信号。 UNIX定义了许多信号,比如SIGINT表示中断字符信号,也就是Ctrl+C的信号,SIGBUS表示硬件故障的信号;SIGCHLD表示子进程状态改变信号;SIGKILL表示终止程序运行的信号,等等。信号量编程是UNIX下非常重要的一种技术。 Unix信号量也可以

Linux中如何屏蔽信号

本篇文章主要学习Linux的信号处理机制,着重学习屏蔽信号部分。屏蔽信号处理的两种方式类似于信号的捕获,一种方式是直接对其设置,另一种方式是先获得描述符的掩码,然后对其设置操作。 本文主要参考自《嵌入式linux系统使用开发》,作者何永琪,Thanks. 在linux系统中,如何处理某个进程发送的一个特定信号呢?一般来说有三种方式: 1) 忽略信号 2) 屏蔽信号 3) 为该信号添

资料分析系统课-刘文超老师

1、考试大纲 2、解题的问题->解决方法     3、统计术语  基期量与现期量:作为对比参照的时期称为基期,而相对于基期的称为现期。描述具体数值时我们称之为基期量和现期量。 增长量:是指基期量与现期量增长(或减少)的绝对量。增长量是具体值,有单位。增长量=现期量-基期量。增长量有正负,负值代表减少量。增长率:  年均增长量:    年均增长率: 同比和环比

爬取豪ru老师刘艳小说

网址准备 可自行搜索,发现在电脑端无法获取内容,用浏览器仿手机的功能实现 抓包分析,发现网址非常简单,没有任何的反爬措施 可以得到返回的页面,而且字体也没用常见的反爬措施 接下来就分析各个章节的属性就大功告成了 爬取到了 警告,技术不可用于传播黄色

信号与信号量的区别[转]

信号量(Semaphore),有时被称为信号灯,是在多环境下使用的一种设施,是可以用来保证两个或多个关键代码段不被并发调用。在进入一个关键代码段之前,线程必须获取一个信号量;一旦该关键代码段完成了,那么该线程必须释放信号量。其它想进入该关键代码段的线程必须等待直到第一个线程释放信号量。为了完成这个过程,需要创建一个信号量VI,然后将Acquire Semaphore VI以及Release Se

国产隔离放大器:增强信号完整性和系统安全性的指南

隔离放大器是电子领域的关键组件,特别是在信号完整性和电气隔离至关重要的应用中。这些放大器隔离输入和输出信号,使它们能够在没有直接电气连接的情况下跨不同系统传输数据。这确保了电路一部分的高压尖峰或噪声不会影响另一部分,从而保护了系统和用户。随着国产隔离放大器的不断发展,它们提供了性能、可靠性和成本效益的完美结合,使其成为工程师和系统设计师的理想选择。 1. 了解国产隔离放大器的优势 增强信号

信号有效带宽

根据傅里叶变换可以知道信号带宽是无穷大的,这对实际应用是帮助不大的,所以有了有效带宽的概念,可能大家知道常用的经验公式:O.35/Tr或者0.5/Tr等,那这个公式是怎么来的呢?有效带宽又是什么含义呢? 首先来看一个RC低通滤波器,如下: 其上升时间Tr为: 该滤波器的传递函数为: H(s)=1/(RCS+1) 式中S=2πf,转换为频率f的函数为: H(f)=1/(R