|
這是我剛做的一個(gè)20~200A大電流檢測(cè)電路,通過(guò)ADC0809轉(zhuǎn)換成數(shù)字信號(hào),通過(guò)LED顯示結(jié)果,包括原理圖,仿真文件,源代碼。
將R1的電壓采樣到ADC0809,轉(zhuǎn)換為數(shù)字信號(hào),輸入單片機(jī)
AD畫的原理圖(附件中可以可以下載):
0.png (53.65 KB, 下載次數(shù): 146)
下載附件
2017-4-11 18:01 上傳
0.png (39.17 KB, 下載次數(shù): 126)
下載附件
2017-4-11 18:03 上傳
51單片機(jī)P0口和其他口內(nèi)部結(jié)構(gòu)不同
使用單片機(jī)P0端口時(shí)必須把P0的8個(gè)口都接上拉電阻,
使用單要不然P0口只能輸出低電平,不能輸出高電平
proteus仿真原理圖:
0.png (33.1 KB, 下載次數(shù): 154)
下載附件
2017-4-11 18:00 上傳
單片機(jī)源程序:
- //------------------------------51單片機(jī)頭文件
- #include<reg51.h>
- //各數(shù)字的數(shù)碼管段碼(共陰)
- unsigned char code DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //數(shù)碼管顯示數(shù)組{0,1,2,3,4,5,6,7,8,9}
- sbit CLK=P3^3; //時(shí)鐘信號(hào)
- sbit ST=P3^6; //啟動(dòng)信號(hào),由低電平到高電平時(shí)間段復(fù)位 ,高電平到低電平時(shí)間段開始轉(zhuǎn)換
- sbit EOC=P3^5; //轉(zhuǎn)換結(jié)束信號(hào),當(dāng)轉(zhuǎn)換結(jié)束時(shí)會(huì)自動(dòng)變成高電平
- sbit OE=P3^4; //輸出使能 ,當(dāng)OE為高電平時(shí)開啟輸出端,OE為低電平時(shí)禁止輸出
- sbit W1=P2^4; //定義W1表示P2.4位,第一位數(shù)碼管控制端, 為0時(shí)亮,為1時(shí)滅
- sbit W2=P2^3; //定義W2表示P2.3位,第二位數(shù)碼管控制端, 為0時(shí)亮,為1時(shí)滅
- sbit W3=P2^2; //定義W3表示P2.2位,第三位數(shù)碼管控制端, 為0時(shí)亮,為1時(shí)滅
- sbit key=P3^7; //定義按鍵控制key為P3.7
- //----------------------------1ms延時(shí)函數(shù)
- void Delayms(unsigned char ms)
- {
- unsigned char i;
- while(ms--)
- for(i=0;i<120;i++);
- }
- //---------------------------顯示轉(zhuǎn)換結(jié)果(動(dòng)態(tài)掃描模式)
- void Display(unsigned int d)
- {
- d=d*1.0/256*5*40; //將數(shù)字量轉(zhuǎn)換成模擬量的公式為5V*(d/256),采樣電壓值為電流值*100歐姆,所以要獲得實(shí)際電流值,即為采樣電壓值*40倍 (n1:n2=4000:1)
- W1=0; //第一個(gè)數(shù)碼管亮
- P0=DSY_CODE[d%10]; //顯示第一個(gè)數(shù)碼管的值 為P1的值除以10取余
- Delayms(6); //延時(shí)5ms
- W1=1; //第一個(gè)數(shù)碼管滅
- W2=0;
- P0=DSY_CODE[d%100/10]; //顯示第二個(gè)數(shù)碼管的值 為P1的值除以100取余 再除以10取整
- Delayms(6);
- W2=1;
-
- W3=0;
- P0=DSY_CODE[d/100]; //顯示第三個(gè)數(shù)碼管的值 為P1的值除以100取整
- Delayms(6);
- W3=1;
- }
- //-------------------------------------------------主程序
- void main()
- {
- TMOD=0x02; //16位定時(shí)器0工作模式設(shè)置為2
- TH0=0x14; //設(shè)置定時(shí)器高8位初值為0x14
- TL0=0x00; //設(shè)置定時(shí)器低8位初值為0x00
- TR0=1; //開啟定時(shí)器0開關(guān)
- ET0=1; //開啟定時(shí)器0中斷開關(guān)
- EA=1; //開啟中斷總開關(guān)
- //---------------啟動(dòng) A/D 轉(zhuǎn)換
- //---------開始按鍵-----
- A: while(key==1); //等待按鍵按下
- Delayms(1); //延時(shí)1ms
- if(key==0) //延時(shí)1ms后按鍵還是按下了,說(shuō)明按鍵確實(shí)按下了(按鍵消抖功能)
- while(key==0); //當(dāng)按鍵松開時(shí),循環(huán)轉(zhuǎn)換和顯示
- while(1)
- {
- ST=0;
- ST=1;
- ST=0;
-
- while(EOC==0); //等待轉(zhuǎn)換完成
- OE=1; //開啟輸出端
-
- Display(P1); //將輸出到單片機(jī)P1端口上的數(shù)字信號(hào)在LED顯示出來(lái)
- OE=0; //關(guān)閉輸出端
-
- //------停止按鍵---------
- if(key==0)
- {
- Delayms(1);
- if(key==0) //延時(shí)1ms后按鍵還是按下了,說(shuō)明按鍵確實(shí)按下了(按鍵消抖功能)
- while(key==0); //當(dāng)按鍵松開時(shí)
-
- …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
-
復(fù)制代碼
0.png (74.75 KB, 下載次數(shù): 121)
下載附件
2017-4-11 17:59 上傳
全部資料打包下載:
大電流檢測(cè).zip
(210.71 KB, 下載次數(shù): 257)
2017-4-11 14:16 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
|