PIC单片机的交流电压测量C语言实例_第1页
PIC单片机的交流电压测量C语言实例_第2页
PIC单片机的交流电压测量C语言实例_第3页
PIC单片机的交流电压测量C语言实例_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第 11 章交流电压测量11.3.2 程序清单该程序已在模板上调试通过,可作读者的参考。有关显示部分请读者参考本书相关章节,有关A/D 转换的详细设置请参考前面章节。#include#include#include/该程序用于测电网的交流电压有效值,最后的结果将在 4 个 LED 上显示,保留/1 位小数。/为了保证调试时数据运算的精确性,需要将 PICC 的 double 型数据选成 32 位 unionadresinty1;/平方寄存器和平方和寄存器,squ 又通用为存储其/它数值intuo;bank1unsignedchars4;/此数组用于存储需要显示的字符的 ASII 码constc

2、hartable10=0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x82,0XD80 x80,0 x90;/不带小数点的显示段码表constchartable010=0 x40,0 x79,0 x24,0 x30,0 x19,0 x12,0 x02,0 x78,0 x00,0 x10;带小数点的显示段码表/A/D 转换初始化子程序voidadinitial()ADCON0=0 x41/选才 iA/D 通道为 RA0 且才 T 开 A/D 转换器/在工作状态,使 A/D 转换时钟为 8Tosc转换结果右移,及 ADRES 寄存器的高 6 位为0/把 RA0设置为模

3、拟量输入方式ADIE=1;PEIE=1;/A/D 转换中断允许/外围中断允许unsignedadresult;charadre2;bank3unsignedintre40;chark,data;/定义一个共用体/定义存放 A/D 转换结果的数组,在 bank3 中/定义几个通用寄存器doublesqu,squad;ADCON1=0X8ETRISA0=1;/设置 RA0 为输入方式)/spi 方式显示初始化子程序voidSPIINIT()(PIR1=0;SSPCON=0 x30SSPSTAT=0 xC0/设置 SPI 的控制方式,允许 SSP 方式,并且时钟下降沿发送,与74HC595,当其/S

4、CLK 从低到高跳变时,串行输入寄存器”的特点相对应TRISC=0 xD7SDO 弓 I 脚为输出,SCKSI 脚为输出TRISA5=Q/RA5 引脚设置为输出,以输出显示锁存信号)/系统其它初始化子程序voidinitial()(CCP2IE=0SSPIE=QCCP2CON=0X0BCCPR2H=0X01CCPR2L=0XF4)/中断服务程序/禁止 CC 叶断/禁止 SSP 中断/初始化 CCP2CQNCCP 劾特另 1J 事件触发方式/初始化 CCPR 蓝存器,设置采样间隔 500s,一个周期内电压采 40 个点voidinterrupt(CCP2IF=0ADIF=0;adint(void

5、)/清除中断标志adresult.adre0=ADRESL;adresult.adre1=ADRESH;/读取并存储 A/D 转换结果,A/D 转换的结果/通过共用体的形式放入了变量 y1 中rek=adresult.y1;/1 次 A/D 转换的结果存入数组k+;/数组访问指针加 1)/SPI 传送数据子程序voidSPILED(data)SSPBUF=datadowhile(SSPIF=0);SSPIF=0;/主程序main()adinitial();/A/D 转换初始化SPIINIT();/spi 方式显示初始化initial();/系统其它初始化while(1)k=0;/数组访问指针赋

6、初值TMR1H=0X00;TMR1L=0X00/定时器 1 清 0ei();/中断允许T1CON=0X01/打开定时器 1while(1)if(k=40)break;/A/D 转换次数达到 40,则终止di();/禁止中断for(k=0;k40;k+)rek=rek-0X199;/假设提升电压为 2V,对应十六进制数 199H,/则需在采样值的基础上减去该值for(k=0,squad=0;k40;k+)/强制把采得的数据量转换成双精度数,以便运算/把每点的数据转换成实际数据/求一点电压的平方/以上求得 40 点电压的平方和,存于寄存器 squad 中/求得平均值/开平方,求得最后的电压值/通过

7、变压器的变比和分压电阻分配确定该系数/以上得到了实际电网的电压值/为了保证显示的小数点的精度,先对电压值乘以 10uo=(int)squ;/强制把 U 转换成有符号整型量sprintf(s,%4d,uo);/通过 sprintf 函数把需要显示的电压数据转换成/ASII 码,并存于数组 S 中RA5=0/准备锁存for(k=0;k4;k+)data=sk;/启动发送uo=rek;squ=(double)uo;squ=squ*5/1023;squ=squ*squ;squad=squad+squ;squ=squad/40;squ=sqrt(squ);squ=squ*154.054;squ=squ*10;data=data&0X0F;/通过按位相与的形式把 ASII 码转换成 BCDif(k=2)data=table0data;/因为 squ 已乘以 10,则需在第 2 位打小数点elsedata=tabledata;table。存储带小数点的显示段码,/table 存储不带小数点的显示段码SPILED(data

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论