|
650黑币
求哪位大神帮帮小弟
我在使用proteus7.8仿真的时候遇到下图的错误
电路如下图
仿真源程序和程序在附件里
程序如下
- #include<reg52.h> //52系列单片机头文件
- #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 数据输出
- sbit DACS=P0^1; //DAC 片选
- sbit DAOUT=P0^2; //DAC数据输入
- sbit CLK=P0^3; //ADC DAC CLK
- sbit ADOUT=P0^4; //ADC 数据输入
- 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[]={ //数组定义
- 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
- 0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};
- void delays(uint); //子函数申明
- void keys(); //子函数申明
- void LED(); //子函数申明
- void adc(); //子函数申明
- void dac(); //子函数申明
- void speak(); //子函数申明
- 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(); //按键函数 返回值为KA变量
- dac(); //DAC函数
- adc(); //ADC采样 返回值为DATA1
- LED();
- delays(20);
- speak();
- }
- }
- /*---------主函数-----------------------------------------------*/
- void delays(uint ns)
- {
- uint i,j;
- for(i=ns;i>0;i--)
- for(j=100;j>0;j--);
- }
- /*----------------延时程序-----------------------------------------------*/
- void keys() //按键函数
- {
- if(key1==0) //kay1 +100MA
- {
- delays(1); //延时消抖
- if(key1==0)
- while(!key1);//等待松手
- if(KA>=2000)
- KA=2000;
- else
- KA=KA+100;
- }
- if(key2==0) //kay2 -100MA
- {
- delays(1); //延时消抖
- if(key2==0)
- while(!key2);//等待松手
- if(KA<=100)
- KA=0;
- else
- KA=KA-100;
- }
- if(key3==0) //kay3 +10MA
- {
- delays(1); //延时消抖
- if(key3==0)
- while(!key3);//等待松手
- if(KA>=2000)
- KA=2000;
- else
- KA=KA+10;
- }
- if(key4==0) //kay4 -10MA
- {
- delays(1); //延时消抖
- if(key4==0)
- while(!key4);//等待松手
- if(KA<=10)
- KA=0;
- else
- KA=KA-10;
- }
- if(key5==0) //kay5 +1
- {
- delays(1); //延时消抖
- if(key5==0)
- while(!key5);//等待松手
- if(KA>=2000)
- KA=2000;
- else
- KA=KA+1;
- }
- if(key6==0) //kay2 -1
- {
- delays(1); //延时消抖
- if(key6==0)
- while(!key6);//等待松手
- if(KA==0)
- KA=0;
- else
- KA=KA-1;
- }
- }
- /*----------------按键程序-----------------------------------------------*/
- /*----------------数码管显示程序-----------------------------------------------*/
- 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为系数
- 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采样函数程序-----------------------------------------------*/
- 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;
- }
- /*----------------蜂鸣器报警程序-----------------------------------------------*/
- void speak()
- {
- if(DATA1>=5000)
- SPK=0;
- else
- SPK=1;
- }
- /*----------------中断控制显示函数-----------------------------------------------*/
- void LED_Flash() interrupt 1
- {
- TH0=(8192-5000)/32; //定时器中断初值修改1000可以对显示时间进行修改
- TL0=(8192-5000)%32;
- if(++T_Count==100)
- {
- CYS=DATA1/3;
- T_Count=0;
- }
- }
复制代码
|
|