找回密码
 立即注册

QQ登录

只需一步,快速开始

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

求助,为什么我的单片机P2口失控了全为高

[复制链接]
跳转到指定楼层
楼主
我想做超声波模块的用超声波模块测距然后计算出来用数码管显示出来,
但是不知道为啥P2口一直为高,main函数里什么都没有的时候还是全高P(P2口和led模块相连)
百思不得其解。
#include <reg52.h>
#include <intrins.h>

#define DISPLAY P0

typedef unsigned char u8;
typedef unsigned int u16;

sbit TX = P2^0;          //超声波模块控制端
sbit RX = P2^1;   //超声波模块接收端

/*138控制口*/
sbit LSA = P2^2;
sbit LSB = P2^3;
sbit LSC = P2^4;

bit flag = 0;

u16 time = 0;
u16 timer = 0;
unsigned long s = 0;

/*数显管段码数组*/
u8 code D[17] = {
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

/*数显管数字位数*/
u8 disbuff[4];

/*数显管显示*/
void display()
{
        u8 i;
        u16 j;       
        for(i = 0;i < 8;i++)
        {       
                switch(i)
                {
                        case (0):
                                  LSA=0;LSB=0;LSC=0; break;//0位
                        case (1):
                            LSA=1;LSB=0;LSC=0; break;//1
                        case (2):
                            LSA=0;LSB=1;LSC=0; break;//2
                        case (3):
                            LSA=1;LSB=1;LSC=0; break;//3
                        case (4):
                            LSA=0;LSB=0;LSC=1; break;//4
                        case (5):
                            LSA=1;LSB=0;LSC=1; break;//5
                        case (6):
                            LSA=0;LSB=1;LSC=1; break;//6
                        case (7):
                            LSA=1;LSB=1;LSC=1; break;//7
                  }               
                DISPLAY = disbuff[i];
                j = 10;
                while(j--);
                DISPLAY = 0x00; //消隐
        }
}

/*距离计算*/
void count()
{
        time = TH0*256 + TL0;
        TH0 = 0;
        TL0 = 0;
        s = (long)(time * 0.17); //换算为厘米
        if(s <= 40 || flag == 1)
        {
                flag = 0;
                disbuff[0] = 0x3f;
                disbuff[1] = 0x50;
                disbuff[2] = 0x50;
                disbuff[3] = 0x79;
        }
        else
        {
                disbuff[3] = D[s/1000];
                disbuff[2] = D[s%1000/100];
                disbuff[1] = D[s%100/10];
                disbuff[0] = D[s%10/1];
        }
}

void T0_timer() interrupt 1
{
        flag = 1;
}                       

void T1_timer() interrupt 3
{
        TH1 = 0xf8;
        TL1 = 0x30;
        display();
        timer++;
        if(timer >= 40)
          {
           timer=0;
           TX=1;                   //80MS
           _nop_();
           _nop_();
           _nop_();
           _nop_();
           _nop_();
           _nop_();
           _nop_();
           _nop_();
           _nop_();
           _nop_();
           _nop_();
           _nop_();
           _nop_();
           _nop_();
           _nop_();
           _nop_();
           _nop_();
           _nop_();
           _nop_();
           _nop_();
           _nop_();
           TX=0;
  }
}

void main()         
{
        TMOD=0x11;     
        TH0=0;
        TL0=0;         
        TH1=0xf8;     
        TL1=0x30;
        ET0=1;            
        ET1=1;      
        TR1=1;      
        EA=1;      
        while(1)
        {
                while(!RX);  
                        TR0=1;      
                while(RX);   
                        TR0=0;   
            count();                          
        }
}


IMG_20200718_155733.jpg (3.65 MB, 下载次数: 23)

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

使用道具 举报

沙发
ID:732794 发表于 2020-7-18 23:33 | 只看该作者
一般51单片机IO口默认输出高电平
回复

使用道具 举报

板凳
ID:761375 发表于 2020-7-19 07:58 | 只看该作者
51FAN2020 发表于 2020-7-18 23:33
一般51单片机IO口默认输出高电平

我都没有定义啊,而且我加P2 = 0x00之后还是全高,平常都不这样
回复

使用道具 举报

地板
ID:146782 发表于 2020-7-19 09:17 | 只看该作者
默认上电高电平,
回复

使用道具 举报

5#
ID:700528 发表于 2020-7-19 09:28 | 只看该作者
程序走飞了或者是芯片坏了
回复

使用道具 举报

6#
ID:805334 发表于 2020-7-19 09:32 | 只看该作者
默认都为高,检查一下程序是否跑飞了
回复

使用道具 举报

7#
ID:420836 发表于 2020-7-20 07:26 | 只看该作者
加载一个小的工作程序,以确保您的开发板正常。
回复

使用道具 举报

8#
ID:471889 发表于 2020-7-20 07:57 | 只看该作者
学编程,要知道有一个东西叫初始化,对于单片机要用到的I/O口,在芯片运行前要设定好其状态,不要到其工作时出现一堆七七八八的问题
回复

使用道具 举报

9#
ID:84000 发表于 2020-7-20 08:16 | 只看该作者
单独对输出高电平的IO口进行测试。默认和芯片坏会造成高电平。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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