Proteus仿真的AD数模转换相关问题

问题遇到的现象和发生背景

问题是设计一个单片机,采用查询方式对一路模拟电压(0-5v)进行转换,将数据显示在4位LED数码管上,同时也显示在虚拟电压的图标上。当电压超过2.5v时,驱动发光二极管与蜂鸣器发声进行‘报警,表示超限。

用代码块功能插入代码,请勿粘贴截图
#include
unsigned char a[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71},b[4],c=0x01;
sbit START=P2^4;
sbit OE=P2^6;
sbit EOC=P2^5;
sbit add_a=P2^2;
sbit add_b=P2^1;
sbit add_c=P2^0;
sbit led=P2^7;
sbit buzzer=P2^3;
void Delay1ms(unsigned int count)
{
    unsigned int i,j;
    for(i=0;ifor(j=0;j<120;j++);
}

void show()
{
    unsigned int r;
    for(r=0;r<4;r++)
    {
        P1=(c<P3=b[r];
        if(r==2)
        P3=P3 | 0x80;
        Delay1ms(1);
    }
}

void main(void)
{
    unsigned int addata=0,i;
    while(1)
    {
        add_a=0;
        add_b=0;
        add_c=0;
        START=1;
        START=0;
        while(EOC==0)
        {
            OE=0;
        }
        OE=1;
        addata=P0;
        OE=0;
    if(addata>=0x80)
    {
        for(i=0;i<=100;i++)
        {
            led=1;
            Delay1ms(500);
            led=0;
            buzzer=1;
        }
        led=0;
        buzzer=0;
    }
    else
    {
        led=0;
        buzzer=0;
    }
        addata=addata*1.96;
        OE=0;
        b[0]=a[addata%10];
        b[1]=a[addata/10%10];
        b[2]=a[addata/100%10];
        b[3]=a[addata/1000];
        for(i=0;i<=200;i++)
        {
            show();
        }
    }    
}


运行结果及报错内容

img

img

img

将hex文件烧入单片机之后,出不来效果,但是又觉得图和代码都没有问题,希望能得到解答,非常非常感谢!


#include<reg51.h>
unsigned char a[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71},b[4],c=0x01;
sbit START=P2^4;
sbit OE=P2^6;
sbit EOC=P2^5;
sbit add_a=P2^2;
sbit add_b=P2^1;
sbit add_c=P2^0;
sbit led=P2^7;
sbit buzzer=P2^3;
void Delay1ms(unsigned int count)
{
    unsigned int i,j;
    for(i=0;i<count;i++)
    for(j=0;j<120;j++);
}

void show()
{
    unsigned int r;
    for(r=0;r<4;r++)
    {
        P1=(c<<r);
        P3=b[r];
        if(r==2)
        P3=P3 | 0x80;
        Delay1ms(1);
    }
}

void main(void)
{
    unsigned int addata=0,i;
    while(1)
    {
        add_a=0;
        add_b=0;
        add_c=0;
        START=1;
        START=0;
        while(EOC==0)
        {
            OE=0;
        }
        OE=1;
        addata=P0;
        OE=0;
    if(addata>=0x80)
    {
        for(i=0;i<=100;i++)
        {
            led=1;
            Delay1ms(500);
            led=0;
            buzzer=1;
        }
        led=0;
        buzzer=0;
    }
    else
    {
        led=0;
        buzzer=0;
    }
        addata=addata*1.96;
        OE=0;
        b[0]=a[addata%10];
        b[1]=a[addata/10%10];
        b[2]=a[addata/100%10];
        b[3]=a[addata/1000];
        for(i=0;i<=200;i++)
        {
            show();
        }
    }    
}

单片机不供电?

img