亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码

標題: proteus仿真數字頻率計存在的問題 [打印本頁]

作者: 417763317    時間: 2019-4-28 10:31
標題: proteus仿真數字頻率計存在的問題
仿真數字頻率計時1khz以下正常顯示,超過1khz數碼管顯示就出現閃爍。這是怎么回事?
#include <reg51.H> // 包含頭文件
unsigned char code dispbit[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//定義數碼管位選碼
unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,
                               0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40};        //定義數碼管段碼
unsigned char dispbuf[8]={0,0,0,0,0,0,0,0};//顯示數碼組,因為只用了六個數碼管,所以將最后兩位賦值為10,對應的段碼為0x00,表示不亮。
unsigned char temp[8];//暫存數組
unsigned char dispcount;//掃描位的記錄
unsigned char T0count;//計數次數
unsigned char timecount;//定時器5ms中斷的次數
bit flag; //定義標志位
unsigned long x; //定義變量用來存放頻率值

void main(void)        //主函數
{
  unsigned char i;//定義變量

  TMOD=0x15; //設置定時工作模式        T1為定時1模式,T0為計數器1模式
  TH0=0; //        計數器高8位賦值為0
  TL0=0;// 計數器低8位賦值為0  所以最大可以輸入65535
  TH1=(65536-5000)/256;// 定時器1高8位賦初值
  TL1=(65536-5000)%256;// 定時器1低8位賦初值
  TR1=1;//啟動定時器1
  TR0=1;// 啟動計數器0
  ET0=1;//開啟定時器0中斷
  ET1=1;// 開啟定時器1中斷
  EA=1;//開啟總中斷

  while(1)//  大循環
   {
     if(flag==1)// 如果定時時間到1s
       {
         flag=0;// 標志位清零
         x=T0count*65536+TH0*256+TL0;//獲得整數的頻率值,T0count計數器在1s內溢出的次數,每溢出一次就
                                                                         //就計數了T0count*65536次,再加上當前計數寄存器的值即為實際計數總數
         for(i=0;i<8;i++) //
           {
             temp[i]=0;        // 暫存緩沖區清零
           }
         i=0; //
         while(x/10) //將頻率值的每一位分離出來,存進temp數組,例如63239分離為6、3、2、3、9
           {
             temp[i]=x%10;//
             x=x/10;//
             i++;//
           }
         temp[i]=x;//
         for(i=0;i<6;i++)//
           {
             dispbuf[i]=temp[i];//將暫存數組的數據賦給顯示數組
           }
         timecount=0;//計時清零
         T0count=0;//計數清零
         TH0=0;// 計數器初值清零
         TL0=0;// 計數器初值清零
         TR0=1;// 重啟計數器
       }
   }
}

void t0(void) interrupt 1 using 0 //  計數器中斷
{
  T0count++;//
}

void t1(void) interrupt 3 using 0 // 定時器中斷4ms中斷一次
{
  TH1=(65536-5000)/256;//         定時器高8位賦初值
  TL1=(65536-5000)%256;        //         定時器低8位賦初值
  timecount++;//                         時間變量++
  if(timecount==200)//        判斷中斷250次為1s
    {
      TR0=0;//        關閉計數器0
      timecount=0;//清零重新計數中斷次數
      flag=1;// 標志位置1通知主程序1s已到
    }
        //因為放在該中斷程序中,故4秒掃描一次數碼管
P2=0xff;//先關閉所有數碼管 //
// P2=dispbit[dispcount];//送入位碼
P0=dispcode[dispbuf[dispcount]];// 先確定相應數碼管的段碼,送入段碼
P2=dispbit[dispcount];//送入位碼
  dispcount++;// 下一次應該掃描下一位數碼管所以要加一
  if(dispcount==8)//因為只有8只數碼管,判斷是否送入8次。
    {
      dispcount=0;// 使變量清零
    }
}

QQ圖片20190428102915.png (115.69 KB, 下載次數: 37)

QQ圖片20190428102915.png

QQ圖片20190428103032.png (93.64 KB, 下載次數: 35)

QQ圖片20190428103032.png

作者: ysandi    時間: 2019-4-28 15:34
Proteus仿真時,可能是因為電腦配置的原因,頻率一高就會遲滯。實物不會有這問題。
作者: 417763317    時間: 2019-4-28 17:04
ysandi 發表于 2019-4-28 15:34
Proteus仿真時,可能是因為電腦配置的原因,頻率一高就會遲滯。實物不會有這問題。

謝謝


作者: hantu    時間: 2019-4-29 00:36
你把仿真圖文件也發上來看看




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