找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

帖子
查看: 2385|回復(fù): 1
收起左側(cè)

51單片機(jī)P1^0口led改變狀態(tài),產(chǎn)生脈沖,T0計數(shù)加一數(shù)碼管顯示,T1定時

[復(fù)制鏈接]
ID:436030 發(fā)表于 2018-11-29 20:37 | 顯示全部樓層 |閱讀模式
51單片機(jī)問題求助,P1^0口led改變狀態(tài),產(chǎn)生脈沖,T0計數(shù)加一數(shù)碼管顯示,T1定時數(shù)碼管,正常顯示不了,改了好幾次,不知道哪里錯了,求助,謝謝

  1. #include<reg51.h>
  2. #include<intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. sbit led=P1^0;                //用杜邦線連接p1^0和p3^4
  6. sbit dula=P2^6;
  7. sbit wela=P2^7;
  8. uchar code table[]=(0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f);                //0~9
  9. void delay(uint j)
  10. {
  11.         uint m,n;
  12.         for(m=j;m>0;m--)
  13.         for(n=125;n>0;n--);
  14. }
  15. void display(uchar i)
  16. {                                                                                 
  17.         uchar bai,shi,ge;
  18.         bai=i/100;
  19.         shi=i%100/10;
  20.         ge=i%10;
  21.     P0=0xff;
  22.         wela=1;
  23.         P0=0xfe;
  24.         wela=0;        


  25.     dula=1;
  26.         P0=table[bai];
  27.         dula=0;
  28.         delay(1);


  29.         P0=0xff;
  30.         wela=1;
  31.         P0=0xfd;
  32.         wela=0;

  33.         
  34.         dula=1;
  35.         P0=table[shi];
  36.         dula=0;
  37.         delay(5);

  38.         
  39.         P0=0xff;        
  40.         wela=1;
  41.         P0=0xfb;
  42.         wela=0;
  43.         
  44.         dula=1;
  45.         P0=table[ge];
  46.         dula=0;
  47.         delay(5);
  48. }
  49. void t0Init() //
  50. {
  51.            TR0=1;  
  52.             
  53.         TMOD |=0x05;                        //實現(xiàn)計數(shù)功能
  54.         TH0=0;
  55.         TL0=0;
  56. }
  57. void t1Init()
  58. {
  59.         TR1=1;        
  60.         TMOD |=0x10;
  61.          TH1=0x4b;         //定時50ms
  62.         TL1=0xfd;
  63. }
  64. void main()          //main函數(shù)自身會循環(huán)
  65. {
  66.         uchar mSec;        //毫秒和秒儲存變量
  67.            t0Init() ;
  68.     t1Init() ;
  69.         TH0=0;
  70.         TL0=0;
  71.         while(1)
  72.         {            
  73.                 if(TF1==1)
  74.                 {                        //判斷是否溢出
  75.                         TF1=0;                //軟件清零溢出標(biāo)志位
  76.                         TH1=0x4b;         //定時50ms
  77.                 TL1=0xfd;
  78.                     mSec++;
  79.                         if(mSec==10)
  80.                          {
  81.                                 mSec=0;
  82.                             led=~led;        //產(chǎn)生方波                                
  83.                          }
  84.                                 
  85.                 }
  86.                         
  87.                         display(TL0);//數(shù)碼管顯示函數(shù)
  88.         }
  89. }
復(fù)制代碼


回復(fù)

使用道具 舉報

ID:213173 發(fā)表于 2018-11-30 09:23 | 顯示全部樓層
你的數(shù)組括號用錯了,另外動態(tài)數(shù)碼管顯示程序也有缺陷,亮度不均勻。給你改了下,你試試。

#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit led=P1^0;                //用杜邦線連接p1^0和p3^4
sbit dula=P2^6;
sbit wela=P2^7;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0~9
/*
void delay(uint j)
{
        uint m,n;
        for(m=j;m>0;m--)
                for(n=125;n>0;n--);
}*/
void display(uchar i)
{                                                                                 
        static uchar a=0;
//        uchar bai,shi,ge;
//        bai=i/100;
//        shi=i%100/10;
//        ge=i%10;
        P0=0x00;
        switch(a)
        {
                case 0:
                        P0=0xfe;
                        wela=1;
                        wela=0;
                        P0=table[i/100];
                        dula=1;
                        dula=0;
                        a++;
                break;

                case 1:
                        P0=0xfd;
                        wela=1;
                        wela=0;
                        P0=table[i%100/10];
                        dula=1;
                        dula=0;
                        a++;
                break;
                case 2:
                        P0=0xfb;
                        wela=1;
                        wela=0;
                        P0=table[i%10];
                        dula=1;
                        dula=0;
                        a=0;
                break;
        }
}
void t0Init() //
{
        TMOD |=0x05;     //實現(xiàn)計數(shù)功能
        TH0=0;
        TL0=0;
        TR0=1;
}
void t1Init()
{        
        TMOD |=0x10;
        TH1 = 0xEC;                 //定時5ms
        TL1 = 0x78;
        TR1=1;
}
void main()          //main函數(shù)自身會循環(huán)
{
        uchar mSec;        //毫秒和秒儲存變量
        t0Init() ;
        t1Init() ;
        TH0=0;
        TL0=0;
        while(1)
        {            
                if(TF1==1)
                {                        //判斷是否溢出
                        TF1=0;                //軟件清零溢出標(biāo)志位
                        TH1 = 0xEC;                 //定時5ms
                        TL1 = 0x78;
                        mSec++;
                        if(mSec==100)
                        {
                                mSec=0;
                                led=~led;        //產(chǎn)生方波                                
                        }
                        display(TL0);//數(shù)碼管顯示函數(shù)
                }       
        }
}
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

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