找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5382|回复: 16
打印 上一主题 下一主题
收起左侧

串口通信,仿真成功,实际失败,数码管都没亮

[复制链接]
跳转到指定楼层
楼主
#include<REG52.H>
#define uchar unsigned char
#define uint unsigned int
uchar code a1[]={"ok#"};
uchar code a2[]={"..>>OK#"};
uchar code a3[]={"..well#"};
int data b1[10];
int data b2[8]={0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7};
int q=0;
uchar code *p;
void delay(uint k)
  {
  uint data i,j;
  for(i=0;i<k;i++)
  {
  for(j=0;j<121;j++){;}
  }
}
void send(uchar code *a)
{
int m=0;
while(a[m]!=0x23)
{
SBUF=a[m];
m++;
while(TI==0);
TI=0;
delay(100);
}
m=0;
}
void send1(int data *c)
{
int q=0;
while(c[q]!=0)
{
SBUF=c[q];

q++;
while(TI==0);
TI=0;
delay(100);
}
q=0;
}
void read(int data *b)
{
int n=0;
  while(n<1)
        {
        if(P1==0xFE) //1
   {
    b[n]=0x31;
    n++;
   }
        if(P1==0xFD) //2
   {
    b[n]=0x32;
    n++;
   }
        if(P1==0xFB) //3
   {
    b[n]=0x33;
    n++;
   }
           if(P1==0xF7) //4
   {
    b[n]=0x34;
    n++;
   }
        if(P1==0xEF) //5
   {
    b[n]=0x35;
    n++;
   }
           if(P1==0xDF) //6
   {
    b[n]=0x36;
    n++;
   }
           if(P1==0xBF) //7
   {
    b[n]=0x37;
    n++;
   }
           if(P1==0x7F) //8
   {
    b[n]=0x38;
    n++;
   }
           if(P1==0xFC) //9
   {
    b[n]=0x39;
    n++;
   }
           if(P1==0xF9) //0
   {
    b[n]=0x30;
    n++;
   }
}
b[n]=0;
}
int read1(int data *d,int data f)
{  uchar t;
   t=SBUF;
   if(t==0x31)
   { d[f]=0xF9;
send(a2);
}
if(t==0x32)
{ d[f]=0xA4;
send(a3);
}
if(t==0x33)
{d[f]=0xB0;
}
if(t==0x34)
{d[f]=0x99;
}
if(t==0x35)
{d[f]=0x92;
  }
if(t==0x36)
{d[f]=0x82;
}
if(t==0x37)
{d[f]=0xF8;
  }
  if(t==0x38)
  {d[f]=0x80;  
   }
   if(t==0x39)
   {d[f]=0x90;  
   }
   if(t==0x30)
   {d[f]=0xC0;


      }       
   return(d[f]);  
   }
void send2(int e)
{
P0=e;
P2=q;
delay(100);
}
void main(void)
{
  int h=-1;
TMOD=0x20;
TL1=0xFD;
TH1=0xFD;
TR1=1;
SCON=0x50;
p=a1;
send(p);
while(1)
{for(q=0;q<8;q++)
         {send2(b2[q]);
  if(P1!=0xFF)
  {delay(10);
                if(P1!=0xFF)         //按键
                {
                read(b1);
  send1(b1);
                }
        }  
if(RI==1)                                 //数码管修改
{        RI=0;
   b2[h]=read1(b2,h);
   h++;       
   if(h==8)
   {h=-1;}

}
}
}
}


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:214151 发表于 2017-6-24 00:06 | 只看该作者
仿真时接的是右下角虚拟终端。实物连接一开始数码管还有显示,时断时续,重焊接了一下就完全炸了。

锕锕.GIF (460.47 KB, 下载次数: 124)

锕锕.GIF

不变.GIF (617.1 KB, 下载次数: 132)

不变.GIF
回复

使用道具 举报

板凳
ID:34643 发表于 2017-6-24 06:54 | 只看该作者
重点检查硬件电路,很可能是硬件电路焊接存在问题。
回复

使用道具 举报

地板
ID:140371 发表于 2017-6-24 08:28 | 只看该作者
實物連接-數碼管有顯示時斷時續應該是程式有bug
重焊一下完全炸了應該是硬件有問題.....這需要靠自己量測
首先應該處理硬件的問題....將data b2[]的內容改成數碼管可以顯示的自形,測試硬件;
等到硬件正常後再來修正程式的bug .......
回复

使用道具 举报

5#
ID:82765 发表于 2017-6-24 08:50 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

6#
ID:214151 发表于 2017-6-24 18:33 | 只看该作者
谢谢,现在数码管好用了,能亮了。
但是通讯还是没反应。串行通讯时,在串口通讯助手里发送字符没有反应,单片机按键按下去也没有接受。
max232查了输入正极5v,负极0v,v+,v-之间为16v,好像没问题。但我不知道com口怎么测,测出来发送线和接受线是-7v左右,不知道是不是意味着没输出。我仿真的时候用的是proteus,用虚拟终端模拟的PC,不确定程序是不是真的好使。
回复

使用道具 举报

7#
ID:214303 发表于 2017-6-24 19:04 | 只看该作者
电压问题
回复

使用道具 举报

8#
ID:214307 发表于 2017-6-24 19:23 | 只看该作者
同问,怎么解决?
回复

使用道具 举报

9#
ID:214309 发表于 2017-6-24 19:36 | 只看该作者
硬件哪里有问题啊?我也没看出来
回复

使用道具 举报

10#
ID:140371 发表于 2017-6-24 21:57 | 只看该作者
當Reset c.後串口會接收到 OK字符.....當按下按鍵後串口會一直傳送該按鍵......如按下按鍵1 後串口會一直重複傳送1這個字符......無法再接收其他的按鍵......
回复

使用道具 举报

11#
ID:140371 发表于 2017-6-24 22:12 | 只看该作者
用Keil debug  模式下的結果......
當reset 後串口會送出"OK"這兩個字符.....按下按鍵後串口會一直傳送該按件值.....
如果用串口程式沒有接收到ok這兩個字符那代表應件接線還是有問題.....
應先讓硬件正常後.....在來修正程式中的BUG......

评分

参与人数 1黑币 +50 收起 理由
admin + 50 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

12#
ID:215061 发表于 2017-6-27 11:38 | 只看该作者
遇到问题首先分析问题的源头!各种功能最好要分开测试,以免混乱!你这个最好先测试好LED数码管!让数码管显示一个固定的数值,然后测试串口,并显示在数码管上面
回复

使用道具 举报

13#
ID:111634 发表于 2017-6-27 19:44 | 只看该作者
90%硬件问题
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表