標(biāo)題: 有人能不能幫忙看一下這個(gè)數(shù)碼管秒表為什么錯(cuò)了 [打印本頁]

作者: wsn495682877    時(shí)間: 2018-12-26 22:19
標(biāo)題: 有人能不能幫忙看一下這個(gè)數(shù)碼管秒表為什么錯(cuò)了
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int

#define PIN0 P0  //êyÂë1ü¶ÎÑ¡¶Ë
#define PIN1 P1  //êyÂë1üλѡ¶Ë

sbit start=P2^7;  //Æô¶ˉ/ÔYí£°′Å¥
sbit reset=P2^6;  //¸′λ°′Å¥

uint cnt=0;   //1sμÄ′ÎêyμļÆêyÖμ
uint num=0;     //½øèëÖD¶Ï′ÎêyμļÆêyÖ죨ò»′Î50ms£©

uchar code table[]={0x3f,0x06,0x5b,
0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f};
//2»′øD¡êyμãμÄ12òõ¼«êyÂë1ü¶ÎÂë0-9


void Display(uint a,uint b,uint c,uint d);  //éùÃ÷ÏÔê¾oˉêy
void InitTimer0();  //éùÃ÷¶¨ê±Æ÷3õê¼»ˉoˉêy
void Delayms(uint x);  //éùÃ÷Ñóê±oˉêy

void main()
{
        uint g,s,b,q=0;
        //òà′ÎêǸöê®°ùǧ
        InitTimer0();          //3õê¼»ˉ¶¨ê±Æ÷
        while(1)                        //½øèëËàÑ-»·
{       
        if(start==0)   //¼ì2aÆô¶ˉ/ÔYí£¼üêÇ·ñ°′ÏÂ
                        Delayms(20); //Ñóê±Ïû¶¶
        {
                if(start==0)  //Ïû¶¶Ö®oóÔù′μì2a
                {
                        TR0=!TR0;                //¶¨ê±Æ÷μÄ¿ØÖÆÎ»è¡·′
                        while(!start);  //μè′y°′¼üêí·Å
                }
        }
       
if(reset==0)  //¼ì2a¸′λ¼üêÇ·ñ°′ÏÂ
{
        Delayms(20);        //Ñóê±Ïû¶¶
        if(reset==0)          //Ïû¶¶Ö®oóÔù′μì2a
        {
                num=0;               
                cnt=0;                //ÃëμļÆêyÖμÇå0
                while(!reset);                 //μè′y°′¼üêí·Å
        }
}
       
        if(num>=20)  //ÅD¶Ï¼Æê±ê±¼äêÇ·ñ′ïμ½1s£¨20¸ö50ms£©
        {
                num=0;     //½øèëÖD¶Ï′ÎêyÖμÖÃ0
                cnt++;                 //ÃëμļÆêyÖμ¼ó1
                if(cnt>=9999) //ÅD¶ÏêÇ·ñ′ïμ½9999s
                {
                        TR0=!TR0;                        //′ïμ½9999sÔò1رն¨ê±Æ÷2¢ÇåáãËùóDμļÆêyÖμ
                        num=0;
                        cnt=0;
                       
                }
        }       
        g=cnt%10;          //′óÃëμļÆêyÖμàïÃæ·ÖàëÃëμĸöλ
        s=cnt/10%10;         //′óÃëμļÆêyÖμàïÃæ·ÖàëÃëμÄê®Î»
        b=cnt/100%10;        //′ó·ÖμļÆêyÖμàïÃæ·Öàë·Öμĸöλ
        q=cnt/1000%10;
       
        Display(g,s,b,q);  //ÏÔê¾Õa4¸öêy
}       
}

void InitTimer0() //¶¨ê±Æ÷3õê¼»ˉoˉêy
{
       
        TMOD=0x01; //Ñ¡Ôñ¶¨ê±Æ÷0μÄ1¤×÷·½ê½1
        TH0=(65536-45872)/256;  //×°3õÖ죨¶¨ê±50ms£©,¾§Õñ11.0592MHz
        TL0=(65536-45872)%256;
        EA=1;                //′ò¿a×üÖD¶Ï
        ET0=1;        //′ò¿a¶¨ê±Æ÷ÖD¶Ï
        TR0=0;        //Ïè2»òaÆô¶ˉ¶¨ê±Æ÷
       
}

void TIMER0()  interrupt 1  //¶¨ê±Æ÷ÖD¶Ï·tÎñoˉêy
{
        TH0=(65536-45872)/256;  //֨װ3õÖμ
        TL0=(65536-45872)%256;
        num++;                //èýøèëÖD¶Ï′ÎêyÖμ¼ó1£¬óÃóúÅD¶ÏêÇ·ñ′ïμ½1s
}

void Delayms(uint x)   //Ñóê±xms
{
        uint i,j;
        for(i=x;i>0;i--)
                for(j=110;j>0;j--);
}

void Display(uint a,uint b,uint c,uint d) //¶¨òåÏÔê¾oˉêy
{       
        PIN0=table[a]; //ÃëμĸöλμĶÎÑ¡
        PIN1=0x0e;                 //ÃëμĸöλμÄλѡ
        Delayms(5);                       
       
        PIN0=table[b];  //ÃëμÄê®Î»μĶÎÑ¡
        PIN1=0x0d;                        //ÃëμÄê®Î»μÄλѡ
        Delayms(5);
       
        PIN0=table[c];  //·ÖμĸöλμĶÎÑ¡
        PIN1=0x0b;                         //·ÖμİùλμÄλѡ
        Delayms(5);
               
        PIN0=table[d];                //·ÖμÄê®Î»μĶÎÑ¡
        PIN1=0x07;                                //·ÖμÄǧλμÄλѡ
        Delayms(5);               
               
}


作者: 殺死比亞    時(shí)間: 2018-12-27 09:14
void InitTimer0() //?¨ê±?÷3?ê??ˉoˉêy
{
        
        TMOD=0x01; //?????¨ê±?÷0μ?1¤×÷·?ê?1
        TH0=(65536-45872)/256;  //×°3??죨?¨ê±50ms£?,?§??11.0592MHz
        TL0=(65536-45872)%256;
        EA=1;                //′ò?a×ü?D??
        ET0=1;        //′ò?a?¨ê±?÷?D??
        TR0=0;        //?è2?òa???ˉ?¨ê±?÷
        
}
改為void InitTimer0() interrupt 1     //沒有“interrupt ”
{        
    //    TMOD=0x01; //定時(shí)器的方式寫在主函數(shù)里面,這里可以不用再寫
        TH0=(65536-45872)/256;
        TL0=(65536-45872)%256;
   //     EA=1;               //總中斷也是寫在主函數(shù)里面
    //   ET0=1;        //′這些都應(yīng)該寫在主函數(shù)里面?
     //  TR0=0;        //寫在主函數(shù)里面
        
}
作者: 殺死比亞    時(shí)間: 2018-12-27 09:17
void InitTimer0() //?¨ê±?÷3?ê??ˉoˉêy
{
        
        TMOD=0x01; //?????¨ê±?÷0μ?1¤×÷·?ê?1
        TH0=(65536-45872)/256;  //×°3??죨?¨ê±50ms£?,?§??11.0592MHz
        TL0=(65536-45872)%256;
        EA=1;                //′ò?a×ü?D??
        ET0=1;        //′ò?a?¨ê±?÷?D??
        TR0=0;        //?è2?òa???ˉ?¨ê±?÷
        
}
改為
void InitTimer0() interrupt 1  //“interrupt 1”是寫中斷函數(shù)必不可少的
{
        
        TMOD=0x01; //   方式應(yīng)該寫在主函數(shù)里面
        TH0=(65536-45872)/256;  //×°3??죨?¨ê±50ms£?,?§??11.0592MHz
        TL0=(65536-45872)%256;
        EA=1;                //′總中斷也應(yīng)該寫在主函數(shù)里?
        ET0=1;        //寫在主函數(shù)里面
        TR0=0;        //?寫在主函數(shù)里面
        
}
作者: 殺死比亞    時(shí)間: 2018-12-27 09:20
具體是什么情況
作者: 1092648746    時(shí)間: 2018-12-27 11:01
大哥,能轉(zhuǎn)換下編碼再發(fā)上來嗎?注釋全都亂碼,這樣看很辛苦……
然后描述下具體現(xiàn)象?
作者: jll586    時(shí)間: 2018-12-27 11:41
if(reset==0)  
                {
                Delayms(20);      
                if(reset==0)         
                {
                        num=0;               
                        cnt=0;               
                    while(!reset);               
                }
既然是重設(shè)就應(yīng)該將定時(shí)器關(guān)閉

if(start==0)   
        Delayms(20);
        {
                if(start==0)  
                {
                        TR0=!TR0;   
                        while(!start);
                }
        }
當(dāng)在到這里時(shí)候本來定時(shí)器就開著,按一下開始鍵又給定時(shí)器關(guān)了

之前我也寫過秒表的,其中延時(shí)函數(shù)也特別重要,延時(shí)不對也會(huì)造成各種困擾

作者: 周超然    時(shí)間: 2018-12-27 12:44
把keil設(shè)置下,百度網(wǎng)上有,簡體中文的在發(fā)上來給大家解決




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1