|
本來想做一個基于stc15單片機0-20v自動換量程電壓表的,程序寫好了在keil5里能正常編譯。一仿真就出感嘆號,Proteus卡死。
程序如下:
#include <stc15f2k60s2.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar code71[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar code72[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};
uchar wei[4]={0xfe,0xfd,0xfb,0xf7};//weixuan
unsigned char flag;
int f=0;
uint l=0;
void delay(uint ms)
{
uint i,j;
for(i=ms;i>0;i--)
for(j=110;j>0;j--);
}
void initial()
{
P1M1=0x10;
P1M0=0x10;
P2M1=0x00;
P2M0=0x00;
P3M1=0x00;
P3M0=0x00;
P4M1=0x00;
P4M0=0x00;
P5M1=0x00;
P5M0=0x00;
P0=0x00;
}
void AD()
{
int f=0;
uchar status;
P1ASF=0x10;
ADC_CONTR=0x84;
delay(100);
ADC_CONTR=0x8c;
_nop_();
_nop_();
_nop_();
_nop_();
status=0;
while(status==0)
{
status=ADC_CONTR&0x10;
}
ADC_CONTR=0x84;
f=ADC_RES*4+ADC_RESL;
}
void panduan()
{
l=f*49*5;
if(l>200000)
{P0=0x80;}
else
{
if(l>50000)
{
P0=0x01;
flag=1;
}
else
{
P0=0x00;
flag=0;
}
}
}
void display()
{
uchar i;
int a=0,b=0,c=0,d=0;
int number[4]={0,0,0,0};
if(flag==0)
{
l=f*49;
a=(int)l/10000;
b=(int)(l*10-a*100000)/10000;
c=(int)(l*100-a*1000000-b*100000)/10000;
d=(int)(l*1000-a*10000000-b*1000000-c*100000)/10000;
for(i=0;i<4;i++)
{
if(i==3)
{
P3=wei[i];
P2=code72[number[i]];
delay(10);
}
else
{
P3=wei[i];
P2=code71[number[i]];
delay(10);
}
}
}
if(flag==1)
{
if(l<100000)
{
l=f*49*5;
a=(int)l/10000;
b=(int)(l*10-a*100000)/10000;
c=(int)(l*100-a*1000000-b*100000)/10000;
d=(int)(l*1000-a*10000000-b*1000000-c*100000)/10000;
for(i=0;i<4;i++)
{
if(i==3)
{
P3=wei[i];
P2=code72[number[i]];
delay(10);
}
else
{
P3=wei[i];
P2=code71[number[i]];
delay(10);
}
}
}
if(l>=100000)
{
l=f*49*5;
a=(int)l/100000;
b=(int)(l-a*100000)/100000%10;
c=(int)(l*10-a*1000000-b*100000)/100000%10;
d=(int)(l*100-a*10000000-b*100000-c*10000)/100000%10;
number[3]=a;
number[2]=b;
number[1]=c;
number[0]=d;
for(i=0;i<4;i++)
{
if(i==2)
{
P3=wei[i];
P2=code72[number[i]];
delay(10);
}
else
{
P3=wei[i];
P2=code71[number[i]];
delay(10);
}
}
}
}
}
void main()
{
initial();
while(1)
{
AD();
panduan();
AD();
display();
}
}
|
|