电表数据采集器

上传人:cn****1 文档编号:472592396 上传时间:2023-01-30 格式:DOCX 页数:14 大小:130.13KB
返回 下载 相关 举报
电表数据采集器_第1页
第1页 / 共14页
电表数据采集器_第2页
第2页 / 共14页
电表数据采集器_第3页
第3页 / 共14页
电表数据采集器_第4页
第4页 / 共14页
电表数据采集器_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《电表数据采集器》由会员分享,可在线阅读,更多相关《电表数据采集器(14页珍藏版)》请在金锄头文库上搜索。

1、一、原理图电表数据采集器二、流程图三、原程序#iiiclude #iiiclude #iiiclude #define uchar unsigned char#define umt unsigned hit#define ulong#define ADP2#define ADPO#define CD4051#define fbsc#define tuneO#define jishuunsigned longP2POPl1220001000umt idata jisuandu;umt idata tiineO_O;/AD7135直接与单片机相连采用查询的方法多路/晶振频率定时2000us假设AD

2、输入电压与对应瞬时功率的基数/ IV 对应 lOOOw临时变量,用于计算电度数临时变量,用于计算定时sbit STAT7135=P1A7;sbit busy = P2A6;sbit st = P2A5;sbitCS7221 =P1A5;/7135的启动端/7135的忙端/7135的选通端/7221的片选sbit DIN7221 =PiA4;/7221的数据端sbit CLK7221 =P1Z6;sbit SDA=P3A1;sbit SCL=P3z 0;/sbit en_24c!6=P3A4;/7221的时钟端/2416的数据端/2416的时钟端uchai DISPBUF8=0,1,2,3,4,

3、5,6,7; 显示缓冲区uchai ADBUF40=0;AD缓冲区 (万千百十个)*8uchai TIME2=0;uchai BUF5=0;用于定时数据处理缓冲区void delay(uint n);延时子程序void Initial7221(void);/7MAX7221初始化void WR7221 (uchar addi;uchar Data); /MAX7221 写程序 void Max722 lDisplay(uchai- *buffei); /MAX7221 显示程序void time2ms(void);void timeO_int(void);定时器0初始化程序定时器0中断服务程序

4、void ICL7135(void);void SAVE(void);void start_bit(void);void stop_bit(void);/ICL7135 8路信号AD转换程序电量存储转电度程序/IIC开始条件/nc停止条件void mast_ack(void);/IIC应答bit write_8 bit(uchar ch);/nc写8位数据uchai read24cl6(uiiit address,uchar *shu);/IIC 读字节数据uchai wiite24c 16(uint address,uchar ddata);/IIC 写字节数据uchai page_wr(u

5、int fkstw_ad,uint counter,uchar *firsti_ad);/IIC 页写 uchai page_id(umt fiistrd_adjiint count,uchai *fiistwr_ad);UC 页读main()(/wliile(page_wr(0420,0)=0);初次使用时 清电量数Iiutial7221();初始化7221Max7221Display(&DISPBUF0);/开机跃认显示。7delay(40);延时tune2nis();启动定时器wlule(l)if(TDv!El%10=0)(ICL7135Q;/5秒时间到启动8路AD转换SAVE。;存储电

6、能/MAX7221的写子程序/片选有效/写8位地址时钟低/先发高位依次到低位时钟高上升沿锁数据/写8位数据时钟低/先发高位依次到低位时钟高上升沿锁数据片选无效void WR7221(uchar addr,uchar Data)uchar i;CS7221 =0;for (i=0;i8;i+)CLK7221 =0;DIN7221 = (addr&(0x80i) ? 1:0;_nop_();_nop_();CLK7221 = 1;_nop_();_nop_();for (i=0;i8;i+)CLK7221 =0;DIN7221 = (Data&(0x80i) ? 1:0;_nop_();_nop_

7、();CLK7221 = 1;_nop_();_nop_();CS7221 = 1; void Initial7221(void) /NIAX7221 初始化WR7221(0x0A.0x0A); 亮度地址 OAH.OxOO0x0F,0x0F 最亮WR7221(0x0B.0x07); 扫描LED个数地址0BH,0x000x07,最多扫描8个数码管WR7221(0x0C.0x01); 工作模式地址 OxOC. 0x00:关断;0x01:正常WR7221(0x09,0xFF); 编码模式地址0x09. 0x00OxFF:哪一位为1,哪一位就支持编码 void Max722 lDisplay(ucha

8、i- buffer) /MAX7221 显示子程序uchar i;fbr (i=0;i8;i+)WR7221 (1+1 ,*(buffer+i);/MAX7221的8个数码管显示调MAX7221的写子程序void delay(uint n)延时程序uiiit i j;fbr (i=0;in;i+)for(j=0j1140j+);void time2ms(void)/T0定时器初始化TMOD=0x01;/* 2nis定时设置*/T0工作方式1tmie0_0 = 65536-time0*fbsc/12; 计算初值TH0=(time0.0/256);装定时器。初值TL0=(time0_0%256);

9、TR0=l;ETO=1;EA=1;启动定时器0打开定时器0中断打开总中断/*定时器0中断服务子程序,定时用于AD转换Is约转换3次,8路信号约3s时间 为了时间充裕5s采集一次电能信号*/重装定时器。初值/250*2ms=500ms=0.5s 时间到到 0.5s 时 TIME0清 0加1 内存的0.5秒的整数倍void timeOJnt(void) mtenupt 1 TH0=(time0_0/256);TL0=(time0_0%256);TIME0+;if(TIME0=250)TIME0=0;TIME1+;void ICL7135(void)启动8路AD转换/7135启动端使能启动AD转换设

10、置CD4051的第一路信号输/8路循环测量uchar ij;STAT7135=1;CD4051=CD4051&0xft);入ADfor(J=OJ=7J+)i=CD4051&0xfD;CD4051j|i;STAT7135=1;i=busy;do(i=bu sy; while (bu sy=0);do (i=busy; while(busy= 1);STAT7135=0;读Pl I I的状态保护高位/通过J调节多路开关的转换/7135启动端使能启动AD转换读7135的正在转换 忙端忙端为0时等待直到开始转换忙端为1时正在转换等待/7135禁止AD转换do(i=ADP2;wlule(ADP2&0x0

11、10)!=0x010);读 7135 的 D5,直到 D5 为 1if (ADP2&0x010)=0x010)/D5 为 1 开始读 AD 转换结果/STAT7135=0;ADBUFU*5 =ADP0&0x0f:读 7135 的万位do(i=ADP2;while(ADP2&0x08)!=0x08);/读 7135 的 D4,直到 D4 为 1 ADBUFl+j*5=ADP0&0x0f;读7135 的千位do(i=ADP2;while(ADP2&0x04)! =0x04);/读 7135 的 D3,直到 D3 为 1 ADBUF2+j*5=ADP0&0x0f;读7135 的百位do(i=ADP2

12、;while(ADP2&0x02)! =0x02);/读 7135 的 D2,直到 D2 为 1 ADBUF3+j*5=ADP0&0x0f;读7135 的十位do(i=ADP2;while(ADP2&0x01)!=0x01);/读 7135 的 D1,直到 D1 为 1 ADBUF4+j *5=ADP0&0x0f;/ADBUF0=j+l;/Max7221Display(&ADBUFj*5);读7135的个位路号当频率慢时可以显示AD转换的结void SAVE(void)电能处理保存uchar k.i;ulong kk,kkl Jck2;if(TIMEl120) 单加小于1分钟时120*0.5=60s简for (k=0;k=7;k+)8路电能循环存储读原来的电能各路5位数字/本次的电能和原来的电能求/存新的总电能等于1分钟时 做电度数的处8路电能循环转换成电度数存储读原来的电能各路5位数字/本次的电能和原来的电能求/清寄存的电能while (page_rd(k*5,5,&BUF0)=0);for (i=0;i=4;i+)(BUFi=BUFi+ADBUFi+k*5;和)while (page_wr(k*5,5,&BUF0)=0);if(TIMEl=120)理TIME1=O;f

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号