c语言检测交流电程序,PIC单片机C语言编程实例七-第11章交流电压测量.doc

PAGE

PAGE 189

第11章 交流电压测量11.3.2 程序清单该程序已在模板上调试通过,可作读者的参考。有关显示部分请读者参考本书相关章节,有关A/D转换的详细设置请参考前面章节。#include#include #include //该程序用于测电网的交流电压有效值,最后的结果将在4个LED上显示,保留//1位小数。//为了保证调试时数据运算的精确性,需要将PICC的double型数据选成32位unionadres{inty1;unsigned charadre[2];}adresult;//定义一个共用体bank3intre[40];//定义存放A/D转换结果的数组,在bank3中unsigned char k,data;//定义几个通用寄存器doublesqu ,squad;//平方寄存器和平方和寄存器,squ又通用为存储其//它数值intuo;bank1unsigned chars[4];//此数组用于存储需要显示的字符的ASII码const chartable[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0XD8,0x80,0x90};//不带小数点的显示段码表const char table0[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};//带小数点的显示段码表//A/D转换初始化子程序voidadinitial(){ADCON0=0x41;//选择A/D通道为RA0,且打开A/D转换器 //在工作状态,使A/D转换时钟为8ToscADCON1=0X8E;//转换结果右移,及ADRESH寄存器的高6位为"0" //把RA0口设置为模拟量输入方式ADIE=1;//A/D转换中断允许PEIE=1;//外围中断允许TRISA0=1;//设置RA0为输入方式}//spi方式显示初始化子程序void SPIINIT(){PIR1=0;SSPCON=0x30;SSPSTAT=0xC0;//设置SPI的控制方式,允许SSP方式,并且时钟下降沿发送,与"74HC595,当其//SCLK从低到高跳变时,串行输入寄存器"的特点相对应TRISC=0xD7;//SDO引脚为输出,SCK引脚为输出TRISA5=0;//RA5引脚设置为输出,以输出显示锁存信号}//系统其它初始化子程序voidinitial(){CCP2IE=0;//禁止CCP中断SSPIE=0;//禁止SSP中断CCP2CON=0X0B;//初始化CCP2CON,CCP2为特别事件触发方式CCPR2H=0X01;CCPR2L=0XF4;//初始化CCPR2寄存器,设置采样间隔500 μs,//一个周期内电压采40个点}//中断服务程序voidinterruptadint(void){CCP2IF=0;ADIF=0;//清除中断标志adresult.adre[0]=ADRESL;adresult.adre[1]=ADRESH;//读取并存储A/D转换结果,A/D转换的结果 //通过共用体的形式放入了变量y1中 re[k]=adresult.y1;//1次A/D转换的结果存入数组k++;//数组访问指针加1}//SPI传送数据子程序void SPILED(data){SSPBUF=data;//启动发送do{ ;}while(SSPIF==0);SSPIF=0;}//主程序main( ){adinitial();//A/D转换初始化SPIINIT();//spi方式显示初始化initial();//系统其它初始化while(1){k=0;//数组访问指针赋初值TMR1H=0X00;TMR1L=0X00;//定时器1清0ei();//中断允许T1CON=0X01;//打开定时器1while(1){if(k==40)break;//A/D转换次数达到40,则终

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值