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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機簡單的計時器應用

[復制鏈接]
跳轉到指定樓層
樓主
ID:432487 發表于 2018-11-24 18:21 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
使用的是51單片機, 晶振為11.0592M的, 時間選擇5ms。
這篇博客好像是第一篇單片機博客誒~。
算法:
簡單的計時器應用, 最開始 根據   2^16 - (t - f)/12  計算得到值, 將其轉換為16進制  (注意:單位的改變, 例如晶振要乘上 10e6   時間 要轉換為秒s  乘上 10e-3)
由此可以得到 TH0/TL0的值。
例如:
設計的是5ms, 則  算式為   2^16 - (5 * 10^-3   - 11.0592  * 10^6) / 12;  轉換為16進制  為DC00;  所以 TH0 = 0XDC      __   TL0 = 0X00;
顯示:
拆字什么的 就不說了~~, 反正就是 分和秒 對 10取余 和 整除。
下面函數中的 counter 和 second 分別對應 秒和分。
Hint:
老師說, 最好在     tmp=counter%4; 前  加上 if(changed == 1)執行拆字顯示, 然后再將執行空語句 如此循環。  但還是不怎么明白為什么。 好像是說 保護 IO 之類的~~~~
#include<reg52.h>
#define uchar unsigned char
uchar counter=0,tmp,second=0,minute=0, changed = 1;
main()
{   //TMOD=0X21;                            //設置TMOD寄存器
    TMOD=0X01;                          //設置TMOD寄存器
    TH0=0xDc;              //裝初值
    TL0=0x00;
    //TH1=0XFD;
    //TL1=0;
    //TR1=1;
    //SCON=0X50;
    EA=1;       //開 中斷
    ET0=1;
    TR0=1;
    while(1)
    {
         char a[10] = {0xc0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90};
    //拆字
    //顯示
    tmp=counter%4;
    switch(tmp)
    {
    case 0:{
                P2 = 0x7f;
                P0 = a[second%10];
            }
        break;
    case 1:{
                P2 = 0xbf;
                P0 = a[second/10];
            }
        break;
    case 2: {
                P2 = 0xdf;
                P0 = a[minute%10];
            }
        break;
    case 3: {
                P2 = 0xef;
                P0 = a[minute/10];
            }
        break;
    }
    }

    /*
        if(j==2)
        {
            j=0;
            P2=~P2;
        }
    */
}
void zhongduan()interrupt 1
{
    TH0=0xee;              //裝初值
    TL0=0x00;
    TF0=0;
    TR0=1;
    /*
    i++;
    if(i>=5)
    {
        i=0;   
        //SBUF=j;
        //while(!TI);
        //TI=0;
        j++;
    }
    */
    counter++;
    if(counter==200)
    {
       counter=0;
       second++;
       if(second==60)
       {
          second=0;
          minute++;
       }
     }
}      
---------------------
作者:棺木酥

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

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