<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 數(shù)碼管中斷實驗

          數(shù)碼管中斷實驗

          作者: 時間:2016-11-11 來源:網(wǎng)絡(luò) 收藏



          本文引用地址:http://www.ex-cimer.com/article/201611/316843.htm

          學(xué)習(xí)了低電平觸發(fā)與邊沿觸發(fā)的區(qū)別,不同中斷的使用。

          參考程序代碼如下


          #include
          #include
          #include "delay.h"
          #define uint unsigned int
          #define uchar unsigned char
          //uchar led7[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; //共陰7段數(shù)碼管顯示0-9對應(yīng)的8bit
          uchar led7[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共陽7段數(shù)碼管顯示0-9對應(yīng)的8bit
          uchar position[4]={0x01,0x02,0x04,0x08};//4片數(shù)碼管對應(yīng)的片選bit
          uchar buffer[4];//每位需要顯示的數(shù)字都放在此數(shù)組中
          uchar time[2];//分,秒數(shù)組
          uchar timecounter;//計時循環(huán)

          void main(void)//主函數(shù)
          {
          uchar i;
          Init(); //初始化端口及接口
          time[0]=12; //初始化時間
          time[1]=34; //初始化時間
          DoBuffer(); //把2個十位數(shù)變?yōu)?個個位數(shù)
          init_devices();
          while(1)
          {
          Display(); //動態(tài)掃描時間為8ms

          if(timecounter++>100) //循環(huán)100次,即8*100約為1秒延時
          {
          timecounter=0;
          if(time[1]++>59) //秒加1,并且判斷是否為60
          {
          time[1]=0;
          if(time[0]++>59)//分加1,并且判斷是否為60
          {
          time[0]=0;
          }
          }
          DoBuffer();
          }
          }
          }

          void Init(void) //初始化設(shè)置
          {
          DDRA=0x0f; //設(shè)置端口A的低四位為輸出
          PORTA=0x08; //設(shè)置端口A的低四位為輸出為低電平
          DDRB=0xff; //設(shè)置端口B方向為輸出
          PORTB=0xff; //設(shè)置端口B輸出高電平
          }

          void Display(void)//掃描顯示函數(shù),單個掃描時間為2ms
          {
          uchar i;
          for(i=0;i<4;i++)
          {
          PORTB=led7[buffer[i]]; //4個數(shù)轉(zhuǎn)成對應(yīng)的8位顯示碼送PORTB
          PORTA=position[i]; //選擇1個8段碼進(jìn)行顯示
          delay_ms(2); //延時5毫秒,1秒顯示25幀人眼是可以識別的,1/25=40ms,所以要小于40ms
          PORTA=0x00; //關(guān)閉
          }
          }

          void DoBuffer(void)//時間數(shù)字分位,2個2位數(shù)變?yōu)?個1位數(shù)
          {
          uint i,j=0; //j不能忘記賦值
          for(i=0;i<2;i++) //時間為2個2位數(shù)
          {
          buffer[j++]=time[i]/10; //共2次循環(huán),第一次中,第1個2位數(shù)取出十位
          buffer[j++]=time[i]%10; //共2次循環(huán),第一次中,第1個2位數(shù)取出個位
          }
          }

          #pragma interrupt_handler int0_isr:2
          void int0_isr(void) //INT0中斷程序
          {
          while(!(PIND&(1<{
          PORTB=led7[buffer[3]]; //輸出第4位數(shù)字
          PORTA=position[3]; //第4位數(shù)字片選開
          }
          }

          #pragma interrupt_handler int1_isr:3
          void int1_isr(void)
          {
          while(!(PIND&(1<{
          PORTB=led7[buffer[2]]; //輸出第3位數(shù)字
          PORTA=position[2]; //第3位數(shù)字片選開
          }
          }


          void init_devices(void)
          {
          CLI();//清除所有中斷標(biāo)志
          MCUCR = 0x00;//INT0 INT1 下降沿產(chǎn)生中斷請求
          GICR=0xc0; //設(shè)置int0和int1中斷允許
          SEI(); //開全局中斷
          }



          關(guān)鍵詞: 數(shù)碼管中斷實

          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();