久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1617|回復: 1
打印 上一主題 下一主題
收起左側

單片機定時器及中斷實現百秒以內正計時程序

[復制鏈接]
跳轉到指定樓層
樓主
定時器及中斷設計電路如圖所示,可以看到使用兩個數碼管來顯示。實現百秒之內的正計時器(如17秒),到達17秒LED閃一下計時結束,數碼管實時顯示正計時值。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機源程序如下:
  1. //名稱: 定時器實現數碼管倒計時
  2. #include <reg51.h>
  3. #define uint unsigned int
  4. #define uchar unsigned char
  5. #define SEG P3

  6. sbit SCON1 = P2^0;
  7. sbit SCON2 = P2^1;
  8. sbit LED = P2^5;

  9. uchar num=0,ge,shi;    //倒計時17秒  7秒    正計時 0
  10. uchar count=0;
  11. uchar flag;

  12. //定義表格存放共陽極LED的點陣碼
  13. unsigned char code ledTab[]={
  14.         0xC0, // 1100 0000 數字0
  15.         0xF9, // 1111 1001 數字1
  16.         0xA4, // 1010 0100 數字2
  17.         0xB0, // 1011 0000 數字3
  18.         0x99, // 1001 1001 數字4
  19.   0x92, // 1001 0010 數字5
  20.         0x82, // 1000 0010 數字6
  21.         0xF8, // 1111 1000 數字7
  22.         0x80, // 1000 0000 數字8
  23.         0x90  // 1001 0000 數字9
  24. };  

  25. //毫秒級延時函數
  26. void delay(uint z)
  27. {
  28.         uint x,y;
  29.         for(x = z; x > 0; x--)
  30.                 for(y = 120; y > 0 ; y--);
  31. }


  32. void T0INTinit() //定時器T0初始化
  33. {
  34.         TMOD=0x01;
  35.         TH0=(65536-50000)/256;
  36.         TL0=(65536-50000)%256;  //50ms
  37.         EA=1;  //開總中斷
  38.         ET0=1; //開定時器0
  39.         TR0=1; //開始計時
  40. }


  41. void T0INT() interrupt 1
  42. {
  43.         TH0=(65536-50000)/256;
  44.         TL0=(65536-50000)%256;
  45.         flag++;
  46.         if(flag==20)//當定時到1秒時執行
  47.         {
  48.                 flag=0;
  49.                 num++;     //
  50.                 if (num > 17)    //
  51.                 {
  52.                         num = 0;
  53.                         TR0=0;  //停止計時
  54.       SEG=0xff;   //消影 不然會閃爍一下                       
  55.                         LED=0;
  56.                         delay(1000);
  57.                         LED=1;
  58.                         while(1)
  59.                         {
  60.                           SEG=0xff;  //計時結束 熄滅數碼管
  61.                         }
  62.                 }
  63.         }
  64. }



  65. void main(){
  66.         T0INTinit();
  67.         while(1)
  68.         {       
  69.                 SEG=0xff; //消影
  70.                 shi = num / 10;
  71.                 ge = num % 10;
  72.                 switch(count)
  73.                 {       
  74.                         case 0: SCON1=0;SCON2=1;SEG=ledTab[ge];break;  //共陽極
  75.                         case 1: SCON1=1;SCON2=0;SEG=ledTab[shi];break;
  76.                 }
  77.                 count++;
  78.                 if(count>1) count=0;
  79.         }
  80. }
復制代碼

Keil代碼與Proteus8.13版本的仿真下載(注意:不能兼容其他版本 只能用8.13打開):
百秒以內正計時.zip (105.04 KB, 下載次數: 13)


評分

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

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂1 踩
回復

使用道具 舉報

沙發
ID:491577 發表于 2022-11-16 22:04 | 只看該作者
用定時器中斷計數可以實現任意時間定時,無論是秒、分鐘、小時、天、月都沒有問題的。這是基本功。
例如:
void T0INTinit() //定時器T0初始化
{
        TMOD=0x01;
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;  //50ms
        EA=1;  //開總中斷
        ET0=1; //開定時器0
        TR0=1; //開始計時
}


void T0INT() interrupt 1//50ms定時器中斷
{
        static  unsigned int  m,s0,fen0,h0,day0;
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        m++;//
        if(m>=20)
        {
          s0++;
          s++;//秒變量,需要定義成全局變量
          m=0;
        }
        if(s0>=60)
        {
          fen0++;
          fen++;//分鐘變量,需要定義成全局變量         s0=0;
        }
        if(fen0>=60)
        {
          h0++;
          h++;//小時變量,需要定義成全局變量
          fen0=0;
        }
        if(h0>=24)
        {
          day0++;
          day++;//天變量,需要定義成全局變量
          h0=0;
        }
        if(day0>=30)
        {
          yue++;//月變量,需要定義成全局變量
          day0=0;
        }
  }

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美成人精品激情在线观看 | 91看片在线观看 | 黑人巨大精品欧美一区二区免费 | 亚洲精品一区二区 | 国产人久久人人人人爽 | 综合网视频 | 久久av一区二区三区 | 婷婷久久综合 | 国产精品美女久久久久久久网站 | 97成人免费| 久久久久综合 | 午夜精品视频 | 色在线免费视频 | 精品综合网 | 精品香蕉一区二区三区 | 亚洲一区二区三区免费视频 | 精品美女 | 久久精品一级 | aa级毛片毛片免费观看久 | 一区二区三区四区av | 久久精品色欧美aⅴ一区二区 | 欧洲亚洲一区 | 久久久久国产成人精品亚洲午夜 | 国产丝袜一区二区三区免费视频 | 国产在线小视频 | 天天玩夜夜操 | 久久国产美女视频 | 国产乱码久久久久久一区二区 | 中文字幕二区 | 免费在线观看一区二区 | 精品国产一区二区国模嫣然 | 91麻豆精品国产91久久久更新资源速度超快 | 手机在线观看av | 欧美成人免费在线 | 欧美高清视频一区 | 午夜精品久久久 | 国产精品免费在线 | 国产精品国色综合久久 | 久久宗合色| 91视频网 | 日本午夜网|