乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      用51單片機(jī)STC89C52編程實(shí)現(xiàn)智能電飯煲中的數(shù)碼管時(shí)間顯示功能

       岐岐feng 2018-06-10

      這一篇我們來學(xué)習(xí)帶時(shí)鐘顯示功能的四位數(shù)碼管開發(fā)應(yīng)用,也就是通過四位數(shù)碼管分別顯示秒鐘,分鐘,或者小時(shí),那么這個(gè)功能在單片機(jī)項(xiàng)目開發(fā)當(dāng)中應(yīng)用非常廣泛的,比如,跑步機(jī),桑拿設(shè)備,電飯煲,電磁爐,電子鐘,微波爐,工廠產(chǎn)量看板,電力控制設(shè)備,還有汽車的車載時(shí)鐘等等很多電子設(shè)備,其實(shí)這些設(shè)備有很多都是使用單片機(jī)內(nèi)部的定時(shí)器來實(shí)現(xiàn)的,另外有一些使用是時(shí)鐘芯片來實(shí)現(xiàn),那么這些程序是如何編寫的?

      用51單片機(jī)STC89C52編程實(shí)現(xiàn)智能電飯煲中的數(shù)碼管時(shí)間顯示功能

      比如這一款電飯煲就是用四位數(shù)碼管來設(shè)計(jì)的

      用51單片機(jī)STC89C52編程實(shí)現(xiàn)智能電飯煲中的數(shù)碼管時(shí)間顯示功能

      而這一款就是用液晶顯示屏來做顯示的

      不管用是用液晶顯示屏還是數(shù)碼管來設(shè)計(jì)的他們都是用來做時(shí)鐘顯示時(shí)間。

      用51單片機(jī)STC89C52編程實(shí)現(xiàn)智能電飯煲中的數(shù)碼管時(shí)間顯示功能

      那么我們現(xiàn)在開始來進(jìn)入講解程序代碼之前,我們先來了解一個(gè)非常重要的引腳,也就是數(shù)碼管的LP段選引腳,指的就是數(shù)碼管中間的這兩個(gè)小點(diǎn),也就是冒號。如果我們想讓數(shù)碼管的這兩個(gè)小點(diǎn)點(diǎn)亮顯示的話,也就是數(shù)碼管的LP段選點(diǎn)亮顯示,那么就必須在DIG2位引腳鏈接電源VCC,也就是高電平,然后在LP段選引腳連接電源GND,這樣電路導(dǎo)通以后有電流流過LP段選內(nèi)部的發(fā)光二級管,所以LP段也就是這個(gè)冒號才能夠點(diǎn)亮顯示。了解了數(shù)碼管的LP段選引腳的功能以后,我們接著再來看它是如何跟單片機(jī)連接的。

      用51單片機(jī)STC89C52編程實(shí)現(xiàn)智能電飯煲中的數(shù)碼管時(shí)間顯示功能

      圖中LP這個(gè)段選引腳連接的網(wǎng)絡(luò)編號是ELP,他是跟單片機(jī)的P2.6 IO口連接在一起的,那么我們想讓數(shù)碼管的LP段點(diǎn)亮顯示的話,只要編寫程序給ELP,也就是P2.6 IO口一個(gè)低電平0就可以,若給高電平1的話,LP段就會(huì)熄滅,再就是想讓這個(gè)LP段不斷的顯示亮滅亮滅的一個(gè)循環(huán)過程的話,就要使用到定時(shí)器和中斷函數(shù)去控制才能實(shí)現(xiàn)。

      接著我們來看本篇的工程代碼

      用51單片機(jī)STC89C52編程實(shí)現(xiàn)智能電飯煲中的數(shù)碼管時(shí)間顯示功能


      #include

      #define uint unsigned int

      #define uchar unsigned char

      uchar num,num2,shi,ge,bai,qian,miao,fen;

      sbit wei=P2^4; //聲明位鎖存器LE鎖存端引腳

      sbit duan=P2^3; //聲明段鎖存器LE鎖存端引腳

      sbit ELP=P2^6; //數(shù)碼管的ELP段發(fā)光二極管

      void delayms(uint ms) //延時(shí)函數(shù)

      {

      uint i,j;

      for(i=ms;i>0;i--);

      for(j=110;j>0;j--);

      }

      uchar code digtal[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //數(shù)碼管0-9數(shù)字

      void Timer() //定時(shí)器0和定時(shí)器1初始化操作

      {

      TMOD=0x11; //0001 0001

      TH0=(65536-50000)/256; //裝初值

      TL0=(65536-50000)%256;

      TH1=(65536-50000)/256;

      TL1=(65536-50000)%256;

      EA=1; //打開總中斷

      ET0=1;

      ET1=1;

      TR0=1;

      TR1=1;

      }

      void display(uchar qian,uchar bai,uchar shi,uchar ge)

      {

      wei=1; //將位鎖存器的LE鎖存端開關(guān)打開

      P0=0x80; //把位選電平信號0000 0100傳送到位鎖存器輸出端

      wei=0; //把位選電平信號輸送完成以后,將LE鎖存端開關(guān)斷開

      duan=1; //將段鎖存器的LE鎖存端開關(guān)打開

      P0=digtal[qian]; //轉(zhuǎn)送段選電平信號,shi變量數(shù)值的變化會(huì)跟中斷函數(shù)的中斷次數(shù)有關(guān)

      duan=0; //把段選電平信號輸送完成以后,將段鎖存器的LE鎖存端開關(guān)斷開

      delayms(400); //延時(shí)

      wei=1;

      P0=0x40;

      wei=0;

      duan=1;

      P0=digtal[bai];

      duan=0;

      delayms(400);

      wei=1;

      P0=0x20;

      wei=0;

      duan=1;

      P0=digtal[shi];

      duan=0;

      delayms(400);

      wei=1;

      P0=0x10;

      wei=0;

      duan=1;

      P0=digtal[ge];

      duan=0;

      delayms(400);

      }

      void main()

      {

      Timer(); //初始化定時(shí)器0和定時(shí)器1操作

      while(1) //不斷的對數(shù)碼管動(dòng)態(tài)掃描檢測數(shù)字是否有變化

      {

      display(qian,bai,shi,ge); //數(shù)碼管顯示

      }

      }

      void T0_Timer() interrupt 1

      {

      TH0=(65536-50000)/256; //重新初值

      TL0=(65536-50000)%256;

      num++;

      if(num==20) //中斷20次,說明到了1秒鐘時(shí)間

      {

      miao++;

      num=0; //把num變量重新清0,重新再計(jì)20次

      if(miao==60)

      {

      fen++; //如果秒鐘到了60,fen變量加1

      miao=0;

      if(fen==60)

      fen=0; //如果fen變量到了60,fen變量清0

      }

      qian=fen/10; //將分鐘的第十位數(shù)數(shù)值分離出來

      bai=fen%10; //將分鐘的個(gè)位數(shù)數(shù)值分離出來

      shi=miao/10; //將秒鐘的第十位數(shù)數(shù)值分離出來

      ge=miao%10; //將秒鐘的個(gè)位數(shù)數(shù)值分離出來

      }

      }

      void T1_Timer() interrupt 3

      {

      TH1=(65536-50000)/256; //重新初值

      TL1=(65536-50000)%256;

      num2++;

      if(num2==10) //如果這個(gè)num2值加到10次,說明500ms到了

      {

      num2=0; //num2數(shù)值清0

      ELP=~ELP; //讓發(fā)光二極管取反,現(xiàn)實(shí)亮再到滅,再亮,再滅不斷循環(huán)這個(gè)過程

      }

      }


      用51單片機(jī)STC89C52編程實(shí)現(xiàn)智能電飯煲中的數(shù)碼管時(shí)間顯示功能

      另外還有一點(diǎn)要特別說明的是,實(shí)驗(yàn)使用到的數(shù)碼管LP段選引腳,剛才已經(jīng)講過了,LP段選引腳就是跟網(wǎng)絡(luò)編號ELP連接在一起的,而ELP對應(yīng)的就是單片機(jī)的P2.6 IO口,所以在使用這個(gè)引腳之前,需要對著這個(gè)引腳進(jìn)行聲明。

      用51單片機(jī)STC89C52編程實(shí)現(xiàn)智能電飯煲中的數(shù)碼管時(shí)間顯示功能

      這次的實(shí)驗(yàn)中用到了兩個(gè)定時(shí)器,也就是定時(shí)器0和定時(shí)器1,所以我們寫了兩個(gè)中斷函數(shù),先來看這一段代碼,就是定時(shí)器0中斷函數(shù),作用就是讓四位數(shù)碼管顯示時(shí)間的,顯示分鐘和秒鐘。

      用51單片機(jī)STC89C52編程實(shí)現(xiàn)智能電飯煲中的數(shù)碼管時(shí)間顯示功能

      這一段代碼就是定時(shí)器1中斷函數(shù),作用就是讓秒鐘和分鐘中間的冒號點(diǎn)亮或者熄滅一個(gè)循環(huán)過程。

      首先我們是給定時(shí)器0定時(shí)50ms產(chǎn)生一次中斷,當(dāng)每中斷一次NUM2變量就會(huì)加1,若中斷函數(shù)中斷了10次,說明500ms時(shí)間已經(jīng)到了,這是IF語句判斷num2變量的數(shù)值已經(jīng)等于10,因?yàn)闂l件判斷成立,接著就會(huì)進(jìn)入括號里面執(zhí)行語句,首先執(zhí)行這條語句,給NUM2變量的數(shù)值重新清0,然后給ELP這個(gè)IO口引腳的電平不斷的進(jìn)行取反操作。


      好,現(xiàn)在我們就把上面編寫好的程序下載到單片機(jī)里面,觀察四位數(shù)碼管是否能正常顯示時(shí)間。

      用51單片機(jī)STC89C52編程實(shí)現(xiàn)智能電飯煲中的數(shù)碼管時(shí)間顯示功能

      用51單片機(jī)STC89C52編程實(shí)現(xiàn)智能電飯煲中的數(shù)碼管時(shí)間顯示功能

      當(dāng)下載完成以后,四位數(shù)碼管顯示沒有問題,并且能正常的加1計(jì)數(shù)顯示,那么這就是通過定時(shí)器功能來實(shí)現(xiàn)數(shù)碼管時(shí)間顯示的開發(fā)應(yīng)用,好了,今天就交流到這里吧,我們下次再見!

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多