找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2988|回復(fù): 9
收起左側(cè)

51單片機上電后點平變?yōu)榈碗娖絾栴}

[復(fù)制鏈接]
ID:893265 發(fā)表于 2021-4-2 11:21 | 顯示全部樓層 |閱讀模式
單片機上電后P3.5口應(yīng)該是高電平,但是現(xiàn)在是低電平,硬件電路沒問題,程序如下。求大佬幫我看看程序哪里出問題了。
#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;
         }
        }

回復(fù)

使用道具 舉報

ID:213173 發(fā)表于 2021-4-2 13:37 | 顯示全部樓層
樓主沒有說明芯片型號,不是所有芯片的所有引腳上電都是高電平。但最大可能還是硬件電路問題。

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復(fù)

使用道具 舉報

ID:78827 發(fā)表于 2021-4-2 15:16 | 顯示全部樓層
51芯片有的IO口驅(qū)動能力很弱,需要加上拉
回復(fù)

使用道具 舉報

ID:893265 發(fā)表于 2021-4-2 15:21 | 顯示全部樓層
wulin 發(fā)表于 2021-4-2 13:37
樓主沒有說明芯片型號,不是所有芯片的所有引腳上電都是高電平。但最大可能還是硬件電路問題。

AT89C51單片機,硬件電路我傳上去,你看看
回復(fù)

使用道具 舉報

ID:893265 發(fā)表于 2021-4-2 15:21 | 顯示全部樓層
zs33521 發(fā)表于 2021-4-2 15:16
51芯片有的IO口驅(qū)動能力很弱,需要加上拉

就是這一個口有問題
回復(fù)

使用道具 舉報

ID:893265 發(fā)表于 2021-4-2 15:37 | 顯示全部樓層
2.png
回復(fù)

使用道具 舉報

ID:451718 發(fā)表于 2021-4-2 15:56 | 顯示全部樓層
定時器中斷的使用上,原則上高級別的定時器,選用較短的周期。  你這個程序,定時器0用毫米級別,定時器1用微秒級別。 你有想過這樣用的后果么?   定時器0優(yōu)先中斷處理時,可能會錯過好多次定時器1 的中斷處理。  而且,你在定時器0中還做了display()操作,你的程序不跑飛才怪。!

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復(fù)

使用道具 舉報

ID:893265 發(fā)表于 2021-4-2 16:30 | 顯示全部樓層
robinsonlin 發(fā)表于 2021-4-2 15:56
定時器中斷的使用上,原則上高級別的定時器,選用較短的周期。  你這個程序,定時器0用毫米級別,定時器1用 ...

您好,我是初學(xué)者,有些還不會,所以想問問您,怎么來設(shè)置
回復(fù)

使用道具 舉報

ID:451718 發(fā)表于 2021-4-2 16:40 | 顯示全部樓層
zgk! 發(fā)表于 2021-4-2 16:30
您好,我是初學(xué)者,有些還不會,所以想問問您,怎么來設(shè)置

先從簡單的程序做起, 顯示沒有問題了,再從顯示的基礎(chǔ)上加按鍵控制,按鍵控制沒有問題了,再加入1路PWM輸出控制,1路搞定了, 再搞多路。 循序漸進,從簡到難,不斷思考,不斷總結(jié)歸納。 在不斷增加內(nèi)容的過程中,只要你用心歸納,仔細(xì)思考,反復(fù)驗證, 你一定能夠從中找到答案的。  

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復(fù)

使用道具 舉報

ID:893265 發(fā)表于 2021-4-2 16:44 | 顯示全部樓層
robinsonlin 發(fā)表于 2021-4-2 16:40
先從簡單的程序做起, 顯示沒有問題了,再從顯示的基礎(chǔ)上加按鍵控制,按鍵控制沒有問題了,再加入1路PWM ...

好嘞,謝謝您
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表