找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2988|回复: 9
收起左侧

51单片机上电后点平变为低电平问题

[复制链接]
ID:893265 发表于 2021-4-2 11:21 | 显示全部楼层 |阅读模式
单片机上电后P3.5口应该是高电平,但是现在是低电平,硬件电路没问题,程序如下。求大佬帮我看看程序哪里出问题了。
#include <reg51.h>
#define uchar unsigned char
#define uint  unsigned int
void displaym();
void displayj();

sbit en=P2^0;                             
sbit rs=P2^1;                       
sbit rw=P2^2;               
sbit num1=P1^0;                                                   
sbit num2=P1^1;                                             
sbit num3=P1^2;                                             
sbit num4=P1^3;                                                   
sbit num5=P1^4;                    
sbit num6=P1^5;              
sbit num7=P1^6;              
sbit num8=P1^7;              
sbit num9=P3^7;              


sbit out0=P2^3;                                                         
sbit out1=P2^4;                                 

sbit out2=P2^6;                                                         
sbit out3=P3^0;              

sbit out4=P3^3;                                                         
sbit out5=P3^4;              

sbit out6=P3^5;                                                         
sbit out7=P3^6;              


uint zhuansu,flag1,flag2,flag3,flag4,z1,z2,m1,m2,m3,m4,
flag_1,flag_2,flag_3,flag_4,AZ,BZ,CZ,DZ,kai,j,su;




void delay(uint z)
{

uint x,y;
for(x=0;x<z;x++)
     for(y=0;y<110;y++);
}



void write_com(uchar com)
{
  rs=0;
  P0=com;
  delay(5);
  en=1;
  delay(10);
  en=0;
}
void write_data(uchar date)
{
  rs=1;
  P0=date;
  delay(5);
  en=1;
  delay(5);
  en=0;
}
void init()
{
  en=0;
  rw=0;
  write_com(0x38);                                          
  write_com(0x0c);                              
  write_com(0x01);            
  TMOD=0x11;                  
  TH0=0xdc;
  TL0=0x00;                    
        EA=1;                        
  ET0=1;                       
  TR0=1;  
  EX1=1;
  IT1=1;                       
        TH1=0xfc;
        TL1=0x66;
        ET1=1;                  
  TR1=1;
  write_com(0x80);
  write_data('V');
  write_data(':');
  write_com(0x87);                 
  write_data('m');
  write_data('/');
  write_data('m');
        write_data('i');
        write_data('n');
  write_com(0xc0);
  write_data('z');
  write_data('k');
  write_data('b');
  write_data(':');
  displaym();
        write_com(0xc8);
        write_data('s');
        write_data('d');
        write_data(':');
        displayj();
}




void keyscan()  
{
  if(num1==0)     
  {
    delay(5);      
         if(num1==0)
         {
                if(m1<=100)
                 m1++;
                        displaym();                                                                  
     }
  }
          if(num2==0)
  {
    delay(5);
         if(num2==0)
         {
                  if(m1>=1)
                m1--;
                        displaym();                                       
                 }
  }
      
   if(num3==0)     
  {
    delay(5);      
         if(num3==0)
         {
                if(m2<=100)
                 m2++;
                        displaym();                                                                  
     }
  }
   if(num4==0)
   {
    delay(5);
         if(num4==0)
         {
                  if(m2>=1)
                m2--;
                        displaym();                                       
                 }
  }

         if(num5==0)     
   {
    delay(5);      
         if(num5==0)
         {
         if(m3<=100)
                  m3++;
                        displaym();                                                                  
     }
  }
  if(num6==0)
  {
    delay(5);
         if(num6==0)
         {
                  if(m3>=1)
                m3--;
                        displaym();                                       
      
         }
  }
        if(num7==0)     
  {
    delay(5);      
         if(num7==0)
         {
                if(m4<=100)
                 m4++;
                        displaym();                                                                  
     }
  }
  if(num8==0)
  {
    delay(5);
         if(num8==0)
         {
                  if(m4>=1)
                m4--;
                        displaym();                                       
      
         }
  }
         if(num9==0)
  {
    delay(5);
         if(num9==0)
         {
         while(num9==0)         ;
          kai=1-kai;
         }
  }
}
void display()
{
  write_com(0x82);
  zhuansu=zhuansu*30;         

        su=zhuansu*0.01*2*3.14/2;


  write_com(0xd0);
}
void displaym()
{
write_com(0xc4);
   if(m1/200%10!=0)
  write_data(m1/200%10+0x30);                           
  else
  write_data(' ');

  if(m1/200%10==0&&m1/20%10==0)
  write_data(' ');
  else
  write_data(m1/20%10+0x30);                                 

  write_data(m1/2%10+0x30);                                 
}

void displayj()
{      
write_com(0xcb);
   if(j/100%10!=0)
  write_data(m1/100%10+0x30);                          
  else
  write_data(' ');

  if(j/100%10==0&&j/10%10==0)
  write_data(' ');
  else
  write_data(j/10%10+0x30);                                 

  write_data(j/1%10+0x30);
  write_com(0xd0);      

}


void main()
{
    flag_1=0;
          flag_2=0;
          flag_3=0;
          flag_4=0;
      
        m1=10;                                                         
        m2=10;      
        m3=10;      
        m4=10;      
        zhuansu=0;                                          
        flag1=0;
        flag2=0;
        flag3=0;
        flag4=0;
      
        AZ=1;                                 
        BZ=1;         
        CZ=1;         
        DZ=1;         
               
   j=67;
   init();              

        while(1)
        {
        keyscan();                                
    if(su>j*10)
                        {
                                kai=0;
                                delay(500);      
                                kai=1;
      
                        }         


         
        }

}
void int1()interrupt 2                                
{
  zhuansu++;
}
void int2()interrupt 1                                 
{

  TH0=0xdc;
  TL0=0x00;
  flag1++;
  flag2++;
        flag3++;
        flag4++;
  if(flag1==200)                                   
    {
        display();                                       
        zhuansu=0;                                          
        flag1=0;

                }                       
  if(flag2==200)                                   
    {
        display();                                       
        zhuansu=0;                                          
        flag2=0;
               
                }                 
  if(flag3==200)                                   
    {
        display();                                       
        zhuansu=0;                                          
        flag3=0;
               
                }                       
  if(flag4==200)                                   
    {
        display();                                       
        zhuansu=0;                                          
        flag4=0;
                       
        }


}
               
void int3() interrupt 3                                         
{

  TH1=0xff;
  TL1=0x10;
          flag_1++;
          flag_2++;
          flag_3++;
          flag_4++;
      
        if(flag_1>100)
        flag_1=1;
      
        if(flag_2>100)
        flag_2=1;
      
        if(flag_3>100)
        flag_3=1;
      
        if(flag_4>100)
        flag_4=1;
      
        if(kai==1)                  
        {
               
        if(AZ==1)                                
        {
        if(flag_1<m1)                                          
     {
                         out0=0;
             out1=1;
                 }
         else
         {
           out0=1;
           out1=1;
         }
         }
               
if(BZ==1)                                
        {
        if(flag_2<m2)                                          
     {
                         out2=0;
             out3=1;
                 }
         else
         {
           out2=1;
           out3=1;
         }
         }


if(CZ==1)                                
        {
        if(flag_3<m3)                                          
     {
                         out4=0;
             out5=1;
                 }
         else
         {
           out4=1;
           out5=1;
         }
         }

if(DZ==1)                                
        {
        if(flag_4<m4)                                          
     {
                         out6=0;
             out7=1;
                 }
         else
         {
           out6=1;
           out7=1;
         }
         }
}
         if(kai==0)                          
         {
           out0=1;
           out1=1;
           out2=1;
                 out3=1;
                 out4=1;
                 out5=1;
                 out6=1;
                 out7=1;
         }
        }

回复

使用道具 举报

ID:213173 发表于 2021-4-2 13:37 | 显示全部楼层
楼主没有说明芯片型号,不是所有芯片的所有引脚上电都是高电平。但最大可能还是硬件电路问题。

评分

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

查看全部评分

回复

使用道具 举报

ID:78827 发表于 2021-4-2 15:16 | 显示全部楼层
51芯片有的IO口驱动能力很弱,需要加上拉
回复

使用道具 举报

ID:893265 发表于 2021-4-2 15:21 | 显示全部楼层
wulin 发表于 2021-4-2 13:37
楼主没有说明芯片型号,不是所有芯片的所有引脚上电都是高电平。但最大可能还是硬件电路问题。

AT89C51单片机,硬件电路我传上去,你看看
回复

使用道具 举报

ID:893265 发表于 2021-4-2 15:21 | 显示全部楼层
zs33521 发表于 2021-4-2 15:16
51芯片有的IO口驱动能力很弱,需要加上拉

就是这一个口有问题
回复

使用道具 举报

ID:893265 发表于 2021-4-2 15:37 | 显示全部楼层
2.png
回复

使用道具 举报

ID:451718 发表于 2021-4-2 15:56 | 显示全部楼层
定时器中断的使用上,原则上高级别的定时器,选用较短的周期。  你这个程序,定时器0用毫米级别,定时器1用微秒级别。 你有想过这样用的后果么?   定时器0优先中断处理时,可能会错过好多次定时器1 的中断处理。  而且,你在定时器0中还做了display()操作,你的程序不跑飞才怪!!!

评分

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

查看全部评分

回复

使用道具 举报

ID:893265 发表于 2021-4-2 16:30 | 显示全部楼层
robinsonlin 发表于 2021-4-2 15:56
定时器中断的使用上,原则上高级别的定时器,选用较短的周期。  你这个程序,定时器0用毫米级别,定时器1用 ...

您好,我是初学者,有些还不会,所以想问问您,怎么来设置
回复

使用道具 举报

ID:451718 发表于 2021-4-2 16:40 | 显示全部楼层
zgk! 发表于 2021-4-2 16:30
您好,我是初学者,有些还不会,所以想问问您,怎么来设置

先从简单的程序做起, 显示没有问题了,再从显示的基础上加按键控制,按键控制没有问题了,再加入1路PWM输出控制,1路搞定了, 再搞多路。 循序渐进,从简到难,不断思考,不断总结归纳。 在不断增加内容的过程中,只要你用心归纳,仔细思考,反复验证, 你一定能够从中找到答案的。  

评分

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

查看全部评分

回复

使用道具 举报

ID:893265 发表于 2021-4-2 16:44 | 显示全部楼层
robinsonlin 发表于 2021-4-2 16:40
先从简单的程序做起, 显示没有问题了,再从显示的基础上加按键控制,按键控制没有问题了,再加入1路PWM ...

好嘞,谢谢您
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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