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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

MSP430用I2C擴展鍵,編程實現(xiàn)8個LED燈的流水點亮,點亮時間由定時器確定,長短用鍵...

[復制鏈接]
跳轉到指定樓層
樓主
ID:538816 發(fā)表于 2019-5-15 15:42 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
利用I2C擴展鍵,編程實現(xiàn)8個LED燈的流水點亮,點亮時間由定時器確定,長短用鍵盤可調(diào)。

單片機源程序如下:
  1. #include "MSP430G2553.h"
  2. void P1_IODect();
  3. void P13_Onclick();
  4. void GPIO_init();
  5. void WDT_init();
  6. void Timer1_init();
  7. void Timer1_ISR();

  8. void main(void) {
  9.         WDTCTL = WDTPW + WDTHOLD;        //關狗
  10.         GPIO_init();
  11.         WDT_init();
  12.         Timer1_init();//初始化timer1
  13.         _enable_interrupts();                                                        //使能總中斷
  14.         _bis_SR_register(LPM3_bits+GIE);                                //LPM0方式休眠
  15. }
  16. void GPIO_init()
  17. {
  18.         //-----配合機械按鍵,啟用內(nèi)部上拉電阻-----
  19.         P1DIR|=BIT0;                                        //啟用P1.3內(nèi)部上下拉電阻
  20.         P1OUT|=BIT0;//LED輸出 P1.6
  21.         P2DIR|=BIT4;
  22.         P2SEL|=BIT4;//PWM輸出 P2.4
  23.         P2DIR&=~BIT2;
  24.         P2SEL|=BIT2;//捕獲模式,要善于查捕獲IO口//將電阻設置為上拉
  25.         //-----配置P1.3中斷參數(shù)-----
  26.         P1REN|=BIT3;//電阻使能寄存器
  27.         P1OUT|=BIT3;
  28.         P1DIR&=~BIT3;//設為輸入(可省略)
  29. }
  30. void WDT_init()
  31. {
  32.         WDTCTL=WDT_ADLY_16;
  33.         IE1|=WDTIE;//WDT中斷開關
  34. }
  35. void Timer1_init()
  36. {
  37.         //通道1控制寄存器,捕獲通道
  38.         TA1CCTL1=CAP+CCIE+CM_3+CCIS_1+SCS;//捕獲,中斷分開關,測脈寬需上升和下降沿均捕獲
  39.         //通道2控制寄存器,比較通道
  40.         TA1CCTL2=OUTMOD_6;
  41.         TA1CCR0 = 32700;//將近1秒,使肉眼可見
  42.         TA1CCR2 = 16000;
  43.         //設置主定時器,主定時器增計數(shù),增減模式周期可調(diào)
  44.         TA1CTL =TASSEL_1+MC_1+TACLR;//主定時器工作模式設定,捕獲比較功能打開
  45. }
  46. //Timer1中斷函數(shù),多中斷源合用
  47. #pragma vector=TIMER1_A1_VECTOR//中斷向量
  48. __interrupt  void TIMER1_A1(void)//名稱任取,可讀性強
  49. {
  50.         switch(TA1IV)//中斷向量寄存器
  51.         {
  52.         case TA1IV_TACCR1:Timer1_ISR();
  53.                                   break;       
  54.         default:break;
  55.         }

  56. }

  57. void Timer1_ISR()
  58. {
  59.         volatile unsigned int width=0;
  60.         static unsigned int pwm_start=0;
  61.         unsigned int pwm_end=0;
  62.         //讀取電平讀取上升下降沿,通過寄存器讀取狀態(tài)

  63.         if(TA1CCTL1&CCI)//高電平
  64.         {
  65.                 pwm_start=TA1CCR1;//捕獲值放到變量中,捕獲完成
  66.                 P1OUT|=BIT0;//LED點亮顯示高電平
  67.         }
  68.         else if(TA1CCTL1&COV==2)  TA1CCTL1 &=~COV;//判斷溢出
  69.                 else
  70.                 {
  71.                         pwm_end =TA1CCR1;
  72.                         width=pwm_end-pwm_start;//高電平脈寬
  73.                         P1OUT&=~BIT0;//LED顯示低電平
  74.                         pwm_start=0;
  75.                         pwm_end=0;//變量清零
  76.                         _bis_SR_register(LPM0_bits+GIE);
  77.                 }
  78.         TA1CCTL1&=~COV;
  79. }

  80. void P1_IODect()
  81. {
  82.         unsigned int Push_Key=0;
  83.         //-----排除輸出IO的干擾后,鎖定唯一被觸發(fā)的中斷標志位-----
  84.         Push_Key=P1IFG&(~P1DIR);
  85.         //-----延時一段時間,避開機械抖動區(qū)域-----
  86.         __delay_cycles(10000);                                                        //消抖延時
  87.         //----判斷按鍵狀態(tài)是否與延時前一致-----
  88.         if((P1IN&Push_Key)==0&&Push_Key==BIT3)                                 //如果該次按鍵確實有效
  89.           P13_Onclick();
  90. }

  91. void P13_Onclick()                                                                        //P1.3的事件處理函數(shù)
  92. {
  93.         //-----Bright在函數(shù)執(zhí)行完后不能被清空,所以得設為靜態(tài)局部變量-----
  94.         static unsigned int temp=16000;
  95.                 TA1CCR2+=4000;
  96.                 temp=TA1CCR2;
  97.                 if(temp>=32700)
  98.                    TA1CCR2=0;
  99.         }

  100. #pragma vector = WDT_VECTOR//中斷向量
  101. __interrupt void WDT_ISR(void)//名稱任取,可讀性強
  102. {
  103.         P1_IODect();
  104. }

復制代碼

所有資料51hei提供下載:
4_2.zip (38.77 KB, 下載次數(shù): 6)


評分

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

查看全部評分

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

使用道具 舉報

沙發(fā)
ID:547542 發(fā)表于 2019-5-26 14:48 | 只看該作者
此帖僅作者可見

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产一区二区三区高清 | 91大神xh98xh系列全部 | 一区二区视频在线 | 超碰免费在 | av天空| 欧美日韩福利视频 | 欧美久久影院 | 九九热这里 | 在线观看免费福利 | 免费在线看黄 | 成人一区二区三区在线观看 | 亚洲免费视频网址 | 草樱av | 欧美一级二级三级 | 亚洲欧美男人天堂 | 欧美在线a | 美女久久视频 | 99热国产免费 | 久亚州在线播放 | 欧美激情一区二区三级高清视频 | 91中文在线观看 | 天天人人精品 | 久久久久国产一区二区三区四区 | 人人澡视频 | 水蜜桃久久夜色精品一区 | 午夜精品一区二区三区在线观看 | www.日本国产 | 欧美在线视频网 | 视频在线一区二区 | 毛片免费在线 | 国产精品一区二区三区四区 | 日本又色又爽又黄的大片 | 国产高清在线 | 国产精品成av人在线视午夜片 | 久久综合久久久 | 亚洲97| 国产一区二区在线播放视频 | 国产999精品久久久久久 | av一区二区三区四区 | 中文字幕韩在线第一页 | 亚洲国产视频一区二区 |