單片機串行通信用共陰極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來驅動共陰的數碼管,是驅動不了的,但是應該也能看見微微的亮線,當然你要是外加三極管來驅動的話,當然是完全足夠的。假如一點亮都沒有,那么,應該是電路接錯了,或者代碼搞錯了。

注意!

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



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