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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3318|回復: 1
收起左側

51單片機可控硅調光程序

[復制鏈接]
ID:242487 發表于 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為邊沿觸發
  38.         EX0 = 1;
  39.         //開啟定時中斷
  40.         TMOD = 0x01;                 //T0定時方式1
  41.     b =8;//初亮度調整
  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產生這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產生這10種時長

  53.         EA = 1;


  54. //調光級別從0到4共5級別 能調光級別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)  //調滅
  83.                                 {
  84.                                         b++;
  85.                                 }
  86.                          if(buf==2)
  87.                                 {//二鍵調亮。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;//仍然最亮   //歷史:在這里調整周期.不能無限增加
  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次外部中斷產生,其滅會等待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. }


復制代碼
回復

使用道具 舉報

ID:112693 發表于 2017-10-24 22:52 | 顯示全部樓層
學習一下,謝謝樓主!!!!!!!!!!!
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲视频国产 | av片免费 | 国产精品久久久久久久久久妇女 | 国产精品99精品久久免费 | 欧美日韩久久精品 | 久久久www成人免费无遮挡大片 | 国产精品国产精品国产专区不蜜 | 在线一区 | 黄网免费 | 成人网av | 日韩久久精品电影 | 国产福利久久 | 国产在视频一区二区三区吞精 | 九一视频在线观看 | 免费观看一级黄色录像 | 国产精品一区二区在线播放 | 精品国产乱码久久久久久蜜退臀 | 亚洲91视频| 亚洲成人网在线播放 | 亚洲国产一区在线 | 久久久综合网 | 久久亚洲国产精品日日av夜夜 | 三级av在线 | 夜夜操操操 | 午夜视频免费在线观看 | 在线久草| 国产精品久久久久久婷婷天堂 | 欧美精品久久久久久久久老牛影院 | 国产精品一区二区在线免费观看 | 在线观看中文字幕亚洲 | 欧美成年人网站 | 日韩成人av在线 | 婷婷五月色综合香五月 | 国产在线视频在线观看 | 日本在线视频中文字幕 | 亚洲一区在线日韩在线深爱 | 曰批视频在线观看 | 亚洲精品视频免费 | 精品视频一区在线 | 国产精品久久久久久久久久久久久 | 91视视频在线观看入口直接观看 |