電壓檢測(cè)模塊 
電路原理圖:
【簡(jiǎn)要說(shuō)明】 - 尺寸:長(zhǎng)88mmX寬45mmX高15mm
二、主要芯片:STC12C5604AD
三、工作電壓:直流12V - 特點(diǎn):
1、檢測(cè)模擬量電壓范圍0~10V(量程可根據(jù)客戶的需要拓寬)
2、數(shù)碼管顯示范圍0~9.999
3、四位數(shù)碼管顯示
4、輸入輸出接線簡(jiǎn)單
5、AD轉(zhuǎn)換頻率125K,10位數(shù)據(jù)轉(zhuǎn)換
7、可設(shè)定高低壓報(bào)警值。高于(低于)某個(gè)電壓報(bào)警 - 作用:將輸入的模擬信號(hào)(電壓或者電流)量轉(zhuǎn)換成為0~5000的數(shù)字量,由數(shù)碼管顯示出來(lái)。可設(shè)置高低電壓報(bào)警、
適用場(chǎng)合:?jiǎn)纹瑱C(jī)學(xué)習(xí)、電子競(jìng)賽、產(chǎn)品開發(fā)、工業(yè)控制、畢業(yè)設(shè)計(jì)。。。

【圖片展示】 接線時(shí)候供電的+接+12v,供電的負(fù)就接-12v,要檢測(cè)的電壓信號(hào)就信號(hào)的輸入,電壓的正極接+,負(fù)極接-。 設(shè)置說(shuō)明:KEY1鍵按下進(jìn)入設(shè)置模式,此時(shí)可以按KEY2和KEY3分別加減數(shù)字,這個(gè)數(shù)值是我們電壓報(bào)警的上限值。在檢測(cè)的電壓值高于這個(gè)值后繼電器就會(huì)吸和。(當(dāng)然也可以是低于這個(gè)值繼電器吸和。可以通過(guò)編程改變需要的功能。)再次按KEY1鍵回到待機(jī)模式,此時(shí)數(shù)碼管上顯示的就是我們的信號(hào)的電壓值。 【PCB尺寸圖】 【圖片展示】 【效果展示】  
單片機(jī)源程序如下:
- /********************************************************************
- 匯誠(chéng)科技實(shí)現(xiàn)功能:檢測(cè)電流,數(shù)碼管顯示電流值
- 使用芯片:STC12C5604AD
- 產(chǎn)品模塊編號(hào):兩輸入,一路電壓檢測(cè),三個(gè)按鍵,四位數(shù)顯,一路繼電器
- 晶振:外部晶振 11.0592M
- 編譯環(huán)境:Keil -uvision4
- 【聲明】此程序僅用于學(xué)習(xí)與參考,引用請(qǐng)注明版權(quán)和作者信息!
- /********************************************************************
- ********************************************************************/
- #include "main.h"
- #include<math.h>
- #define uchar unsigned char//宏定義無(wú)符號(hào)字符型
- #define uint unsigned int //宏定義無(wú)符號(hào)整型
- #define FOSC 11059200L
- #define BAUD 9600
- #define ADC_POWER 0x80 //ADC 電源控制位
- #define ADC_FLAG 0x10 //ADC 轉(zhuǎn)換結(jié)束標(biāo)志位
- #define ADC_START 0x08 //ADC 開始轉(zhuǎn)換控制位
- #define ADC_SPEEDHH 0x60 //270個(gè)時(shí)鐘周期轉(zhuǎn)換一次
- sfr ADC_DATA=0xc6; //70個(gè)時(shí)鐘周期轉(zhuǎn)換一次
- #define DUAN P2 //P0口控制段
- #define WEI P1 //P2口控制位
- /********************************************************************
- 初始定義
- *********************************************************************/
- //數(shù)碼管顯示段碼
- code uchar seg7code[11]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0XBF};
- uint cnt;
- uint16 idata setvol_H;
- uint volt;
- uint dis;
- uchar flag = 1;
- uchar start_delay;
- // 串行中斷程序
- void initInt(void)
- {
- TMOD = 0x01;
- PCON = 0;
- TH0 =(655336-1000)/256;
- TL0 =(655336-1000)%256;
- TR0 = 1;
- ET0 = 1;
- EA = 1;
- }
- //初始化
- //初始化
- void initProg(void)
- {
- P2M1=0;
- P2M0=0xff;
- P1M1=0xf0;
- P1M0=0xff;
- P3M1&=0x7f;
- P3M0|=0x80;
- initInt(); //初始化定時(shí)器
- }
- /********************************************************************
- 延時(shí)函數(shù)
- *********************************************************************/
- void delay(uint x)//延時(shí)程序 0.1秒
- {
- uint m,n,s;
- for(m=x;m>0;m--)
- for(n=20;n>0;n--)
- for(s=248;s>0;s--);
- }
- /********************************************************************
- AD轉(zhuǎn)換初始化程序
- *********************************************************************/
- void InitADC()
- {
- P1M0|=0xf0;
- //P1M1=0xf0;
- ADC_RES=0; //AD數(shù)據(jù)寄存器清空
- ADC_CONTR=ADC_POWER | ADC_SPEEDHH | ADC_START;//打開AD電源,轉(zhuǎn)換周期XX
- delay(10); //延時(shí)
- //采集7通道的
- }
- /********************************************************************
- AD轉(zhuǎn)換控制程序
- *********************************************************************/
- uint GetADCResult(uchar px) //轉(zhuǎn)換輸出的數(shù)據(jù) (PX為通道口)
- {
- uint t;
- ADC_CONTR=ADC_POWER | ADC_SPEEDHH | px | ADC_START;//開始轉(zhuǎn)換
- _nop_(); //延時(shí)一個(gè)機(jī)器周期
- _nop_(); //延時(shí)一個(gè)機(jī)器周期
- _nop_(); //延時(shí)一個(gè)機(jī)器周期
- _nop_(); //延時(shí)一個(gè)機(jī)器周期
- _nop_(); //延時(shí)一個(gè)機(jī)器周期
- _nop_(); //延時(shí)一個(gè)機(jī)器周期
- _nop_(); //延時(shí)一個(gè)機(jī)器周期
- _nop_();
- while (!(ADC_CONTR & ADC_FLAG));//等待轉(zhuǎn)換結(jié)束
- ADC_CONTR &= ~ADC_FLAG; //關(guān)閉AD轉(zhuǎn)換
- t=ADC_RES;
- return t;
- }
- /********************************************************************
- 按鍵掃描
- *********************************************************************/
- void key_scan(void)
- {
- if(key1==0) //功能按鍵,顯示調(diào)整和實(shí)測(cè)值
- {
- delay(2);
- if(key1==0)
- {
- while(!key1);
- switch(flag)
- {
- case 1: //進(jìn)去設(shè)置模式
- flag = 2;
- break;
- case 2: //每次設(shè)置后保存設(shè)置的值
- flag = 1;
- IapEraseSector(0);
- IapProgramByte(0,(setvol_H&0xff));
- IapProgramByte(1,(setvol_H>>8));
- break;
- }
- }
-
- }
- if(flag!=1)
- {
- if(key3==0) //增加設(shè)定電流值
- {
- delay(5);
- if(key3 ==0)
- {
- switch(flag)
- {
- case 1:
- break;
- case 2:
- setvol_H = setvol_H - 10;
- if(setvol_H<=10)
- {
- setvol_H = 10;
- }
- break;
- }
- }
-
- }
- if(key2 ==0)
- {
- delay(5);
- if(key2 ==0)
- {
- switch(flag)
- {
- case 1:
-
- break;
- case 2:
- setvol_H = setvol_H + 10;
- if(setvol_H>=5000)
- {
- setvol_H = 5000;
- }
- break;
-
- }
- }
- }
- }
- }
- /********************************************************************
- 主函數(shù)
- *********************************************************************/
- void main()
- {
- long ad,ad1,temp;
- uchar cnt1;
- delay(30);
- setvol_H = (IapReadByte(1)<<8)+IapReadByte(0);//初始化報(bào)警值
- initProg();//初始化
- InitADC(); //AD初始化
-
- while(1)
- {
- ad =ad1=0;
- while(++cnt1<254)
- {
- ad = ad+ GetADCResult(6);//2.5v基準(zhǔn)
- ad1 =ad1+ GetADCResult(7);
- }
- ad1 = ad1/254;
- ad = ad/254;
- temp = (ad1*2.5/ad)*300; //轉(zhuǎn)換求測(cè)量值
- cnt1 = 0;
- volt = (uint)temp + 50;
- switch(flag) //顯示測(cè)量值
- {
- case 1:
- dis = volt;
- break;
- case 2:
- dis = setvol_H; //設(shè)置高壓
- break;
- }
- key_scan();//按鍵掃描
- if((volt<setvol_H)) //報(bào)警
- {
- OUT = 0;
- start_delay = 1;
- }
- }
- }
- /********************************************************************
- 定時(shí)器T0中斷函數(shù)
- *********************************************************************/
- void timer0(void)interrupt 1
- {
- static uint cnt2,cnt3;
- TH0=(65536-1000)/256;
- TL0=(65536-1000)%256;
- cnt++;
- if(cnt>4)
- {
- cnt=1;
- }
- ……………………
- …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
電壓檢測(cè)模塊.rar
(9.5 MB, 下載次數(shù): 197)
2018-3-2 11:32 上傳
點(diǎn)擊文件名下載附件
|