www.pudn.com > voltage_monitor.rar > get.cpp
#include#include #include #include #include #include "get.h" #include "myport.h" /*定义全局常量*/ #define MAX 260 /*定义AD通道最大值*/ #define control_8255 0x303 #define data_8255b 0x301 #define data_8255c 0x302 #define data_clock2 0x306 #define control_clock 0x307 #define data_8251 0x308 #define control_8251 0x309 #define data_clock1 0x305 #define factor 16 int flag16,flag24; /*时钟频率*/ unsigned long int clk = 1193182; /*初始化8251*/ void intitial_8251(); /*初始化8253*/ void intitial_8253(); /*初始化8255*/ void intitial_8255(); /*接受函数*/ int receive(); /*声光报警*/ void soundl(); void send(); #define DATA_MAX 20 int index = 0; int data[DATA_MAX] = {0}; void get(int a[], int& m) { int AtoD; int b[DATA_MAX]; OpenPortTalk(); //初始化8251,8253,8255 intitial_8251(); intitial_8253(); intitial_8255(); while(1){//监测数据 AtoD = receive(); if(AtoD<0) continue; else break; } //printf("The current data is: %d\n",AtoD); if(AtoD>180){//如果电压值超过警戒值 //printf("danger!danger!danger!\n"); send(); soundl(); }//end of if for(int j=0; j 180){//如果电压值超过警戒值 //printf("danger!danger!danger!\n"); //send(); soundl(); }//end of if }//end of for*/ ClosePortTalk(); } /*接收函数*/ int receive() { int data_receive,status; status=inportb(control_8251); //printf("%d\n",status);//correct if(status&0x02) { data_receive=inportb(data_8251); return data_receive; }else{ return -1; } } /*初始化8251*/ void intitial_8251() { outportb(control_8251,0x00); _sleep(100); outportb(control_8251,0x40); _sleep(100); outportb(control_8251,0x4e); _sleep(100); outportb(control_8251,0x27); } /*初始化8253*/ void intitial_8253() { int counter,sendhigh,sendlow,bps=1200; counter=clk/bps;/*初始化8253*/ counter=counter/factor; sendhigh = (counter>>8)&0x00ff; sendlow = counter & 0x00ff; outportb(control_clock,0xb6); outportb(data_clock2,sendlow); outportb(data_clock2,sendhigh); outportb(control_clock,0x76); outportb(data_clock1,200); outportb(data_clock1,0); } /*初始化8255*/ void intitial_8255() { outportb(control_8255,0x80); _sleep(100); outportb(data_8255b,0xff); _sleep(100); outportb(data_8255c,0x00); _sleep(100); } void soundl() { int xu[8]={0x81,0x42,0x24,0x18,0x81,0x42,0x24,0x18};//LED发光顺序 unsigned long int i=0,j=0; outportb(0x303,0x83);//初始化 outportb(0x300,0x00);//LED全灭 outportb(0x303,0x0c);//关闭SPK outportb(0x300,0xff);//按顺序送发光信号 i++; if(i==8)i=0; for(j=0;j<=20;j++) { outportb(0x303,0x0d);//令PC6=1,发高频音 _sleep(10); outportb(0x303,0x0c);//令PC6=0,关闭SPK _sleep(10); } outportb(0x300,0x00);//LED全灭 for(j=0;j<=10;j++) { outportb(0x303,0x0d); _sleep(30);//令PC6=1,发低频音 outportb(0x303,0x0c);//令PC6=0,消音 _sleep(30); } outportb(0x300,0x00);//LED全灭 outportb(0x303,0x0c);//关闭SPK } void send() { int sletter ,status; sletter='0'; status=inportb(control_8251);//获取8253 TXRDY 状态 if((status&0x01)!=0)//已准备好,则将键入的字符发送出去 { outportb(data_8251,sletter); } }