欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3544|回復: 1
收起左側

利用單片機定時器0模式1中斷消除4位數碼管動態顯示閃爍問題的項目工程

[復制鏈接]
ID:171036 發表于 2020-3-8 10:54 | 顯示全部樓層 |閱讀模式
  1. /********************************************************************************
  2. 定時器定時1ms,數碼管以秒鐘計時,加上定時器0中斷可消除數碼管刷新時的閃爍問題,
  3. 閃爍問題是由while語句中分離數字時計算造成的,因為每次1s時間到,在數碼管刷新前
  4. 都要進行計算,耽誤了時間,導致閃爍,加了中斷以后則是先刷新數碼管再分離數字。
  5. ********************************************************************************/
  6. #include <reg52.h>//52單片機頭文件
  7. #define uchar unsigned char   // 自定義uchar為unsigned char(即無符號字符型數據,數據范圍:0到255。)
  8. #define uint unsigned int     //自定義uint為unsigned int(即有符號整數型數據,數據范圍:0到65535。)
  9. uint count,i,sec,shumaguainitflag;//聲明定時器0中斷次數變量、選位變量、秒鐘變量、數碼管初始化標志位變量
  10. uint ge,shi,bai,qian;//聲明數碼管個位變量、數碼管十位變量、數碼管百位變量、數碼管千位變量
  11. uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f} ; //共陰數碼管段碼數字0~9字碼表,高電平點亮數碼管段碼數字0~9。
  12.   void Timer0Init()//定時器0初始化
  13. {
  14.    TMOD=0x01;//設定定時器類型為定時器0,定時器工作模式為模式0。
  15.    TH0=(65536-1000)/256;//TH0裝初值
  16.    TL0=(65536-1000)%256;//TL0裝初值
  17.    EA=1;//開啟定時器總中斷
  18.    ET0=1;//開啟定時器0中斷開關
  19.    TR0=1;//啟動定時器0
  20. }
  21.   void Timer0() interrupt 1//定時器0中斷函數
  22. {
  23.    TH0=(65536-1000)/256;//TH0重新裝值
  24.    TL0=(65536-1000)%256;//TL0重新裝值
  25.    count++;//定時器0中斷次數變量先賦值再加
  26.    P2=0xff;//此句為消除瞬間錯誤,例如case 1下,P0已刷新而P2暫留在case 0瞬間狀態,會造成case 0下數碼管瞬間顯示錯誤數值,在每次進入開關語句前關閉所有數碼管即可消除該錯誤。
  27.    switch(i)//讓4位數碼管以1ms間隔輪流刷新
  28. {
  29.    
  30.     case 0:  
  31.            P0 = ge;//數碼管個位數值顯示
  32.            P2 = 0xf7;//數碼管個位顯示位
  33.            i++;//選位變量先賦值再加加
  34.            break;
  35.     case 1:
  36.            P0 = shi;//數碼管十位數值顯示
  37.            P2 = 0xfb;//數碼管十位顯示位   
  38.            i++;//選位變量先賦值再加加
  39.            break;
  40.     case 2:
  41.            P0 = bai;//數碼管百位數值顯示
  42.            P2 = 0xfd;//數碼管百位顯示位
  43.            i++;//選位變量先賦值再加加
  44.            break;
  45.     case 3:
  46.            P0 = qian;//數碼管千位數值顯示
  47.            P2 = 0xfe;//數碼管千位變量顯示位
  48.            i=0;//選位變量置0
  49.            break;
  50.    
  51.     default : break;//自定義
  52.    }
  53. }
  54.   void main()//主函數
  55. {
  56.    Timer0Init();//定時器0初始化函數
  57.    while(1)//固定循環
  58. {   
  59.     if(count<1000&&shumaguainitflag==0)//判斷定時器0中斷次數變量是否小于1000和數碼管初始化標志位變量是否等于0
  60.   {
  61.      ge = table[0];//數碼管個位變量為0
  62.      shi = table[0];//數碼管十位變量為0
  63.      bai = table[0];//數碼管百位變量為0
  64.      qian = table[0];//數碼管千位變量為0
  65.     }
  66.     if(count>=1000)//判斷定時器0中斷次數變量是否大于等于1000,即1s。
  67.   {
  68.      count = 0;//定時器0中斷次數變量置0
  69.      sec++;//秒鐘變量先賦值再加加
  70.      shumaguainitflag=1;//數碼管初始化標志位變量置1
  71.      ge = table[sec%10];//數碼管個位變量
  72.      shi = table[sec%100/10];//數碼管十位變量
  73.      bai = table[sec%1000/100];//數碼管百位變量
  74.      qian = table[sec/1000];//數碼管千位變量
  75.     }
  76.    }
  77.   }
復制代碼


1680900-20200216121250648-830894033.png

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:65956 發表于 2020-3-9 09:43 | 顯示全部樓層
這個個人認為公限于些功能的應用,如果作到項目,P2口還有用到其它的功能就要改,不然項目動作不太合適
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表