標題: (分享設(shè)計)通過51單片機定時器1實現(xiàn)99秒倒計時 [打印本頁]

作者: 海闊天空2015    時間: 2015-7-9 21:12
標題: (分享設(shè)計)通過51單片機定時器1實現(xiàn)99秒倒計時
今天剛剛完成了一個新的單片機實驗,犯了一個小小的錯誤,導致不能夠倒計時,弄了幾個小時, 結(jié)果發(fā)現(xiàn)是變量的取值范圍出錯了
任何一個實驗都應該自己動手去實踐,沒有實踐是不知道自己少了什么的。只有實踐才能夠獲得更多的調(diào)試經(jīng)驗!
程序雖小,但只要實際去做了,就能獲得不少的經(jīng)驗! 這就是做復雜程序的基礎(chǔ)!
共享自己寫的程序,畢竟是自己勞動了幾個小時的結(jié)果!與大家分享!
程序太小了,就沒有多少注釋了電路圖 詳見:http://www.torrancerestoration.com/f/ks51.pdf
/******************************************************
                    項目名稱:99秒倒計時
                    時間:2015-7-9
                    目的:使用51單片機的定時器1實現(xiàn)99秒倒計時
                    單片機平臺:KST51單片機開發(fā)平臺-金沙灘單片機
                    注意:unsigned char 的取值范圍為0-255
                                unsigned char 的取值范圍為0-65535
                                要結(jié)合單片機的硬件來看程序
**********************************************************/

#include<reg52.h>

sbit ADDR3 = P1^3;
sbit ENLED = P1^4;

unsigned int sec = 99;

unsigned char code LedChar[] ={
    0xC0,0xF9,0xA4,0xB0,0x99, 0x92,0x82,0xF8,
    0x80,0x90,0X88,0x83,0XC6,0xA1,0x86,0x8E
};

unsigned char LedBuff[6] = {
    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
};


void LedScan()   //此函數(shù)實現(xiàn)Led的動態(tài)掃描
{
    static unsigned char i = 0;
   
    P0 = 0xFF;
    P1 = (P1 & 0xF8)| i;
    P0 = LedBuff[ i];
    if(i < 2)
        i++;
    else
        i = 0;
}

void main()
{
   
   
    ENLED =  0;
    ADDR3 = 1;
   
    //定時器寄存器初始化
    TMOD = 0X01;  
    TH0 = 0xFC;    //1 ms定時
    TL0 = 0x67;
    EA = 1;
    ET0 = 1;
    TR0 = 1;
   
    while(1)
    {
        LedBuff[0] = LedChar[sec % 10];
        LedBuff[1] = LedChar[sec/10 %10];
    }
   
}

//中斷服務函數(shù)
void InterruptTimer0() interrupt 1
{
    static unsigned int cnt = 0;
   
    //Range of "unsigned char" is 0 to 255
    //Range of "unsigned int"  is 0 to 65535
   
    TH0 = 0xFC;
    TL0 = 0x67;
    cnt++;   
    LedScan();
   
    if(cnt >= 1000)
    {
        cnt = 0;
        if(sec >0)
            sec --;
        else
            sec = 99;
    }
   
}

在實際運行中發(fā)現(xiàn)第一次計時后重新上初值時會顯示“55”,剛才程序已經(jīng)更正了
作者: 海闊天空2015    時間: 2015-7-9 21:30
給管理員造成重復的勞動感到抱歉
作者: lianlian    時間: 2015-7-9 21:35
以前曾經(jīng)犯過同樣的錯誤,先收藏了,謝謝樓主分享,以免以后再犯.
作者: jiakuo25    時間: 2015-7-9 21:59
都犯過 我也犯過這樣的錯誤 呵呵




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