電子產(chǎn)業(yè)一站式賦能平臺

PCB聯(lián)盟網(wǎng)

搜索
查看: 2176|回復: 0
收起左側(cè)

單片機C語言實例-330-用數(shù)碼管顯示動態(tài)檢測結(jié)果

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2022-3-29 10:11:17 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
單片機C語言實例-330-用數(shù)碼管顯示動態(tài)檢測結(jié)果

//實例64:用數(shù)碼管顯示動態(tài)檢測結(jié)果
#include<reg51.h>    //  包含51單片機寄存器定義的頭文件
#include<stdlib.h>   //包含隨機函數(shù)rand()的定義文件
unsigned char i;   //記錄中斷次數(shù)
unsigned int x;    //隨機檢測的數(shù)據(jù)
unsigned char code Tab[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};   //數(shù)碼管顯示0~9的段碼表

/***********************************************************************
函數(shù)功能:快速動態(tài)掃描延時,延時約0.9毫秒
************************************************************************/
void delay(void)
{
  unsigned int i;
  for(i=0;i<300;i++)
    ;
}
/***********************************************************************
函數(shù)功能:4位數(shù)的數(shù)碼顯示器顯示
入口參數(shù):k
出口參數(shù):無
************************************************************************/
void display(unsigned int k)   
{

        P2=0xfe;   //即P2=1111 1110B,P2.0引腳輸出低電平,數(shù)碼顯示器DS0接通電源
   P0=Tab[k/1000];        //顯示千位
        delay();   
   P2=0xfd ;  //即P2=1111 1101B,P2.1引腳輸出低電平,數(shù)碼顯示器DS1接通電源
   P0=Tab[(k%1000)/100];          //顯示百位
        delay();
   P2=0xfb;   //即P2=1111 1011B,P2.2引腳輸出低電平,數(shù)碼顯示器DS2接通電源         
   P0=Tab[(k%100)/10];  //顯示十位
         delay();
   P2=0xf7;   //即P2=1111 0111B ,P2.3引腳輸出低電平,數(shù)碼顯示器DS3接通電源               
        P0=Tab[k%10];//顯示個位
        delay();
   P2=0xff;  //關(guān)閉所有顯示器
}

void main(void)     //主函數(shù)
{
                TMOD=0x01;                 //使用定時器T0
                        TH0=(65536-46083)/256;    //將定時器計時時間設(shè)定為46083×1.085微秒=50000微秒=50毫秒
                        TL0=(65536-46083)%256;
                        EA=1;                    //開啟總中斷
                        ET0=1;                   //定時器T0中斷允許
                        TR0=1;                   //啟動定時器T0開始運行
                       
        while(1)
        {
            display(x);   //調(diào)用檢測結(jié)果的顯示程序
         }  
       
}
/********************************************************
函數(shù)功能:定時器T0的中斷服務程序
*******************************************************/

void Time0(void) interrupt 1 using 1
{
    TR0=0;    //關(guān)閉定時器T0
   i++;        //每來一次中斷,i自加1       
        if(i==20)   //夠20次中斷,即1秒鐘進行一次檢測結(jié)果采樣
          {
        x=rand()/10;     //隨機產(chǎn)生一個從0到32767的整數(shù),再將其除以10,獲得一個隨機4位數(shù),模擬檢測結(jié)果
                  i=0;             //將i清0,重新統(tǒng)計中斷次數(shù)
          }          
          TH0=(65536-46083)/256;   //重新給計數(shù)器T0賦初值
        TL0=(65536-46083)%256;
        TR0=1;     //啟動定時器T0
       
}


更多詳情參考附件文檔

游客,如果您要查看本帖隱藏內(nèi)容請回復

回復

使用道具 舉報

發(fā)表回復

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

關(guān)閉

站長推薦上一條 /1 下一條


聯(lián)系客服 關(guān)注微信 下載APP 返回頂部 返回列表