久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標(biāo)題: 51單片機想做個類似秒表的功能,就是不自增 附程序 [打印本頁]

作者: xiazhiyu1979    時間: 2022-4-7 01:19
標(biāo)題: 51單片機想做個類似秒表的功能,就是不自增 附程序
跟著教程學(xué)習(xí)51單片機,在做練習(xí)的時候,碰到了難題,原本是想做個秒表功能,但是只可以一直顯示0.00,不能夠自增計數(shù)(設(shè)想是從1.00-9.99自增循環(huán)計數(shù)),搞到半夜也搞不定,測試過,直接賦值某個數(shù)字,是可以靜態(tài)顯示的,但就是不自增,只好求教各位前輩!能編譯,沒有錯誤,有兩個警告

單片機源程序如下:
/*********************************************************************

**********************************************************************
程序名稱:
程序版本:V1.0
作    者:                  
編寫時間:2022年4月6日         
硬件支持:  
接口說明:
修改日志:
    N0.1:
**********************************************************************/
/*
**********************************************************************
*                        頭文件包含/SFR定義
**********************************************************************
*/
#include<reg52.h>

/*
**********************************************************************
*                       本地數(shù)據(jù)類型/宏定義
**********************************************************************
*/
//typedef signed char int8;         //8位有符號字符型
//typedef signed int int16;         //16位有符號整型
//typedef signed long int32;        //32位有符號長整型
typedef unsigned char uchar;      //8位無符號字符型
typedef unsigned int uint;      //16位無符號整型
//typedef unsigned long ulong;     //32位無符號長整型

/*
**********************************************************************
*                        單片機IO口位定義
**********************************************************************
*/
sbit duan=P2^6;
sbit wei=P2^7;
/*
**********************************************************************
*                      本地全局變量/數(shù)組定義
**********************************************************************
*/
uchar code tableduan[]={0x3f,0x06,0x5b,0x4f,0x66,
                        0x6d,0x7d,0x07,0x7f,0x6f};
uchar code tableduana[]={0xbf,0x86,0xdb,0xcf,0xe6,  //帶小數(shù)點的數(shù)組0-9
                        0xed,0xfd,0x87,0xff,0xef};
uint num,dis;


/*
**********************************************************************
*                         函數(shù)原型聲明
**********************************************************************
*/
display(uint);
delay(uchar);

/*********************************************************************
*函數(shù)名稱:main
*函數(shù)功能:主函數(shù)
*函數(shù)調(diào)用:
*參數(shù)列表:無
*返 回 值:無
*結(jié)    果:
*備    注:
*********************************************************************/
void main(void)
{
    EA=1;
    ET0=1;
    TMOD=0x01;
    TH0=(65536-500)/256;
    TL0=(65536-500)%256;   
    TR0=1;

        while(1)
        {
       if(num==20)
       {
        num=0;            
        if(dis==1000)
        dis=0;
        dis++;         

       }           
        display(dis);

        }
}


void time0() interrupt 1
{
    TH0=(65536-500)/256;
    TL0=(65536-500)%256;  
    num++;

}

display(uint dis)
{

    wei=1;
    P0=0xff;
    wei=0;


    P0=tableduana[dis/100];
    duan=1;   
    duan=0;
    wei=1;
    P0=0xfe;
    wei=0;
    delay (10);


    P0=tableduan[dis%100/10];
    duan=1;   
    duan=0;
    wei=1;
    P0=0xfd;
    wei=0;
    delay (10);


    P0=tableduan[dis%100%10];
    duan=1;   
    duan=0;
    wei=1;
    P0=0xfb;
    wei=0;
    delay (10);   
}

delay(uchar x)
{
    uchar a,b;
    for(a=x;a>0;a--)
       for(b=200;b>0;b--);

}


作者: 188610329    時間: 2022-4-7 04:17

        while(1)
         {
         display(dis);
         }
}


void time0() interrupt 1
{
     TH0=(65536-1000)/256;
     TL0=(65536-1000)%256;  
    if(++dis>=1000)       dis=0;
}
作者: wskufo    時間: 2022-4-7 06:49
是否沒有進入定時中斷?
作者: DoneDone    時間: 2022-4-7 07:38
樓上凌晨給的代碼可以試試。先解決第一步問題。
作者: DoneDone    時間: 2022-4-7 07:41
dis在兩個地方賦值,有可能出問題。
作者: man1234567    時間: 2022-4-7 08:12
既然是不自增,且直接賦值顯示正常,那么就在主程序中寫上自增,將中斷不用試試。
如果可以,就是中斷問題,可參見器件手冊上中斷的寫法改了就好。
作者: glinfei    時間: 2022-4-7 08:42
1、你是不是算錯了,不是秒表嗎?那應(yīng)該500ms進一次中斷, 應(yīng)該改成TH0=(65536-50000)/256;
    TL0=(65536-50000)%256;   
2、你原來不自增的原因,可能是因為由于顯示用時長,num自增的很快在顯示的時候就超過了20,所以這句    if(num==20)永遠通過不了。可以用if(20<=num) 修改。
作者: xiazhiyu1979    時間: 2022-4-7 09:43
glinfei 發(fā)表于 2022-4-7 08:42
1、你是不是算錯了,不是秒表嗎?那應(yīng)該500ms進一次中斷, 應(yīng)該改成TH0=(65536-50000)/256;
    TL0=(6553 ...

帶小數(shù)點的,所以有兩個數(shù)組,最一位數(shù)是個位數(shù),是從0.00-9.99循環(huán)的,所以自增是10個毫秒一次
作者: xiazhiyu1979    時間: 2022-4-7 09:48
188610329 發(fā)表于 2022-4-7 04:17
while(1)
         {
         display(dis);

謝謝,數(shù)字至少跳動起來了,我再研究下,現(xiàn)在顯示效果不好,我再看看原因,謝謝了
作者: xiazhiyu1979    時間: 2022-4-7 10:17
188610329 發(fā)表于 2022-4-7 04:17
while(1)
         {
         display(dis);

按照兄弟的程序,可以跑動起來了,經(jīng)過調(diào)試,改為65536-9200,時間基本無誤差,程序后來也改成        while(1)
        {
//       if(num==20)
//       {
//        num=0;            
       if(dis>=1000)
        dis=0;
//       dis++;         
//      }           
        display(dis);

        }
}


void time0() interrupt 1
{
    TH0=(65536-9200)/256;
    TL0=(65536-9200)%256;  
//    if(++dis>=1000)      
//   dis=0;
    dis++;
作者: zhxiufan    時間: 2022-4-7 14:06
       if(num>=20)
       {
        num=0;            
        if(dis>=1000)
        dis=0;
        dis++;         

       }           

作者: yzwzfyz    時間: 2022-4-8 15:41
1、先寫一個程序W_XXX,能從某個寄存器XXX中取出一個數(shù)據(jù)顯示。
2、做一個10ms的定時器。
3、每次中斷將XXX+1,(進行從1.00-9.99自增循環(huán)計數(shù))。
這樣就OK了。當(dāng)然顯示部分你未提,估計你會了,也就不說了。





歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 久久毛片 | 日本a视频 | 国产视频福利一区 | 午夜视频网站 | 日日夜夜天天干 | 日本视频在线 | 99精品国产一区二区三区 | 中文字幕a√ | 麻豆久久久久久久久久 | 欧美成人第一页 | 免费观看www | 欧美一级片在线观看 | 欧美一级观看 | 欧美日韩高清 | 免费看a| 自拍偷拍中文字幕 | a在线观看免费 | 日韩欧美国产一区二区三区 | 亚洲欧美激情精品一区二区 | 成人一区二区三区视频 | 欧区一欧区二欧区三免费 | 亚洲免费网 | 欧美 日本 国产 | 亚洲国产高清在线观看 | 国产一区二区在线免费播放 | 欧美日韩高清一区二区三区 | 久久成人精品视频 | 亚洲精品资源 | 亚洲欧美一区二区三区国产精品 | 精品福利在线 | 国产三区在线观看视频 | 91视频在线观看 | 国产成人免费在线观看 | 免费看a | 美女福利视频一区 | 成年人在线观看 | 一区二区三区国产 | 日韩在线不卡 | 中文字幕一区二区三区四区 | 精品成人佐山爱一区二区 | 亚州精品天堂中文字幕 |