找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2645|回復(fù): 8
打印 上一主題 下一主題
收起左側(cè)

怎樣修改單片機(jī)程序可以調(diào)節(jié)led燈的亮起的時(shí)間或者可以調(diào)節(jié)小燈l亮度

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:881626 發(fā)表于 2021-4-21 16:28 | 只看該作者 回帖獎勵 |倒序?yàn)g覽 |閱讀模式
有大佬可以幫忙看一下
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #define uint unsigned int
  4. #define uchar  unsigned char
  5. //°′?ü?¨
  6. sbit k1=P1^0;                  
  7. sbit k2=P1^1;                 
  8. sbit k3=P1^2;                  
  9. sbit k4=P1^3;                  

  10. //oì
  11. sbit IRIN=P3^2;               
  12. sbit led=P3^7;                    
  13. uchar IrValue[4];                  
  14.    
  15. uchar flag=0;                  
  16. uchar mode=0;               
  17. uchar light;                  
  18. char k;                        
  19. uint count;                       
  20. uint time;                    

  21. void init()                    
  22. {
  23.     EA=1;                    
  24.     ET0=1;               
  25.     TMOD=0x01;                /
  26.     TR0=1;               
  27.     EX0=1;               
  28.     IT0=1;               
  29.     TH0=(65536-50000)/256;            
  30.     TL0=(65536-50000)%256;
  31.     k=0;                    
  32. }

  33. void delay(uint z)            
  34. {
  35.     uint x,y;
  36.     for(x=z;x>0;x--)
  37.      for(y=13;y>0;y--);
  38. }

  39. void key1()
  40. {
  41.     if(k1==0)               
  42.    
  43.         delay(36);            
  44.         if(k1==0)
  45.         {
  46.             if(mode==0)        
  47.             {   
  48.                 mode=1;
  49.             }
  50.             else
  51.             {
  52.                 mode=0;
  53.             }
  54.             if(flag==1)
  55.             {
  56.                 P2=0xff;
  57.                 flag=0;
  58.             }
  59.             while(!k1);
  60.         }                 
  61.     }  
  62. }

  63. void key2()                    
  64. {
  65.     if(k2==0)               
  66.     {               
  67.         delay(36);         
  68.         if(k2==0)
  69.         {
  70.             if(flag==0)        
  71.             {
  72.                 flag=1;
  73.             }
  74.             else
  75.             {
  76.                 flag=0;
  77.                 k=9;
  78.             }
  79.             while(!k2);     
  80.         }
  81.     }
  82. }

  83. void key3()                    
  84. {
  85.     if(k3==0)           
  86.     {                    
  87.         delay(36);               
  88.         if(k3==0)
  89.         {
  90.               TH0=(65536-50000)/256;     
  91.             TL0=(65536-50000)%256;
  92.             light=1;
  93.             count=0;
  94.             k++;
  95.             if(k>8) k=8;
  96.             while(!k3);   
  97.         }
  98.     }
  99. }
  100. void key4()
  101. {
  102.     if(k4==0)               
  103.     {
  104.         delay(36);            
  105.         if(k4==0)
  106.         {
  107.             TH0=(65536-50000)/256;
  108.             TL0=(65536-50000)%256;
  109.             light=1;
  110.             count=0;
  111.             k--;
  112.             if(k<0) k=0;
  113.             while(!k4);
  114.         }                 
  115.     }
  116. }
  117. void  keyscan()                        
  118. {     
  119.     uint i,j;
  120.         key2();
  121.     if(k==9)
  122.     {
  123.         P2=0xff;
  124.         k=0;
  125.     }
  126.     if(flag!=0)         
  127.     {         
  128.         key3();
  129.           key4();
  130.            switch(k)
  131.            {
  132.             case 0:{P2=0;break;}        
  133.             case 1:{P2=0X55;break;}        
  134.             case 2:{P2=0XAA;break;}        
  135.             case 3:{P2=0X0F;break;}        
  136.             case 4:{P2=0XF0;break;}        
  137.             case 5:{               
  138.                     if(light==1)   
  139.                     {
  140.                         P2=0xf0;
  141.                     }
  142.                     if(k!=5||mode!=0) break;
  143.                     if(light==0)
  144.                     {
  145.                         P2=0x0f;
  146.                     }
  147.                         key2();
  148.                     if(k==9)  
  149.                     {
  150.                         P2=0xff;
  151.                         break;
  152.                     }
  153.                     if(k!=5||mode!=0) break;
  154.                     break;
  155.                     }
  156.             case 6:{                        
  157.                         P2=0XFE;
  158.                         for(j=0;j<8;j++)        
  159.                         {
  160.                             for(i=0;i<5700;i++)
  161.                             {
  162.                                                          
  163.                                 key1();
  164.                                 key2();
  165.                                 key3();
  166.                                 key4();
  167.                                 if(k!=6||mode!=0) break;
  168.                             }                                
  169.                             P2=_crol_(P2,1);
  170.                         if(k!=6||mode!=0) break;
  171.                         }
  172.                         break;
  173.                     }
  174.             case 7:    {                    
  175.                           if(light==1)
  176.                         {   
  177.                             P2=0x55;         
  178.                         }
  179.                         if(k!=7||mode!=0) break;
  180.                         if(light==0)
  181.                         {   
  182.                             P2=0xaa;           
  183.                         }
  184.                         if(k!=7||mode!=0) break;
  185.                         break;
  186.                     }
  187.             case 8:{                          
  188.                          if(light==1)   
  189.                         {
  190.                             P2=0;            
  191.                         }            
  192.                         if(k!=8||mode!=0) break;
  193.                         if(light==0)
  194.                         {
  195.                             P2=0xff;         
  196.                         }
  197.                         break;
  198.                 }
  199.             }
  200.     }
  201. }

  202. void  Irkeyscan()               
  203. {         
  204.     uint i,j;
  205.     if(k==9)
  206.     {
  207.         P2=0xff;
  208.         k=0;
  209.     }
  210.     if(flag!=0)         
  211.     {         
  212.            switch(k)
  213.            {
  214.             case 0:{P2=0;break;}   
  215.             case 1:{P2=0X55;break;}   
  216.             case 2:{P2=0XAA;break;}   
  217.             case 3:{P2=0X0F;break;}   
  218.             case 4:{P2=0XF0;break;}   
  219.             case 5:{               
  220.                     if(light==1)   
  221.                     {
  222.                         P2=0xf0;
  223.                     }
  224.                     if(k!=5||mode!=1) break;
  225.                     if(light==0)
  226.                     {
  227.                         P2=0x0f;
  228.                     }
  229.                     if(k==9)  
  230.                     {
  231.                         P2=0xff;
  232.                         break;
  233.                     }
  234.                     if(k!=5||mode!=1)  break;
  235.                     key1();
  236.                     break;
  237.                     }
  238.             case 6:{   
  239.                         P2=0Xfe;
  240.                         for(j=0;j<8;j++)   
  241.                         {
  242.                             for(i=0;i<10000;i++)
  243.                         {
  244.                             key1();
  245.                             if(k!=6||mode!=1)  break;
  246.                         }
  247.                             P2=_crol_(P2,1);
  248.                         }
  249.                         key1();
  250.                         break;
  251.                     }
  252.             case 7:    {   
  253.                           if(light==1)
  254.                         {   
  255.                             P2=0x55;     
  256.                         }
  257.                         if(k!=7||mode!=1)  break;
  258.                         key1();
  259.                         if(light==0)
  260.                         {   
  261.                             P2=0xaa;           
  262.                         }
  263.                         if(k!=7||mode!=1)  break;
  264.                         break;
  265.                     }
  266.             case 8:{         
  267.                          if(light==1)   
  268.                         {
  269.                             P2=0;     
  270.                         }
  271.                         key1();
  272.                         if(k!=8||mode!=1)  break;
  273.                         if(light==0)
  274.                         {
  275.                             P2=0xff;     
  276.                         }
  277.                         break;
  278.                 }      
  279.             }
  280.     }   
  281. }   
  282. void main()
  283. {
  284.     init();
  285.     while(1)
  286.     {
  287.         key1();
  288.         if(mode==0)
  289.         {   
  290.             keyscan();
  291.             led=1;
  292.         }
  293.         else
  294.         {
  295.             led=0;
  296.             Irkeyscan();
  297.         }

  298.     }
  299. }
  300. void IrRead() interrupt 0        
  301. {
  302.     uchar a,b;   
  303.     uint err;                           
  304.     time=0;
  305.     delay(70);

  306.     if(IRIN==0)               
  307.     {
  308.         err=1000;
  309.         while(IRIN==0&&err>0)   
  310.         {
  311.             delay(1);
  312.             err--;
  313.         }
  314.         if(IRIN==1)              
  315.         {
  316.             err=500;
  317.             while(IRIN==1&&err>0)   
  318.             {
  319.                 delay(1);
  320.                 err--;
  321.             }
  322.             for(a=0;a<4;a++)        
  323.             {
  324.                 for(b=0;b<8;b++)   
  325.                 {
  326.                     err=60;
  327.                     while(IRIN==0&&err>0)   
  328.                     {
  329.                         delay(1);
  330.                         err--;
  331.                     }
  332.                     err=500;
  333.                     while(IRIN==1&&err>0)   
  334.                     {
  335.                         delay(1);
  336.                         time++;
  337.                         err--;

  338.                         if(time>30)
  339.                         {
  340.                             EX0=1;
  341.                             return;
  342.                         }
  343.                     }
  344.                     IrValue[a]>>=1;            
  345.                     if(time>=8)               
  346.                     {
  347.                         IrValue[a]|=0x80;   
  348.                     }
  349.                     time=0;               
  350.                 }   
  351.             }
  352.         }
  353.         if(IrValue[2]!=~IrValue[3])
  354.         {
  355.             return;
  356.         }
  357.         if(IrValue[2]==0x0c)   
  358.         {
  359.             if(flag==0)
  360.             {
  361.                 flag=1;      
  362.                 k=0;
  363.             }
  364.             else
  365.             {
  366.                 flag=0;      
  367.                 P1=0xff;
  368.                 k=9;
  369.             }
  370.         }
  371.         if(IrValue[2]==0x18)     
  372.         {
  373.             k++;
  374.             if(k>8)
  375.                 k=8;
  376.         }
  377.         if(IrValue[2]==0x5E)        
  378.         {
  379.             k--;
  380.             if(k<=0)
  381.                 k=0;
  382.         }   
  383.     }
  384. }
  385. void Timer0() interrupt 1
  386. {
  387.          TH0=(65536-50000)/256;
  388.          TL0=(65536-50000)%256;
  389.          count++;
  390.        if(count<10&&count>0)                    
  391.        {
  392.            light=1;
  393.        }
  394.        if(count>=10&&count<20)
  395.        {
  396.            light=0;
  397.        }
  398.        if(count==20)
  399.        {
  400.            count=0;
  401.        }
  402. }
復(fù)制代碼


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

使用道具 舉報(bào)

沙發(fā)
ID:592807 發(fā)表于 2021-4-21 17:59 | 只看該作者
亮起時(shí)間?你想要它什么時(shí)候亮都行,只要你的定時(shí)器不跑飛20小時(shí)后亮都行,改變亮度參照pwm
回復(fù)

使用道具 舉報(bào)

板凳
ID:881626 發(fā)表于 2021-4-21 21:17 | 只看該作者
黃youhui 發(fā)表于 2021-4-21 17:59
亮起時(shí)間?你想要它什么時(shí)候亮都行,只要你的定時(shí)器不跑飛20小時(shí)后亮都行,改變亮度參照pwm

我實(shí)物已經(jīng)好了,沒有pwm,就是想著怎樣不加元器件可以改變亮度或者流水燈的閃爍持續(xù)時(shí)間
回復(fù)

使用道具 舉報(bào)

地板
ID:743992 發(fā)表于 2021-4-21 22:00 | 只看該作者
pwm不是硬件是軟件,中文名脈寬調(diào)制,使用定時(shí)器很容易實(shí)現(xiàn)
閃爍時(shí)間也是定時(shí)器解決。如果硬件定時(shí)器資源不夠可以自己寫軟件定時(shí)器。能達(dá)到效果就行。
回復(fù)

使用道具 舉報(bào)

5#
ID:59830 發(fā)表于 2021-4-21 22:04 | 只看該作者
沒有PWM,多用1個(gè)定時(shí)器,
例如: 數(shù)碼管動態(tài)掃描1ms定時(shí)器 ,
加個(gè)10us定時(shí)器。1個(gè)變量標(biāo)志位就可以.
1ms/10us=100 級亮度.
回復(fù)

使用道具 舉報(bào)

6#
ID:894154 發(fā)表于 2021-4-22 07:45 | 只看該作者
調(diào)整占空比就可以調(diào)整亮度 PWM=0 全滅 PWM=0.5 中等亮度 PWM=1 最亮
回復(fù)

使用道具 舉報(bào)

7#
ID:164620 發(fā)表于 2021-4-22 15:35 | 只看該作者
用PWM加一個(gè)電容
回復(fù)

使用道具 舉報(bào)

8#
ID:881626 發(fā)表于 2021-4-25 15:26 | 只看該作者
yygdzjs 發(fā)表于 2021-4-21 22:04
沒有PWM,多用1個(gè)定時(shí)器,
例如: 數(shù)碼管動態(tài)掃描1ms定時(shí)器 ,
加個(gè)10us定時(shí)器。1個(gè)變量標(biāo)志位就可以.

還需要加按鍵嗎
回復(fù)

使用道具 舉報(bào)

9#
ID:881626 發(fā)表于 2021-4-25 15:42 | 只看該作者
yygdzjs 發(fā)表于 2021-4-21 22:04
沒有PWM,多用1個(gè)定時(shí)器,
例如: 數(shù)碼管動態(tài)掃描1ms定時(shí)器 ,
加個(gè)10us定時(shí)器。1個(gè)變量標(biāo)志位就可以.

那如果再控制燈的閃爍時(shí)間是不是還要再添加兩個(gè)定時(shí)器來控制,比如一個(gè)定時(shí)器讓他亮一秒,另一個(gè)讓他滅1.5秒這樣的
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表