單片機(jī)實驗說明<三>數(shù)碼管和定時器基本使用

      網(wǎng)友投稿 940 2022-05-29

      實驗三(上) 數(shù)碼管動態(tài)顯示設(shè)計

      設(shè)計要求:

      編程實現(xiàn)8段數(shù)碼管的動態(tài)掃描顯示,要求4個數(shù)碼管從左到右分別顯示“1”、“2”、“3”、“4”、及“A”、“b”、“C”、“d”。

      電路設(shè)計:

      軟件代碼:

      單片機(jī)實驗說明<三>數(shù)碼管和定時器基本使用

      /*****************************************************************************

      * 頭文件 *

      *****************************************************************************/

      #include "hml/hml.h"

      #define LSA P1_5

      #define LSB P1_6

      #define LSC P1_7

      unsigned char smgduan[]={0xf9,0xa4,0xb0,0x99,0x88,0x83,0xc6,0xa1};

      //共陽極的顯示代碼表1,2,3,4,A,b,C,d

      /*****************************************************************************

      * 初始化和功能函數(shù) *

      *****************************************************************************/

      void sys_init(void)

      {

      LSA = 0;

      LSB = 0;

      LSC = 0;

      }

      void LedScan(unsigned char pos,unsigned char dispcode)

      {

      unsigned char i;

      for(i=0;i<=pos;i++)

      {

      switch(pos) //位選,選擇點亮的數(shù)碼管,

      {

      case(0):

      LSA=1;LSB=0;LSC=0; break; //顯示

      case(1):

      LSA=0;LSB=1;LSC=0; break; //顯示第1位

      case(2):

      LSA=1;LSB=1;LSC=0; break; //顯示第2位

      case(3):

      LSA=0;LSB=0;LSC=1; break; //顯示第3位

      }

      P0=dispcode; //發(fā)送段碼

      }

      }

      /*****************************************************************************

      * 主函數(shù) *

      *****************************************************************************/

      void main(void)

      {

      sys_init();

      int i=0,j=500;

      while(j--)

      {

      for(i=0;i<4;i++)

      {

      LedScan(i,smgduan[3-i]);

      sleep(1);

      }

      }

      j=500;

      while(j--)

      {

      for(i=0;i<4;i++)

      {

      LedScan(i,smgduan[7-i]);

      sleep(1);

      }

      }

      }

      思考題:

      1.何謂數(shù)碼管的動態(tài)顯示,其原理是什么?

      2.若要實現(xiàn)秒表從 0.0s 秒到 9.9s 循環(huán)顯示,請寫出實現(xiàn)的思路或代碼?

      實驗三(下) 2位倒計時設(shè)計(團(tuán)隊課題)

      設(shè)計要求:

      編寫實驗程序,實現(xiàn)59秒倒計時功能,初始狀態(tài)數(shù)碼管最后兩位顯示數(shù)字“59”,要求定時器0每10ms產(chǎn)生一次中斷,在定時中斷服務(wù)程序里進(jìn)行計數(shù),計數(shù)滿一秒,數(shù)碼管顯示相應(yīng)減1,倒計時結(jié)束時,數(shù)碼管顯示“00”,并以周期1秒進(jìn)行閃爍;按鍵可以控制計數(shù)器的啟動和暫停。

      電路設(shè)計:

      自主完成。

      軟件代碼:

      /*****************************************************************************

      * 頭文件 *

      *****************************************************************************/

      #include "hml/hml.h"

      #define LSA P1_5

      #define LSB P1_6

      #define LSC P1_7

      unsigned int cnt=0;

      unsigned char T0RH = 0; //T0 重載值的高字節(jié)

      unsigned char T0RL = 0; //T0 重載值的低字節(jié)

      signed char sec;

      signed char sec_all=19;

      signed char count=0;

      unsigned char smgduan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0x0f8,0x80,0x90};

      //共陽極的顯示代碼表0~9

      void EXINT0() __interrupt 0;

      void Timer0() __interrupt 1;

      /*****************************************************************************

      * 初始化和功能函數(shù) *

      *****************************************************************************/

      /* 配置T0, ms-T0定時時間 */

      void ConfigTimer0(unsigned int ms)

      {

      unsigned long tmp; //臨時變量

      tmp = 11059200 / 12; //定時器計數(shù)頻率

      tmp = (tmp * ms) / 1000; //計算所需的計數(shù)值

      tmp = 65536 - tmp; //計算定時器重載值

      tmp = tmp + 18; //補償中斷響應(yīng)延時造成的誤差

      T0RH = (unsigned char)(tmp>>8); //定時器重載值拆分為高低字節(jié)

      T0RL = (unsigned char)tmp;

      TMOD &= 0xF0; //清零 T0 的控制位

      TMOD |= 0x01; //配置 T0 為模式 1

      TH0 = T0RH; //加載 T0 重載值

      TL0 = T0RL;

      ET0 = 1; //使能 T0 中斷

      }

      void EXINT0() __interrupt 0

      {

      count++;

      }

      void Timer0() __interrupt 1

      {

      TH0 = T0RH; //重新加載重載值

      TL0 = T0RL;

      cnt++; //中斷次數(shù)加1

      if (cnt >= 100) //中斷100次=1s

      {

      cnt = 0;

      sec--;

      if (sec < 0) //當(dāng)顯示值到0后,閃爍

      {

      sec = 0;

      }

      }

      }

      void LedScan(unsigned char pos,unsigned char dispcode)

      {

      unsigned char i;

      for(i=0;i<=pos;i++)

      {

      switch(pos) //位選,選擇點亮的數(shù)碼管,

      {

      case(0):

      LSA=1;LSB=0;LSC=0; break; //顯示

      case(1):

      LSA=0;LSB=1;LSC=0; break; //顯示第1位

      case(2):

      LSA=1;LSB=1;LSC=0; break; //顯示第2位

      case(3):

      LSA=0;LSB=0;LSC=1; break; //顯示第3位

      }

      P0=dispcode; //發(fā)送段碼

      }

      }

      void sys_init(void)

      {

      LSA = 0;

      LSB = 0;

      LSC = 0;

      cnt = 0; //中斷次數(shù)計數(shù)器

      sec = sec_all; //秒數(shù)初值

      ConfigTimer0(10); //配置 T0 定時 10ms

      EA=1; //開中斷

      IT0=0;

      EX0=1;

      // IT1=1;

      // EX1=1;

      // PX1=1;

      TR0=1;

      }

      /*****************************************************************************

      * 主函數(shù) *

      *****************************************************************************/

      void main(void)

      {

      sys_init();

      while(1)

      {

      if(count%2==0)

      {

      TR0 = 1;

      }

      else

      {

      TR0 = 0;

      }

      if((cnt>49)&&(sec==0))

      {

      LedScan(0,0xff); //顯示個位值

      LedScan(1,0xff); //顯示個位值

      }

      else

      {

      LedScan(0,smgduan[sec%10]); //顯示個位值

      LedScan(1,smgduan[sec/10]); //顯示十位值

      }

      }

      }

      思考題:

      1.畫出主程序和定時中斷流程圖;

      2.加入獨立鍵盤的兩個按鍵(自選),其中一個按鍵實現(xiàn)復(fù)位,即按下后馬上回到顯示“19”;另一個按鍵實現(xiàn)暫停和啟動功能,即按一下后暫停,再按一下后啟動。

      IDE 單片機(jī) 電商家電數(shù)碼

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:【Java核心面試寶典】Day6、面向?qū)ο蟪R娒嬖囶}匯總(一)
      下一篇:Eclipse快捷鍵設(shè)置
      相關(guān)文章
      亚洲人成网站观看在线播放| 亚洲伊人久久精品| 亚洲区精品久久一区二区三区| 亚洲国产精品一区第二页 | 久久精品亚洲男人的天堂| 久久精品国产亚洲AV| 亚洲AV无码国产剧情| 亚洲国产美女精品久久久| 亚洲精品91在线| 亚洲字幕在线观看| 亚洲另类精品xxxx人妖| 亚洲资源在线视频| 亚洲精品国产成人中文| 亚洲国产美女视频| 国产精品亚洲精品青青青| 456亚洲人成在线播放网站| 亚洲欧美成人一区二区三区| 亚洲色www永久网站| 亚洲av无码专区在线观看下载| 亚洲av无码一区二区三区天堂| 久久亚洲AV成人无码国产最大| 国产天堂亚洲国产碰碰| 亚洲精品tv久久久久| 在线亚洲午夜理论AV大片| 亚洲情XO亚洲色XO无码| 久久亚洲国产成人亚| 亚洲黄色网址大全| 亚洲AV色吊丝无码| 亚洲欧美国产精品专区久久| 亚洲乱人伦中文字幕无码| 亚洲av片在线观看| 亚洲欧洲中文日韩av乱码| 亚洲香蕉网久久综合影视| 亚洲成a人片77777kkkk| 亚洲精品无码不卡| 精品亚洲麻豆1区2区3区| 亚洲成人黄色在线| 亚洲AV综合永久无码精品天堂| 亚洲黄黄黄网站在线观看| 亚洲午夜无码久久久久| 亚洲国产人成在线观看69网站|