用51单片机和ADC0809做电压表如连接能仿真,为什么焊接出来有错,数码管一直闪烁

核心提示根据你的描述,我个人作出如下判断:1、有可能是你的程序写的有误,仿真是一回事,真正运行是另一回事。2、如果你是完全按照图上焊接的,你这个板子其实是不稳定的,为什么呢,因为单片机直接驱动数码管是不够力的,虽然你用的是P0口,但是驱动数码管也很

根据你的描述,我个人作出如下判断:

1、有可能是你的程序写的有误,仿真是一回事,真正运行是另一回事。

2、如果你是完全按照图上焊接的,你这个板子其实是不稳定的,为什么呢,因为单片机直接驱动数码管是不够力的,虽然你用的是P0口,但是驱动数码管也很费力,如果你需要帮忙,可以百度Hi联系我

#include <intrins.h>

#include<reg51.h>

#define uchar unsigned char

#define uint unsigned int

#define ad0_7 P0 //AD数据口

sbit cs=P1^0; //芯片选择信号,控制芯片的启动和结果读取,低电平有效

sbit rd=P1^1; //读数据控制,低电平有效

sbit wr=P1^2; //AD转换起动控制,上升沿有效

sbit intr=P1^3; //AD转换结束输出低电平

unsigned char seg[5]={0,46,0,0,0};

void main(void)

{ uint ad_data;

uint k;

TMOD=0x20;

TH1=0xe6;

TL1=0xe6;

TR1=1;

SCON=0x40;

while(1)

{ cs=0; //允许进行A/D转换

wr=0;_nop_();wr=1; //WR由低变高时,AD开始转换

while(intr); //查询转换结束产生INTR 信号(低电平有效)

cs=1;

ad0_7=0xff;

cs=0; //允许读

rd=0; //读取转换数据结果数据结果

_nop_();

ad_data=ad0_7; //把数据存到ad_data中

rd=1;cs=1; //停止A/D读取

seg[0]=ad_data/51+48; //(最高位)

seg[1]=46;

seg[2]=ad_data%51*10/51+48; //第三位

seg[3]=ad_data%51*10%51*10/51+48; //第二位

seg[4]=ad_data%51*10%51*10%51*10/51+48; //(最低位)

for( k=0;k<=4;k++)

{

SBUF=seg[k];

while(!TI)

TI=0;

}

}

}

 
友情链接
鄂ICP备19019357号-22