數控電壓源的設計
設計并制作一個數控電壓源,具體要求:
(1)輸出電壓范圍-5V~+5V;
(2)輸出誤差≤1%;
(3)顯示分辨率滿量程的1%以上;
還差一個(4)具有0.1V步進輸出功能。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png (21.76 KB, 下載次數: 65)
下載附件
2018-6-26 18:44 上傳
0.png (57.08 KB, 下載次數: 60)
下載附件
2018-6-26 18:44 上傳
單片機源程序如下:
- /////////////lcd variable/////////////////
- #include <absacc.h>
- #include <reg51.h>
- #define REG0 XBYTE[0x8000]
- #define REG1 XBYTE[0x8100]
- #define REG2 XBYTE[0x8200]
- #define REG3 XBYTE[0x8300]
- unsigned char bdata busyflag;
- unsigned char dat,datn,count;
- unsigned char str[16] = "Output Vol:0.00V";
- sbit busyflag_7=busyflag^7;
- sbit p10=P1^0;
- sbit p11=P1^1;
- sbit p12=P1^2;
- /////////////////end of lcd variable////////////
- ///////////////start of lcd 1602/////////////////
- void busy()
- {
- do
- {
- busyflag=REG1;
- }while(busyflag_7);
- }
- void wrc(unsigned char wcon)
- {
- busy();
- REG0=wcon;
- }
- void wrd(unsigned char wdat)
- {
- busy();
- REG2=wdat;
- }
- void rdd()
- {
- busy();
- dat=REG3;
- }
- void lcdint()
- {
- wrc(0x38);
- wrc(0x01);
- wrc(0x06);
- wrc(0x0c);
- }
- void wrn(unsigned char word[])
- {
- unsigned char i = 0;
- while(word[i]) {
- wrd(word[i++]);
- }
- }
- sbit PIN_JIA = P1^0;
- sbit PIN_JIAN = P1^1;
- sbit PIN_SMG0 = P2^0;
- sbit PIN_SMG1 = P2^1;
- xdata unsigned char DAC0832DATA _at_ 0x7EFF;
- void main()
- {
- unsigned char out, out1;
- unsigned int v;
- out = out1 = 0;
- lcdint();//初始化液晶
- wrc(0x80);
- wrn(str);
- while(1) {
- if(PIN_JIA == 0) {
- if(out < 0xFF) {
- out++;
- DAC0832DATA = out;
- }
- while(PIN_JIA == 0); //等待按鍵釋放
- } else if(PIN_JIAN == 0) {
- if(out > 0x00) {
- out--;
- DAC0832DATA = out;
- }
- while(PIN_JIAN == 0); //等待按鍵釋放
- }
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
shukongdianyayuan.rar
(60.05 KB, 下載次數: 91)
2018-6-26 09:32 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|