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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3397|回復: 1
打印 上一主題 下一主題
收起左側(cè)

51單片機可控硅調(diào)光程序

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:242487 發(fā)表于 2017-10-24 16:47 | 只看該作者 回帖獎勵 |正序瀏覽 |閱讀模式
  1. #include <reg52.H>         
  2. #include "intrins.h"

  3. #define        _50msL_        50000*0.9216
  4. #define        _50msH_        50000*0.9216
  5. #define        _1ms_        922
  6. #define        _10ms_        9216
  7. #define        _50us        46   

  8. #define uchar unsigned char  
  9. #define uint unsigned int
  10. void delaySTD_ms(uchar ms);
  11. unsigned char scankey();


  12. sbit PWM_PIN= P1^0;
  13. sbit PWM_TESTLED= P1^2;

  14. sbit    key1pressed= P1^5;
  15. sbit    key2pressed= P1^6;
  16. sbit    key3pressed= P1^7;


  17. #define LEVEL0 0
  18. #define LEVEL1 1
  19. #define LEVEL2 2
  20. #define LEVEL3 3
  21. #define LEVEL4 4

  22. #define GRADE 10  
  23. #define CELL  (9216/GRADE)     
  24. //#define CELL  10000  //10000us,實際是9216
  25. #define KEYPRESSTIME  7  //10ms,key bound delay time

  26. int iShiftPoint;
  27. int b; //b一定要有符號整型!
  28. uint timemultiplex;
  29. uint timemultiplex_maxvalue;
  30. //------------------------------------------
  31. void main()
  32. {
  33.         PWM_PIN = 0;
  34. timemultiplex_maxvalue=3;
  35. timemultiplex=1;        
  36.         //外部過零中斷
  37.         IT0 = 1; //1為邊沿觸發(fā)
  38.         EX0 = 1;
  39.         //開啟定時中斷
  40.         TMOD = 0x01;                 //T0定時方式1
  41.     b =8;//初亮度調(diào)整
  42.         iShiftPoint=b;
  43.         TH0 = (65536-CELL*iShiftPoint) / 256;   //歷史:50ms@12MHz,這里定時沒意義,通過外中斷過零定時
  44.         TL0 = (65536-CELL*iShiftPoint) % 256;
  45.         ET0 = 1;
  46.         TR0 = 1;//TR0 = 1;定時只是為了計算延時時長!10ms即10000us,分成10種時長,由t1產(chǎn)生這10種時長
  47. //定時器1初始化:
  48.         TMOD |= 0x10;                 //T1定時方式1
  49.         TH1 = (65536-_50us) / 256;   
  50.         TL1 = (65536-_50us) % 256;
  51.         ET1 = 1;
  52.         TR1 = 1;//TR0 = 1;定時只是為了計算延時時長!10ms即10000us,分成10種時長,由t1產(chǎn)生這10種時長

  53.         EA = 1;


  54. //調(diào)光級別從0到4共5級別 能調(diào)光級別811~910
  55. #define MAXAA 998
  56. #define MINAA 11
  57.          while(1)
  58.                 {
  59.                         unsigned char buf;

  60. //以下為自動化按鍵測試
  61.                         b =MINAA;
  62.                         if (b>MAXAA)
  63.                         {
  64.                 //        delaySTD_ms(500);
  65.                 //        delaySTD_ms(500);                        
  66.                 //        delaySTD_ms(500);
  67.                 //        delaySTD_ms(500);
  68.                 //                b=MINAA;
  69.                         PWM_PIN=0;
  70.                         EA=0;
  71.                         }
  72.                         if (b<MINAA)
  73.                                  b=MINAA;
  74.                         b+=30;
  75.                         delaySTD_ms(500);
  76.                         continue;
  77. //以上為自動化按鍵測試                        

  78.        //  while(1)
  79.         //        {
  80.         //                unsigned char buf;
  81.                         buf=scankey();
  82.                          if(buf==1)  //調(diào)滅
  83.                                 {
  84.                                         b++;
  85.                                 }
  86.                          if(buf==2)
  87.                                 {//二鍵調(diào)亮。b--是亮,765,從滅到月牙到亮
  88.                                         b--;
  89.                                 }
  90.                          if(buf==3)
  91.                                 {//3鍵盤關閉繼電器,同時也得關PWM燈才得滅;再按一次3鍵,則全亮
  92.                                         PWM_PIN=!PWM_PIN;
  93.                                 }
  94.                         if (b>(GRADE-1)) b=LEVEL4;//仍然最亮   //歷史:在這里調(diào)整周期.不能無限增加
  95.                         if (b<0)           b=LEVEL0;//必須設置為>20,<1,不能設置為>19,<0,否則最后亮了就熄滅一下
  96.                         iShiftPoint=b;
  97.                         //other while
  98. /*
  99.                         delaySTD_ms(500);
  100.                         delaySTD_ms(500);                        
  101.                         delaySTD_ms(500);
  102.                         delaySTD_ms(500);
  103.                         timemultiplex_maxvalue++;
  104.                         if (timemultiplex_maxvalue>40) timemultiplex_maxvalue=40;
  105. */
  106.                 }
  107. }

  108. //------------------------------------------

  109. void X0_INT(void) interrupt 0
  110. {
  111. //過零檢測,來個中斷就表過零了,過零時才能重新基準一次10ms。

  112.      //   EA = 0;
  113.         TR0=0;
  114.         //        PWM_PIN = 0;        
  115.                 TH0 = (65536-CELL*iShiftPoint) / 256;   //1000ms@12MHz,這里定時沒意義,只是個時間流逝。通過外中斷過零定時
  116.                 TL0 = (65536-CELL*iShiftPoint) % 256;   
  117.         TR0=1;
  118.           //        EA = 1;
  119. }

  120. void time0(void) interrupt 1
  121. {

  122. /*
  123.         TR0 = 0;
  124.         TH0 = (65536-CELL*iShiftPoint) / 256;   //歷史:50ms@12MHz,這里定時沒意義,通過外中斷過零定時
  125.         TL0 = (65536-CELL*iShiftPoint) % 256;
  126.         TR0 = 1;
  127. */
  128.         int i;
  129.         // 1次外部中斷產(chǎn)生,其滅會等待CELL*iShiftPoint us之后就開pwm,直至下次過零點關掉 ;CELL*iShiftPoint us由定時器來計算
  130.         PWM_PIN = 1;      

  131. /*
  132. //隨便兩語句延時
  133. for (i=0;i<100;i++)
  134. {
  135.                            _nop_();
  136.                         _nop_();
  137.                         _nop_();
  138. }
  139. */

  140.         TR1 = 0;
  141.         TH1 = (65536-_50us) / 256;   //歷史:50ms@12MHz,這里定時沒意義,通過外中斷過零定時
  142.         TL1 = (65536-_50us) % 256;
  143.         TR1 = 1;
  144.                 //關要!
  145. //                PWM_PIN = 0;//亮個4us關,效果比一直亮好

  146. }
  147. //------------------------------------------

  148. void time1(void) interrupt 3
  149. {
  150.     timemultiplex++;
  151.         if (timemultiplex==timemultiplex_maxvalue)
  152.         {
  153.                 timemultiplex=0;
  154.                 //關要!
  155.                 PWM_PIN = 0;
  156.         }
  157. }


  158. /*********************************************************/
  159. // 延時子程序
  160. /*********************************************************/
  161. void delaySTD_ms(uchar ms)  // 標準延時毫秒@12M,ms最大值255   
  162. {   
  163.     uchar i;   
  164.     while(ms--)   
  165.         for(i = 0; i < 124; i++);   
  166. }

  167. //那個鍵按下返回幾
  168. unsigned char scankey()
  169. {
  170.         if (key1pressed==0)
  171.         {
  172.                 delaySTD_ms(KEYPRESSTIME);
  173.                 if (key1pressed==0)
  174.                 {
  175.                         while(!key1pressed);
  176.                         delaySTD_ms(KEYPRESSTIME);
  177.                         return 1;
  178.                 }
  179.         }
  180.         if (key2pressed==0)
  181.         {
  182.                 delaySTD_ms(KEYPRESSTIME);
  183.                 if (key2pressed==0)
  184.                 {
  185.                         while(!key2pressed);
  186.                         delaySTD_ms(KEYPRESSTIME);
  187.                         return 2;
  188.                 }
  189.         }
  190.         if (key3pressed==0)
  191.         {
  192.                 delaySTD_ms(KEYPRESSTIME);
  193.                 if (key3pressed==0)
  194.                 {
  195.                         while(!key3pressed);
  196.                         delaySTD_ms(KEYPRESSTIME);
  197.                         return 3;
  198.                 }
  199.         }

  200.         return 0;
  201. }


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

使用道具 舉報

沙發(fā)
ID:112693 發(fā)表于 2017-10-24 22:52 | 只看該作者
學習一下,謝謝樓主!!!!!!!!!!!
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲女优在线播放 | 毛片高清 | 1204国产成人精品视频 | 99精品国自产在线 | 影音先锋中文字幕在线观看 | 国产成人久久久 | 亚洲高清在线 | 麻豆视频在线免费看 | 亚洲国产一区二区三区在线观看 | 久久91精品国产 | 日韩一区三区 | 亚洲一区二区免费视频 | 国产成人黄色 | 国产成人精品久久二区二区91 | 日韩三级一区 | av免费网址| 久久精品欧美一区二区三区不卡 | 精品国产一区二区三区久久久久久 | 亚洲女优在线播放 | 国产精品一区2区 | 一区二区三区免费 | 奇米久久久| 久草在线 | 午夜天堂精品久久久久 | 欧美a在线 | 一区二区小视频 | 中文字幕在线看第二 | 中文字幕一区二区三区乱码图片 | 韩日一区| 精品国产伦一区二区三区观看方式 | 国产精品美女久久久 | 精区3d动漫一品二品精区 | 亚洲精品乱码久久久久久按摩观 | 精品欧美一区二区精品久久久 | 久久国产精品久久久久久 | 一级黄色播放 | 成人三级网址 | 99亚洲精品 | 91国产精品在线 | 国产一区二区三区四区 | 国产高清精品在线 |