找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2808|回復(fù): 11
打印 上一主題 下一主題
收起左側(cè)

51單片機(jī)想做個(gè)類似秒表的功能,就是不自增 附程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:918402 發(fā)表于 2022-4-7 01:19 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
50黑幣
跟著教程學(xué)習(xí)51單片機(jī),在做練習(xí)的時(shí)候,碰到了難題,原本是想做個(gè)秒表功能,但是只可以一直顯示0.00,不能夠自增計(jì)數(shù)(設(shè)想是從1.00-9.99自增循環(huán)計(jì)數(shù)),搞到半夜也搞不定,測(cè)試過(guò),直接賦值某個(gè)數(shù)字,是可以靜態(tài)顯示的,但就是不自增,只好求教各位前輩!能編譯,沒有錯(cuò)誤,有兩個(gè)警告

單片機(jī)源程序如下:
/*********************************************************************

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

/*
**********************************************************************
*                       本地?cái)?shù)據(jù)類型/宏定義
**********************************************************************
*/
//typedef signed char int8;         //8位有符號(hào)字符型
//typedef signed int int16;         //16位有符號(hào)整型
//typedef signed long int32;        //32位有符號(hào)長(zhǎng)整型
typedef unsigned char uchar;      //8位無(wú)符號(hào)字符型
typedef unsigned int uint;      //16位無(wú)符號(hào)整型
//typedef unsigned long ulong;     //32位無(wú)符號(hào)長(zhǎng)整型

/*
**********************************************************************
*                        單片機(jī)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ù)點(diǎn)的數(shù)組0-9
                        0xed,0xfd,0x87,0xff,0xef};
uint num,dis;


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

/*********************************************************************
*函數(shù)名稱:main
*函數(shù)功能:主函數(shù)
*函數(shù)調(diào)用:
*參數(shù)列表:無(wú)
*返 回 值:無(wú)
*結(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--);

}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:624769 發(fā)表于 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;
}

評(píng)分

參與人數(shù) 1黑幣 +12 收起 理由
xiazhiyu1979 + 12

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

板凳
ID:960157 發(fā)表于 2022-4-7 06:49 | 只看該作者
是否沒有進(jìn)入定時(shí)中斷?
回復(fù)

使用道具 舉報(bào)

地板
ID:310441 發(fā)表于 2022-4-7 07:38 來(lái)自觸屏版 | 只看該作者
樓上凌晨給的代碼可以試試。先解決第一步問(wèn)題。
回復(fù)

使用道具 舉報(bào)

5#
ID:310441 發(fā)表于 2022-4-7 07:41 來(lái)自觸屏版 | 只看該作者
dis在兩個(gè)地方賦值,有可能出問(wèn)題。
回復(fù)

使用道具 舉報(bào)

6#
ID:584814 發(fā)表于 2022-4-7 08:12 | 只看該作者
既然是不自增,且直接賦值顯示正常,那么就在主程序中寫上自增,將中斷不用試試。
如果可以,就是中斷問(wèn)題,可參見器件手冊(cè)上中斷的寫法改了就好。
回復(fù)

使用道具 舉報(bào)

7#
ID:844772 發(fā)表于 2022-4-7 08:42 | 只看該作者
1、你是不是算錯(cuò)了,不是秒表嗎?那應(yīng)該500ms進(jìn)一次中斷, 應(yīng)該改成TH0=(65536-50000)/256;
    TL0=(65536-50000)%256;   
2、你原來(lái)不自增的原因,可能是因?yàn)橛捎陲@示用時(shí)長(zhǎng),num自增的很快在顯示的時(shí)候就超過(guò)了20,所以這句    if(num==20)永遠(yuǎn)通過(guò)不了�?梢杂胕f(20<=num) 修改。
回復(fù)

使用道具 舉報(bào)

8#
ID:918402 發(fā)表于 2022-4-7 09:43 | 只看該作者
glinfei 發(fā)表于 2022-4-7 08:42
1、你是不是算錯(cuò)了,不是秒表嗎?那應(yīng)該500ms進(jìn)一次中斷, 應(yīng)該改成TH0=(65536-50000)/256;
    TL0=(6553 ...

帶小數(shù)點(diǎn)的,所以有兩個(gè)數(shù)組,最一位數(shù)是個(gè)位數(shù),是從0.00-9.99循環(huán)的,所以自增是10個(gè)毫秒一次
回復(fù)

使用道具 舉報(bào)

9#
ID:918402 發(fā)表于 2022-4-7 09:48 | 只看該作者
188610329 發(fā)表于 2022-4-7 04:17
while(1)
         {
         display(dis);

謝謝,數(shù)字至少跳動(dòng)起來(lái)了,我再研究下,現(xiàn)在顯示效果不好,我再看看原因,謝謝了
回復(fù)

使用道具 舉報(bào)

10#
ID:918402 發(fā)表于 2022-4-7 10:17 | 只看該作者
188610329 發(fā)表于 2022-4-7 04:17
while(1)
         {
         display(dis);

按照兄弟的程序,可以跑動(dòng)起來(lái)了,經(jīng)過(guò)調(diào)試,改為65536-9200,時(shí)間基本無(wú)誤差,程序后來(lái)也改成        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++;
回復(fù)

使用道具 舉報(bào)

11#
ID:121859 發(fā)表于 2022-4-7 14:06 | 只看該作者
       if(num>=20)
       {
        num=0;            
        if(dis>=1000)
        dis=0;
        dis++;         

       }           
回復(fù)

使用道具 舉報(bào)

12#
ID:123289 發(fā)表于 2022-4-8 15:41 | 只看該作者
1、先寫一個(gè)程序W_XXX,能從某個(gè)寄存器XXX中取出一個(gè)數(shù)據(jù)顯示。
2、做一個(gè)10ms的定時(shí)器。
3、每次中斷將XXX+1,(進(jìn)行從1.00-9.99自增循環(huán)計(jì)數(shù))。
這樣就OK了。當(dāng)然顯示部分你未提,估計(jì)你會(huì)了,也就不說(shuō)了。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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