|
650黑幣
求哪位大神幫幫小弟
我在使用proteus7.8仿真的時(shí)候遇到下圖的錯(cuò)誤
F@0J4))TWQHZ``EZ@78}BAV.png (46.54 KB, 下載次數(shù): 99)
下載附件
2021-5-17 00:47 上傳
電路如下圖
7EQKW4Q~LMRTWPY_$TC@UAX.png (52.4 KB, 下載次數(shù): 95)
下載附件
2021-5-17 00:48 上傳
}CRP{DY3%A041UHXYT1WW9R.png (58.13 KB, 下載次數(shù): 115)
下載附件
2021-5-17 00:48 上傳
[QS(U3BK[Q19B)2WQXHT4%4.png (41.55 KB, 下載次數(shù): 99)
下載附件
2021-5-17 00:48 上傳
NMIPYUG1$R{4[NQR7SKCZHL.png (53.34 KB, 下載次數(shù): 102)
下載附件
2021-5-17 00:48 上傳
仿真源程序和程序在附件里
程序如下
- #include<reg52.h> //52系列單片機(jī)頭文件
- #include<math.h>
- #include <intrins.h>
- #define uchar unsigned char //宏定義
- #define uint unsigned int
- sbit we1=P3^4;
- sbit we2=P3^5;
- sbit we3=P3^6;
- sbit we4=P3^7;
- sbit key1=P2^2; //輸入顯示和采樣顯示切換
- sbit key2=P2^3; // 電流輸出使能
- sbit key3=P2^4; //+100MA
- sbit key4=P2^5; //+10MA
- sbit key5=P2^6; //+1MA
- sbit key6=P2^7; //-1MA
- sbit DAIN=P0^0; //DAC 數(shù)據(jù)輸出
- sbit DACS=P0^1; //DAC 片選
- sbit DAOUT=P0^2; //DAC數(shù)據(jù)輸入
- sbit CLK=P0^3; //ADC DAC CLK
- sbit ADOUT=P0^4; //ADC 數(shù)據(jù)輸入
- sbit BUSY=P0^5; //ADC
- sbit CON=P0^6; //ADC
- sbit SPK=P2^1; //speak
- uchar fo1,fo2,fo3,fo4; //顯示值
- uint DATA1=0;
- uint T_Count=0;
- uint CYS=0;
- uint KA=0;
- uint DAT=0;
- uchar code table[]={ //數(shù)組定義
- 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
- 0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};
- void delays(uint); //子函數(shù)申明
- void keys(); //子函數(shù)申明
- void LED(); //子函數(shù)申明
- void adc(); //子函數(shù)申明
- void dac(); //子函數(shù)申明
- void speak(); //子函數(shù)申明
- void main()
- {
- TMOD = 0x00;
- TH0 = (8192-3000)/32;
- TL0 = (8192-3000)%32;
- IE = 0x82;
- TR0 = 1;
- key1=1;
- key2=1;
- key3=1;
- key4=1;
- key5=1;
- key6=1;
- fo1=0;
- fo2=0;
- fo3=0;
- fo4=0;
- while(1)
- {
- keys(); //按鍵函數(shù) 返回值為KA變量
- dac(); //DAC函數(shù)
- adc(); //ADC采樣 返回值為DATA1
- LED();
- delays(20);
- speak();
- }
- }
- /*---------主函數(shù)-----------------------------------------------*/
- void delays(uint ns)
- {
- uint i,j;
- for(i=ns;i>0;i--)
- for(j=100;j>0;j--);
- }
- /*----------------延時(shí)程序-----------------------------------------------*/
- void keys() //按鍵函數(shù)
- {
- if(key1==0) //kay1 +100MA
- {
- delays(1); //延時(shí)消抖
- if(key1==0)
- while(!key1);//等待松手
- if(KA>=2000)
- KA=2000;
- else
- KA=KA+100;
- }
- if(key2==0) //kay2 -100MA
- {
- delays(1); //延時(shí)消抖
- if(key2==0)
- while(!key2);//等待松手
- if(KA<=100)
- KA=0;
- else
- KA=KA-100;
- }
- if(key3==0) //kay3 +10MA
- {
- delays(1); //延時(shí)消抖
- if(key3==0)
- while(!key3);//等待松手
- if(KA>=2000)
- KA=2000;
- else
- KA=KA+10;
- }
- if(key4==0) //kay4 -10MA
- {
- delays(1); //延時(shí)消抖
- if(key4==0)
- while(!key4);//等待松手
- if(KA<=10)
- KA=0;
- else
- KA=KA-10;
- }
- if(key5==0) //kay5 +1
- {
- delays(1); //延時(shí)消抖
- if(key5==0)
- while(!key5);//等待松手
- if(KA>=2000)
- KA=2000;
- else
- KA=KA+1;
- }
- if(key6==0) //kay2 -1
- {
- delays(1); //延時(shí)消抖
- if(key6==0)
- while(!key6);//等待松手
- if(KA==0)
- KA=0;
- else
- KA=KA-1;
- }
- }
- /*----------------按鍵程序-----------------------------------------------*/
- /*----------------數(shù)碼管顯示程序-----------------------------------------------*/
- void LED()
- {
- DAT=KA;
- fo1=(DAT/1000)%10;
- fo2=(DAT/100)%10;
- fo3=(DAT/10)%10;
- fo4=DAT%10;
- we1=0;
- P1=table[fo1+10];
- delays(2);
- we1=1;
- we2=0;
- P1=table[fo2];
- delays(2);
- we2=1;
- we3=0;
- P1=table[fo3];
- delays(2);
- we3=1;
- we4=0;
- P1=table[fo4];
- delays(2);
- we4=1;
- }
- /*----------------DAC輸出程序-----------------------------------------------*/
- void dac() // DAC輸出
- {
- uchar data i;
- uint data j ;
- j=KA*1.3; //1.2為系數(shù)
- CLK=0;
- DACS=0;
- for(i=0;i<16;i++)
- {
- DAIN=j&0x8000;
- CLK=1;
- CLK=0;
- j=j<<1;
- }
- DACS=1;
- DAIN=1;
- CLK=1;
- }
- /*----------------ADC采樣函數(shù)程序-----------------------------------------------*/
- void adc()
- {
- uchar data r;
- CON=1;_nop_();
- CON=0;_nop_();
- delays(1);
- CON=1;_nop_();
- while(BUSY!=0)
- CLK=0;
- for(r=0;r<16;r++)
- {
- CLK = 1; _nop_();
- CLK = 0; _nop_();
- DATA1=DATA1<<1|ADOUT;
- }
- CLK=1;_nop_();
- delays(3);
- CON=0;
- while(BUSY==0)
- CON=1;
- }
- /*----------------蜂鳴器報(bào)警程序-----------------------------------------------*/
- void speak()
- {
- if(DATA1>=5000)
- SPK=0;
- else
- SPK=1;
- }
- /*----------------中斷控制顯示函數(shù)-----------------------------------------------*/
- void LED_Flash() interrupt 1
- {
- TH0=(8192-5000)/32; //定時(shí)器中斷初值修改1000可以對(duì)顯示時(shí)間進(jìn)行修改
- TL0=(8192-5000)%32;
- if(++T_Count==100)
- {
- CYS=DATA1/3;
- T_Count=0;
- }
- }
復(fù)制代碼
|
-
-
數(shù)控恒流源.zip
2021-5-17 01:15 上傳
點(diǎn)擊文件名下載附件
117.7 KB, 下載次數(shù): 19
|