標(biāo)題: 51單片機計數(shù)器源程序 [打印本頁]

作者: luo_git_2017    時間: 2017-12-28 09:49
標(biāo)題: 51單片機計數(shù)器源程序
這是我上次實驗做的計數(shù)器的源程序
能夠在單片機機上實現(xiàn)運行的
希望大家多多指教
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char          //數(shù)據(jù)類型宏定義
#define uint unsigned int
#define out  P0                                  //IO端口定義
/*******共陽數(shù)碼管 0 ,  1  ,2  ,3 , 4  ,5  ,6 , 7,  8  ,9 ******/
uchar code seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x01};

uint i = 0;         //全局變量
uint cnt=0;
/***********主函數(shù)*******************************************************/
void main(void)
{
        int j;

        TMOD=0x15;                          // 定時器0工作于計數(shù)方式,工作方式1,16位計數(shù)
                                            // 定時器1工作于定時方式,工作方式1,16位定時
        TH0=0;                                                                // 清零計數(shù)器
        TL0=0;
        TH1=0x4C;                                                        // 12M晶振工作下,定時50ms
        TL1=0x00;
        TR0=1;                                                                // 啟動定時器0
        TR1=1;                                                                // 啟動定時器1
        IE=0x88;                                                        // 打開定時中斷1和總中斷
        while(1)
        {                         
                P2=0x00;                                                  // 輸出百位
                out = seg[cnt/100];       
                P2 = 0x01;
                for(j=0;j<100;j++);

                P2=0x00;
                out = seg[cnt%100/10];                        // 輸出十位
                P2 = 0x02;         
                for(j=0;j<100;j++);          

                P2=0x00;                                               
                out = seg[cnt%10];                                 // 輸出個位
                P2 = 0x04;
                for(j=0;j<100;j++);
        }                  
}

/***********計數(shù)器T0中斷處理函數(shù)******************************************/
void Timer1_ISR() interrupt 3
{
        static char j = 0;
         i++;
        TH1=0x4C;                                                   // 重設(shè)定時器值,50ms @ 12MHz XTAL
        TL1=0x00;
        if(++j == 20)                                           // 50ms * 20 = 1S
        {                          
                j = 0;
                i = (TH0 << 8) | TL0;                   // 1S內(nèi)的計數(shù)值
                cnt=i;
                i=0;
                TH0 = 0;                                           // 清零計數(shù)
                TL0 = 0;         
        }
}


作者: 氓氓~    時間: 2018-1-10 14:26
那要接那個口




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