单片机串行通信用共阴极LED怎么就不行?


现做两单片机之间的串行通信仿真实验,当我用共阴极LED时,其显示发生错误,但是当我换成共阳极LED时,其显示正确。用共阴极或共阳极时,其显示段码也换成相应的显示段码。段码应该没有错,因为我用它做LED静态或动态显示时是正确的。
代码如下:
发送程序:
#include<reg52.h>
#include<stdio.h>
#define uchar unsigned char;
//uchar code collect[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};  //共阴极显示段码
uchar code collect[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};   //共阳极显示段码
uchar pf;
void delay();
void initial();
void sendd();
void main()
{
initial();
  while(1)
{
sendd();
}
}

//延时子程序
void delay()
{
long k;
for(k=0;k<10000;k++)
{
}
}

//串行口初始化
void initial()
{
TMOD=0x20;   //定时器工作于方式2
TH1=0xE8;
TL1=0xE8;
TR1=1;   //启动T1
PCON=0x00;
SCON=0x50; //串行口工作在方式1,允许串行接收
}  

//发送数据
void sendd()
{
  int i;
do  //建立串行通信之间连接
{
SBUF=0xaa;   //发送联络信号
while(TI==0);  //等待发送数据
TI=0;
while(RI==0);  //等待对方应答
RI=0;
}while((SBUF^0xbb)!=0);

do
{
pf=0;   //校验和初始化
for(i=0;i<16;i++)  //连续发送一数组
{
SBUF=collect[i];
P0=collect[i]; //显示需要发送的数据
pf=pf+collect[i]; //求校验和
while(TI==0);
TI=0;
delay();
}
SBUF=pf;
while(TI==0);  //发送校验信息
TI=0;
while(RI==0);  //接收反馈信息
RI=0;  
}while(SBUF!=0x00);
}

接收程序:
#include<reg52.h>
#include<stdio.h>
#define uchar unsigned char;
uchar pf; 
void initial()
{
TMOD=0x20;   //定时器工作于方式2
TH1=0xE8;
TL1=0xE8;
TR1=1;   //启动T1
PCON=0x00;
SCON=0x50; //串行口工作在方式1,允许串行接收
}  

void main()
{
int i;
initial();
do
{
while(RI==0); //接收字符
RI=0;
}while((SBUF^0xaa)!=0);   
SBUF=0xbb;
while(TI==0);   //发送确认字符
TI=0;
while(1)    //循环接收
{
pf=0;
for(i=0;i<16;i++) //连续接收10个字符
{
while(RI==0);
RI=0;
P0=SBUF;   //显示接收到的字符
pf=pf+SBUF;  //求校验和
}
while(RI==0);   //接收校验和
RI=0;
if((SBUF^pf)==0)
{
SBUF=0x00; //校验正确发送“0x00”
while(TI==0);
TI=0;
}
else
{
SBUF=0xff;
while(TI==0);
TI=0;
}
}
}

原理图如下:

4 个解决方案

#1


共阳极是灌电流
共阴极是拉电流
51的IO驱动能力不足

#2


你这是c还是c++  怎么不干净

#3


这就看你共阴极和共阳极的电路了,是不是共阴的电路接错了,理论上,假如你直接用IO来驱动共阴的数码管,是驱动不了的,但是应该也能看见微微的亮线,当然你要是外加三极管来驱动的话,当然是完全足够的。假如一点亮都没有,那么,应该是电路接错了,或者代码搞错了。
智能推荐

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
© 2014-2019 ITdaan.com 粤ICP备14056181号  

赞助商广告