|
精密數(shù)控直流電流源仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
單片機(jī)源程序如下:
- #include<reg51.h>
- #include<absacc.h> //頭文件,可使用其中定義的宏來(lái)訪問(wèn)絕對(duì)地址
- #define dac0832 XBYTE[0X7fff] //定義dac端口地址,P0口為地址的低8位,P2口為地址的高8位,0x7fff讓P2.7=0,其余為1
- unsigned char code shu[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x7f}; //數(shù)碼管段碼
- unsigned char code sho[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x7f}; //帶小數(shù)點(diǎn)的七段碼
- float s;
- sbit ALE=P3^0; //DAC0832 ALE腳工作脈沖位定義
- sbit START=P3^1; //DAC0832 START位定義
- sbit EOC=P3^2; //轉(zhuǎn)換結(jié)束標(biāo)志位
- sbit OE=P3^3; //輸出允許位
- sbit SHCP=P2^0; //數(shù)碼管驅(qū)動(dòng)芯片(如595)位定義
- sbit DS=P2^1; //同上
- sbit STCP=P2^2; //同上
- sbit P11=P3^5;
- sbit P12=P3^7;
- sbit clk=P2^6; //DAC0832 工作脈沖
- unsigned char j,k,m,n,i,a,l; //定義變量
- unsigned int b;
- void delay(unsigned char t) //延時(shí)程序
- {
- while(t--);
- }
- void display() //靜態(tài)數(shù)碼管顯示程序
- {
-
-
-
- j=0x01; //74HC595 把數(shù)據(jù)從串口導(dǎo)入輸出,點(diǎn)亮數(shù)碼管過(guò)程。
- for(i=0;i<8;i++)
- {
- if((sho[m]&j)==0) //帶小數(shù)點(diǎn)數(shù)組輸出數(shù)碼管七段碼。
- {
- DS=0; //移位寄存器的內(nèi)容到達(dá)保持寄存器并從并口輸出,空移位寄存器到輸出寄存器
- }
- else
- {
- DS=1; //邏輯高電平移入移位寄存器狀態(tài)0,包含所有的移位寄存器狀態(tài) 移入
- }
- SHCP=1;
- SHCP=0;
- j<<=1; //j的數(shù)值左移一位
- }
- P12=0; //RD 低電平
- P11=1; //T1 高電平
- STCP=0; //STCP置為上升沿
- STCP=1;
- delay(200);
- j=0x01;
- for(i=0;i<8;i++)
- {
- if((shu[n]&j)==0)
- {
- DS=0; //清空移位寄存器,并行輸出為高阻狀態(tài)
- }
- else
- {
- DS=1;
- }
- SHCP=1; //端口下降沿,下降沿移位寄存器數(shù)據(jù)不變
- SHCP=0;
- j<<=1;
- }
- P11=0; //T1 高電平
- P12=1; //RD 低電平
- STCP=0; //STCP置為上升沿
- STCP=1;
- delay(200); //調(diào)用延時(shí)程序
- }
-
- void main() //主函數(shù)
- {
- P2=0X87;
- TMOD=0X20; //定時(shí)器1初始化
- TH1=0X06;
- TL1=0X06;
- EA=1; //總中斷允許
- ET1=1;
- TR1=1;
- while(1) //循環(huán)程序
- {
- ALE=1; //DAC0832地址鎖存脈沖
- ALE=0;
- //DAC0832 開(kāi)始轉(zhuǎn)換脈沖
- START=1; //ADC0808脈沖,置 START引腳為下降沿。
- START=0; //ST下降沿,開(kāi)始進(jìn)行模數(shù)轉(zhuǎn)換。
- while(EOC==0); //等待轉(zhuǎn)換完畢, A/D轉(zhuǎn)換結(jié)束信號(hào),輸出,當(dāng)A/D轉(zhuǎn)換結(jié)束時(shí),此端輸出一個(gè)高電平(轉(zhuǎn)換期間一直為低電平)。
- OE=1; //開(kāi)始讀,數(shù)據(jù)輸出允許信號(hào),輸入,高電平有效。當(dāng)A/D轉(zhuǎn)換結(jié)束時(shí),此端輸入一個(gè)高電平,才能打開(kāi)輸出三態(tài)門,輸出數(shù)字量。
- k=P1; //讀數(shù)據(jù),數(shù)據(jù)從ADC0808 讀入 AT89C51
- a=P1; //讀數(shù)據(jù), 轉(zhuǎn)換好的數(shù)據(jù)存放在P1口。
- b=a*3.9; //平衡模數(shù)轉(zhuǎn)換輸出的數(shù)值用來(lái)通過(guò)單片機(jī)進(jìn)行給數(shù)碼管顯示。
- m=b%1000/100; //取千位數(shù)
- n=b%100/10; //取百位數(shù)
- //l=b%1000/100/10 //取十位數(shù)
- dac0832=k;
-
- ……………………
- …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
數(shù)控直流穩(wěn)壓電源proteus仿真 程序資料.zip
(108.47 KB, 下載次數(shù): 224)
2017-5-24 13:34 上傳
點(diǎn)擊文件名下載附件
|
|