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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機遙控器控制LED燈亮模式的設計

[復制鏈接]
跳轉到指定樓層
樓主
ID:826754 發表于 2021-6-26 10:00 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
本人小白,新學單片機,想做一個我車用的轉向燈。
要求為遙控器控制三種亮燈模式:遙控器選擇LED亮燈模式,轉向信號觸發。
模式一:轉向燈信號接收到后LED燈閃光。
模式二:轉向燈信號接收到后LED燈流光。
模式三:轉向燈信號接收到后LED燈先閃光二次再流光一次。
求高人指點思路及代碼應怎樣編寫。
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:123289 發表于 2021-6-26 15:16 | 只看該作者
1、先寫三個程序分別完成你的三個模式,程序的名子就叫:M1、M2、M3。
2、遙控器放三個按鈕,按鈕上標記為:M1、M2、M3。并記下按下M1、M2、M3后發出的編碼,假設分別是N1、N2、N3。
3、做個遙控器的接收器,
當收到的信號是N1是就將【子程序入口】指向M1程序,
當收到的信號是N2是就將【子程序入口】指向M2程序,
當收到的信號是N3是就將【子程序入口】指向M3程序,
4、當轉向觸發信號到起時,就調用【子程序入口】所指向的程序。


回復

使用道具 舉報

板凳
ID:826754 發表于 2021-6-26 15:50 | 只看該作者
yzwzfyz 發表于 2021-6-26 15:16
1、先寫三個程序分別完成你的三個模式,程序的名子就叫:M1、M2、M3。
2、遙控器放三個按鈕,按鈕上標記為 ...

調用子程序的接口程序的代碼不知道怎么寫才能指向想要的子程序。
回復

使用道具 舉報

地板
ID:826754 發表于 2021-7-6 09:41 | 只看該作者
有沒有大佬幫忙看看怎樣用STC8F的來解碼后執行那三個模式呢?
回復

使用道具 舉報

5#
ID:161164 發表于 2021-7-6 17:05 | 只看該作者
川蜀浪子 發表于 2021-6-26 15:50
調用子程序的接口程序的代碼不知道怎么寫才能指向想要的子程序。
  1. if(RxBuff !=0)
  2. {
  3.         if(RxBuff == N1)
  4.         {
  5.                 M1_Flag = 1;
  6.         }
  7.         if(RxBuff == N2)
  8.         {
  9.                 M2_Flag = 1;
  10.         }
  11.         if(RxBuff == N3)
  12.         {
  13.                 M3_Flag = 1;
  14.         }
  15.         RxBuff = 0;
  16. }
  17. if(M1_Flag){
  18.         M1();
  19. }
  20. if(M2_Flag){
  21.         M2();
  22. }
  23. if(M3_Flag){
  24.         M3();
  25. }
復制代碼


Mx_Flag要在用完后清零
回復

使用道具 舉報

6#
ID:826754 發表于 2021-7-12 15:20 | 只看該作者
lkc8210 發表于 2021-7-6 17:05
Mx_Flag要在用完后清零

謝謝大佬的指點,我試試看怎樣加入到STC的解碼中。
回復

使用道具 舉報

7#
ID:826754 發表于 2021-7-16 18:28 | 只看該作者
  1.                                   /***使用STC8F1K08S2-SOP16為主控轉向流光燈
  2. 1、上電掃描流光左右同時流光三次,日行燈亮。
  3. 2、雙閃時,左右同時接到信號,左右跟隨信號同時流光。
  4. 3、接收到左或右轉向信號時相應方向流光一次常亮。
  5. 4、斷開左或右轉向信號時,延時1秒日行燈LED11 100%亮度。
  6. 5、遙控選擇模式,D0接收到高電平時轉向燈流光。D1接收到高電平時轉向燈閃光。D2接收到高電平時先閃光兩次再流光一次。
  7. *****/

  8. #include <STC8Fxx.h>  
  9. typedef unsigned char u8;
  10. typedef unsigned int u16;
  11. /********端口引腳定義*****/  
  12. sbit KEYL=P5^5;    //設置左方向觸發信號
  13. //sbit KEYR=P5^4;    //設置右方向觸發信號
  14. //sbit LOCK=P3^0;    //設置上鎖觸發信號

  15. sbit LED6=P3^2;    //左方向流光燈設定
  16. sbit LED5=P3^3;
  17. sbit LED4=P3^4;
  18. sbit LED3=P3^5;
  19. sbit LED2=P3^6;
  20. sbit LED1=P3^7;    //右方向流光燈設定

  21. sbit D0=P1^1;           //遙控接收信號
  22. sbit D1=P1^0;           //遙控接收信號
  23. sbit D2=P1^6;           //遙控接收信號
  24. //sbit LEDA=P1^7;

  25. sbit LED11=P1^7;   //日行燈設定

  26. bit signl=0;       //觸發狀態標志
  27. //bit signr=0;
  28. //bit signk=0;
  29. //bit PWM;
  30. u16 count3=0,num;


  31. void keyScan();

  32. /*********定時器0初始化函數***********/
  33. void Timer0Init()                //5毫秒@11.0592MHz
  34. {
  35.         AUXR |= 0x80;                //定時器時鐘1T模式
  36.         TMOD &= 0xF0;                //設置自動重裝模式
  37.         TL0 = 0x00;                        //設置定時初值
  38.         TH0 = 0x28;                        //設置定時初值
  39.         TF0 = 0;                                //清除TF0標志
  40.         TR0 = 1;                                //定時器0開始計時
  41.         EA  = 1;                                //開總中斷
  42.         ET0 = 1;                                //開T0中斷
  43. }
  44. /********流光函數*********/
  45. void Led_L()
  46. {
  47.         if(num>25)              {LED1=1;LED2=0;LED3=0;LED4=0;LED5=0;LED6=0;}
  48.         else if(num<=25&&num>20){LED1=1;LED2=1;LED3=0;LED4=0;LED5=0;LED6=0;}
  49.         else if(num<=20&&num>15){LED1=1;LED2=1;LED3=1;LED4=0;LED5=0;LED6=0;}
  50.         else if(num<=15&&num>10){LED1=1;LED2=1;LED3=1;LED4=1;LED5=0;LED6=0;}
  51.         else if(num<=10&&num>5) {LED1=1;LED2=1;LED3=1;LED4=1;LED5=1;LED6=0;}
  52.         else if(num>0&&num==5)  {LED1=1;LED2=1;LED3=1;LED4=1;LED5=1;LED6=1;}
  53. }
  54. /*******閃光函數******/
  55. void Led_R()
  56. {
  57.         if(num>0&&num==25)              {LED1=1;LED2=1;LED3=1;LED4=1;LED5=1;LED6=1;}
  58.      
  59. }
  60. /*****掃描流光函數*****/   /***
  61. void Led_K()
  62. {
  63.                 if(num>270)                                        {LED1=0;LED2=0;LED3=0;LED4=0;LED5=1;       }
  64.                 else if(num<=270&&num>260)        {LED1=0;LED2=0;LED3=0;LED4=1;LED5=0;       }
  65.                 else if(num<=260&&num>250)        {LED1=0;LED2=0;LED3=1;LED4=0;LED5=0;       }
  66.                 else if(num<=250&&num>240)        {LED1=0;LED2=1;LED3=0;LED4=0;LED5=0;       }
  67.                 else if(num<=240&&num>230)        {LED1=1;LED2=0;LED3=0;LED4=0;LED5=0;       }
  68.                 else if(num<=230&&num>220)        {LED1=0;LED2=1;LED3=0;LED4=0;LED5=0;       }
  69.                 else if(num<=220&&num>210)        {LED1=0;LED2=0;LED3=1;LED4=0;LED5=0;       }
  70.                 else if(num<=210&&num>200)        {LED1=0;LED2=0;LED3=0;LED4=1;LED5=0;       }
  71.                 else if(num<=200&&num>190)        {LED1=0;LED2=0;LED3=0;LED4=0;LED5=1;       }     
  72.                 else if(num<=190&&num>180)        {LED1=0;LED2=0;LED3=0;LED4=1;LED5=0;       }
  73.                 else if(num<=180&&num>170)        {LED1=0;LED2=0;LED3=1;LED4=0;LED5=0;       }
  74.                 else if(num<=170&&num>160)        {LED1=0;LED2=1;LED3=0;LED4=0;LED5=0;       }
  75.                 else if(num<=160&&num>150)        {LED1=1;LED2=0;LED3=0;LED4=0;LED5=0;       }
  76.                 else if(num<=150&&num>140)        {LED1=1;LED2=0;LED3=0;LED4=0;LED5=1;       }
  77.                 else if(num<=140&&num>130)        {LED1=1;LED2=0;LED3=0;LED4=1;LED5=0;       }
  78.                 else if(num<=130&&num>120)        {LED1=1;LED2=0;LED3=1;LED4=0;LED5=0;       }
  79.                 else if(num<=120&&num>110)        {LED1=1;LED2=1;LED3=0;LED4=0;LED5=0;       }
  80.                 else if(num<=110&&num>100)        {LED1=1;LED2=1;LED3=0;LED4=0;LED5=1;       }
  81.                 else if(num<=100&&num>90)        {LED1=1;LED2=1;LED3=0;LED4=1;LED5=0;       }
  82.                 else if(num<=90&&num>80)        {LED1=1;LED2=1;LED3=1;LED4=0;LED5=0;       }
  83.                 else if(num<=80&&num>70)        {LED1=1;LED2=1;LED3=1;LED4=0;LED5=1;       }
  84.                 else if(num<=70&&num>60)        {LED1=1;LED2=1;LED3=1;LED4=1;LED5=0;       }
  85.                 else if(num<=60&&num>50)        {LED1=1;LED2=1;LED3=1;LED4=1;LED5=1;       }
  86.                 else if(num<=50&&num>40)        {LED1=0;LED2=1;LED3=1;LED4=1;LED5=1;       }
  87.                 else if(num<=40&&num>30)        {LED1=0;LED2=0;LED3=1;LED4=1;LED5=1;       }
  88.                 else if(num<=30&&num>20)        {LED1=0;LED2=0;LED3=0;LED4=1;LED5=1;       }
  89.                 else if(num<=20&&num>10)        {LED1=0;LED2=0;LED3=0;LED4=0;LED5=1;       }
  90.                 else if(num<=10&&num>0 )        {LED1=0;LED2=0;LED3=0;LED4=0;LED5=0;       }       
  91. }
  92. /******主函數區******/  
  93. void main()
  94. {
  95.      //   u8 i;
  96.         P3M0=0xFC;//P3.0P3.1為準雙向口,其它為推挽輸出。      
  97.         P3M1=0x00;
  98.         P1M0=0x80;//設P1口為推挽輸出,
  99.         P1M1=0x3C;         
  100.         P5M0=0x00;//設P5.4、P5.5為準雙向口.        
  101.         P5M1=0x00;
  102.         P3=0X00;
  103.         P1=0X7F;
  104.                 P5=0X30;  //不可設為底電平   
  105.         Timer0Init();
  106.                 if(KEYL==1)
  107.           {
  108.            
  109.                    keyScan(); //把觸發部分的代碼打包成函數放在這里執行

  110.           }
  111.        else
  112.                   {LED11=1;}
  113.        //  {      
  114.        // for(i=0;i<1;i++)//上電掃描流光1次
  115.        //         {
  116.        //      num=280;//1.秒
  117.             // if(num==560)
  118.                 //          while(num)
  119.         //       {
  120.         //         Led_K();
  121.                      
  122.         //       }
  123.                 //        if(num==0)         
  124.                          
  125.         //        }  
  126.         // }          
  127.                   
  128.     while(1)         
  129.         {      
  130.                 if(KEYL==1)
  131.                  {                         
  132.                         keyScan();
  133.                  }
  134.         }         
  135. }
  136. /*********定時器0中斷服務函數*************/
  137. void timer0() interrupt 1      
  138. {
  139.         /* static unsigned char i=0;
  140.         if(i<3)PWM=1;//占空比75%
  141.         else PWM=0;
  142.         i++;
  143.         i%=4;             */
  144.     //    PWM=~PWM;//PWM周期10ms,占空比50%
  145.                                   
  146.                 if(num>0)
  147.                
  148.                 num--;          
  149.         //if(num==0)
  150.                 if(KEYL!=1)
  151.         {
  152.                 LED1=0;LED2=0;LED3=0;LED4=0;LED5=0;LED6=0;
  153.                                
  154.                                 signl=0;
  155.                
  156.                // signk=0;
  157.                         if(++count3>=150)//3秒延時
  158.                {
  159.                  count3=150; //保持
  160.                  LED11=1;                //LED11亮
  161.                }  
  162.         }
  163. }

  164. /********觸發子程序函數*********/

  165. void keyScan()
  166. {
  167.                             
  168.              if(KEYL==1  && signl==0 && D0==1 )//左轉流光
  169.                 {
  170.                                                 count3=0;        //計數3清0
  171.                         signl=1;
  172.                         num=25;
  173.                         while(num)
  174.                         {
  175.                                 LED11=0;//50%亮度
  176.                                 Led_L();
  177.                         }
  178.                        // LED11=1;
  179.                 }
  180.          if(KEYL==1  && signl==0 && D1==1 )//左轉閃光
  181.                 {
  182.                                                 count3=0;        //計數3清0
  183.                         signl=1;
  184.                         num=25;
  185.                         while(num)
  186.                         {
  187.                                 LED11=0;//50%亮度
  188.                                 Led_R();
  189.                         }
  190.                        // LED11=1;
  191.                 }  
  192.          if(KEYL==1  && signl==0 && D2==1 )//左轉閃光兩次流光一次
  193.                 {
  194.                                                 count3=0;        //計數3清0
  195.                         signl=1;
  196.                         num=25;
  197.                         while(num)
  198.                         {
  199.                                 LED11=0;//50%亮度
  200.                                 Led_R();
  201.                                                                 Led_R();
  202.                                                                 Led_L();
  203.                         }
  204.                        // LED11=1;
  205.                 }                                
  206.                                   
  207. }         


復制代碼

各位大佬,請幫看看第三種模式不能實現,要求中斷一次為閃光,再中斷一次閃光,再中斷一次流光,循環。
回復

使用道具 舉報

8#
ID:826754 發表于 2021-7-16 18:29 | 只看該作者
lkc8210 發表于 2021-7-6 17:05
Mx_Flag要在用完后清零

不會解碼,所以沒有搞出來,用了接收模塊的實現,但是第三個模式有問題。
回復

使用道具 舉報

9#
ID:161164 發表于 2021-7-18 00:34 | 只看該作者
川蜀浪子 發表于 2021-7-16 18:29
不會解碼,所以沒有搞出來,用了接收模塊的實現,但是第三個模式有問題。

先不管你Led_R();里的代碼有沒用你第三個模式的代碼有思路上的問題因為while(num)里的代碼是不斷循環的而且比中斷還要快
所以while(num)里的代碼運行是:

num=25:Led_R()->Led_R()->Led_L()->Led_R()->Led_R()->Led_L()->...->Led_R()->Led_R()->Led_L()
num=24:Led_R()->Led_R()->Led_L()->Led_R()->Led_R()->Led_L()->...->Led_R()->Led_R()->Led_L()
num=23:Led_R()->Led_R()->Led_L()->Led_R()->Led_R()->Led_L()->...->Led_R()->Led_R()->Led_L().
.
.
num=2:Led_R()->Led_R()->Led_L()->Led_R()->Led_R()->Led_L()->...->Led_R()->Led_R()->Led_L()
num=1:Led_R()->Led_R()->Led_L()->Led_R()->Led_R()->Led_L()->...->Led_R()->Led_R()->Led_L()
num=0:Led_R()->Led_R()->Led_L()->Led_R()->Led_R()->Led_L()->...->Led_R()->Led_R()->Led_L()
表現出來就是亂閃
應該改為:
  1.     if(KEYL==1  && signl==0 && D2==1 )//左轉閃光兩次流光一次
  2.     {
  3.         count3=0;        //計數3清0
  4.         signl=1;
  5.         num=25;
  6.         while(num)
  7.         {
  8.             LED11=0;//50%亮度
  9.             Led_R();
  10.         }
  11.         num=25;
  12.         while(num)
  13.         {
  14.             LED11=0;//50%亮度
  15.             Led_R();
  16.         }
  17.         num=25;
  18.         while(num)
  19.         {
  20.             LED11=0;//50%亮度
  21.             Led_L();
  22.         }
  23.         // LED11=1;
  24.     }
復制代碼
不過我從來都反對在大while(1)以內用其它while(xxx)
系統簡單還好,如果有其它功能如按鍵掃描,數碼管動態刷新等
就會被這個while(xxx)擔誤了
就如你的代碼
在收到接收模塊的信號后就要等其模式跑完后才能換其它模式

回復

使用道具 舉報

10#
ID:826754 發表于 2021-7-18 09:09 | 只看該作者
lkc8210 發表于 2021-7-18 00:34
先不管你Led_R();里的代碼有沒用你第三個模式的代碼有思路上的問題因為while(num)里的代碼是不斷循環的而 ...

謝謝大神的指點,剛才放入程序中試了一下,這樣的情況是在一個中斷中來完成這三種,我想要的是在三個中斷完成這三次閃光,第一次中斷為閃光,第二次中斷為閃光,第三次中斷為流光。然后又是循環這樣的功能。
回復

使用道具 舉報

11#
ID:950257 發表于 2021-7-18 11:26 | 只看該作者
只需要對你的遙控器正確解碼,然后就和按鍵檢測原理一樣了
回復

使用道具 舉報

12#
ID:161164 發表于 2021-7-18 12:14 來自手機 | 只看該作者
川蜀浪子 發表于 2021-7-18 09:09
謝謝大神的指點,剛才放入程序中試了一下,這樣的情況是在一個中斷中來完成這三種,我想要的是在三個中斷 ...

不明白你所說的"中斷"是什么意思
回復

使用道具 舉報

13#
ID:161164 發表于 2021-7-18 22:29 | 只看該作者
  1.     if(KEYL==1  && signl==0 && D2==1 )//左轉閃光兩次流光一次
  2.     {       
  3.                         static unsigned char mode = 0;
  4.         count3=0;        //計數3清0
  5.         //signl=1;
  6.         num=25;
  7.         while(num)
  8.         {
  9.             LED11=0;//50%亮度
  10.                                         switch (mode)
  11.           {
  12.                   case 0:
  13.             Led_R();
  14.                           break;
  15.                   case 1:
  16.             Led_R();
  17.                           break;
  18.                   case 2:
  19.             Led_L();
  20.                           break;
  21.                   default:
  22.                           break;
  23.           }
  24.         }
  25.                                 mode++;
  26.                                 mode%=3;
  27.         // LED11=1;
  28.     }
復制代碼
回復

使用道具 舉報

14#
ID:826754 發表于 2021-7-22 11:19 | 只看該作者

首先在這里謝謝大神的幫助,讓我達到了想要的效果,加入大神的代碼后可以達到選擇的流光模式。但同時我又出現了新的問題點就是用遙控選擇好模式后單片機斷電后就再上電時就沒有之前選好的模式了,我使用的是四路無線接收模塊,那是否可以用單片機來保存上電后還是上次的選擇模式。
以下是改好的程序:但不能保存上次的選擇模式。

  1. /***使用STC8F1K08S2-SOP16為主控遙控選擇轉向流光燈
  2. 1、上電掃描流光左右同時流光三次,日行燈亮。
  3. 2、雙閃時,左右同時接到信號,左右跟隨信號同時流光。
  4. 3、接收到左或右轉向信號時相應方向流光一次常亮,日行燈滅。
  5. 4、斷開左或右轉向信號時,延時2秒日行燈LED11 100%亮度。
  6. 5、遙控選擇模式,D0接收到高電平時轉向燈流光。D1接收到高電平時轉向燈閃光。D2接收到高電平時先閃光兩次再流光一次。
  7. *****/

  8. #include <STC8Fxx.h>  
  9. typedef unsigned char u8;
  10. typedef unsigned int u16;
  11. /********端口引腳定義*****/  
  12. sbit KEYL=P5^5;    //設置左方向觸發信號
  13. //sbit KEYR=P5^4;    //設置右方向觸發信號
  14. //sbit LOCK=P3^0;    //設置上鎖觸發信號

  15. sbit LED6=P3^2;    //左方向流光燈設定
  16. sbit LED5=P3^3;
  17. sbit LED4=P3^4;
  18. sbit LED3=P3^5;
  19. sbit LED2=P3^6;
  20. sbit LED1=P3^7;    //右方向流光燈設定

  21. sbit D0=P1^1;           //遙控接收信號
  22. sbit D1=P1^0;           //遙控接收信號
  23. sbit D2=P1^6;           //遙控接收信號
  24. //sbit LEDA=P1^7;

  25. sbit LED11=P1^7;   //日行燈設定

  26. bit signl=0;       //觸發狀態標志
  27. //bit signr=0;
  28. //bit signk=0;
  29. //bit signy=0;
  30. //bit PWM;
  31. u16 count3=0,num;


  32. void keyScan();

  33. /*********定時器0初始化函數***********/
  34. void Timer0Init()                //5毫秒@11.0592MHz
  35. {
  36.         AUXR |= 0x80;                //定時器時鐘1T模式
  37.         TMOD &= 0xF0;                //設置自動重裝模式
  38.         TL0 = 0x00;                        //設置定時初值
  39.         TH0 = 0x28;                        //設置定時初值
  40.         TF0 = 0;                                //清除TF0標志
  41.         TR0 = 1;                                //定時器0開始計時
  42.         EA  = 1;                                //開總中斷
  43.         ET0 = 1;                                //開T0中斷
  44. }
  45. /********左流光函數*********/
  46. void Led_L()
  47. {
  48.         if(num>25)              {LED1=1;LED2=0;LED3=0;LED4=0;LED5=0;LED6=0;}
  49.         else if(num<=25&&num>20){LED1=1;LED2=1;LED3=0;LED4=0;LED5=0;LED6=0;}
  50.         else if(num<=20&&num>15){LED1=1;LED2=1;LED3=1;LED4=0;LED5=0;LED6=0;}
  51.         else if(num<=15&&num>10){LED1=1;LED2=1;LED3=1;LED4=1;LED5=0;LED6=0;}
  52.         else if(num<=10&&num>5) {LED1=1;LED2=1;LED3=1;LED4=1;LED5=1;LED6=0;}
  53.         else if(num>0&&num==5)  {LED1=1;LED2=1;LED3=1;LED4=1;LED5=1;LED6=1;}
  54. }
  55. /*******右流光函數******/
  56. void Led_R()
  57. {
  58.         if(num>0&&num==25)              {LED1=1;LED2=1;LED3=1;LED4=1;LED5=1;LED6=1;}
  59.        // else if(num<=50&&num>40){LED6=1;LED7=1;LED8=0;LED9=0;LEDA=0;}
  60.        // else if(num<=40&&num>30){LED6=1;LED7=1;LED8=1;LED9=0;LEDA=0;}
  61.        // else if(num<=30&&num>20){LED6=1;LED7=1;LED8=1;LED9=1;LEDA=0;}
  62.        // else if(num<=20&&num>10){LED6=1;LED7=1;LED8=1;LED9=1;LEDA=1;}
  63.        // else if(num>0&&num==10)    {LED6=0;LED7=0;LED8=0;LED9=0;LEDA=0;}
  64. }
  65. /*****掃描流光函數*****/   /***
  66. void Led_K()
  67. {
  68.                 if(num>270)                                        {LED1=0;LED2=0;LED3=0;LED4=0;LED5=1;       }
  69.                 else if(num<=270&&num>260)        {LED1=0;LED2=0;LED3=0;LED4=1;LED5=0;       }
  70.                 else if(num<=260&&num>250)        {LED1=0;LED2=0;LED3=1;LED4=0;LED5=0;       }
  71.                 else if(num<=250&&num>240)        {LED1=0;LED2=1;LED3=0;LED4=0;LED5=0;       }
  72.                 else if(num<=240&&num>230)        {LED1=1;LED2=0;LED3=0;LED4=0;LED5=0;       }
  73.                 else if(num<=230&&num>220)        {LED1=0;LED2=1;LED3=0;LED4=0;LED5=0;       }
  74.                 else if(num<=220&&num>210)        {LED1=0;LED2=0;LED3=1;LED4=0;LED5=0;       }
  75.                 else if(num<=210&&num>200)        {LED1=0;LED2=0;LED3=0;LED4=1;LED5=0;       }
  76.                 else if(num<=200&&num>190)        {LED1=0;LED2=0;LED3=0;LED4=0;LED5=1;       }     
  77.                 else if(num<=190&&num>180)        {LED1=0;LED2=0;LED3=0;LED4=1;LED5=0;       }
  78.                 else if(num<=180&&num>170)        {LED1=0;LED2=0;LED3=1;LED4=0;LED5=0;       }
  79.                 else if(num<=170&&num>160)        {LED1=0;LED2=1;LED3=0;LED4=0;LED5=0;       }
  80.                 else if(num<=160&&num>150)        {LED1=1;LED2=0;LED3=0;LED4=0;LED5=0;       }
  81.                 else if(num<=150&&num>140)        {LED1=1;LED2=0;LED3=0;LED4=0;LED5=1;       }
  82.                 else if(num<=140&&num>130)        {LED1=1;LED2=0;LED3=0;LED4=1;LED5=0;       }
  83.                 else if(num<=130&&num>120)        {LED1=1;LED2=0;LED3=1;LED4=0;LED5=0;       }
  84.                 else if(num<=120&&num>110)        {LED1=1;LED2=1;LED3=0;LED4=0;LED5=0;       }
  85.                 else if(num<=110&&num>100)        {LED1=1;LED2=1;LED3=0;LED4=0;LED5=1;       }
  86.                 else if(num<=100&&num>90)        {LED1=1;LED2=1;LED3=0;LED4=1;LED5=0;       }
  87.                 else if(num<=90&&num>80)        {LED1=1;LED2=1;LED3=1;LED4=0;LED5=0;       }
  88.                 else if(num<=80&&num>70)        {LED1=1;LED2=1;LED3=1;LED4=0;LED5=1;       }
  89.                 else if(num<=70&&num>60)        {LED1=1;LED2=1;LED3=1;LED4=1;LED5=0;       }
  90.                 else if(num<=60&&num>50)        {LED1=1;LED2=1;LED3=1;LED4=1;LED5=1;       }
  91.                 else if(num<=50&&num>40)        {LED1=0;LED2=1;LED3=1;LED4=1;LED5=1;       }
  92.                 else if(num<=40&&num>30)        {LED1=0;LED2=0;LED3=1;LED4=1;LED5=1;       }
  93.                 else if(num<=30&&num>20)        {LED1=0;LED2=0;LED3=0;LED4=1;LED5=1;       }
  94.                 else if(num<=20&&num>10)        {LED1=0;LED2=0;LED3=0;LED4=0;LED5=1;       }
  95.                 else if(num<=10&&num>0 )        {LED1=0;LED2=0;LED3=0;LED4=0;LED5=0;       }       
  96. }
  97. /******主函數區******/  
  98. void main()
  99. {
  100.      //   u8 i;
  101.         P3M0=0xFC;//P3.0P3.1為準雙向口,其它為推挽輸出。      
  102.         P3M1=0x00;
  103.         P1M0=0x80;//設P1口為推挽輸出,
  104.         P1M1=0x3C;         
  105.         P5M0=0x00;//設P5.4、P5.5為準雙向口.        
  106.         P5M1=0x00;
  107.         P3=0X00;
  108.         P1=0X7F;
  109.                 P5=0X30;  //不可設為底電平   
  110.         Timer0Init();
  111.                 if(KEYL==1)
  112.           {
  113.            
  114.                    keyScan(); //把觸發部分的代碼打包成函數放在這里執行

  115.           }
  116.        else
  117.                   {LED11=1;}
  118.        //  {      
  119.        // for(i=0;i<1;i++)//上電掃描流光1次
  120.        //         {
  121.        //      num=280;//1.秒
  122.             // if(num==560)
  123.                 //          while(num)
  124.         //       {
  125.         //         Led_K();
  126.                      
  127.         //       }
  128.                 //        if(num==0)         
  129.                          
  130.         //        }  
  131.         // }          
  132.                   
  133.     while(1)         
  134.         {      
  135.                 if(KEYL==1)
  136.                  {                         
  137.                         keyScan();
  138.                  }
  139.         }         
  140. }
  141. /*********定時器0中斷服務函數*************/
  142. void timer0() interrupt 1      
  143. {
  144.         /* static unsigned char i=0;
  145.         if(i<3)PWM=1;//占空比75%
  146.         else PWM=0;
  147.         i++;
  148.         i%=4;             */
  149.     //    PWM=~PWM;//PWM周期10ms,占空比50%
  150.                                   
  151.                 if(num>0)
  152.                
  153.                 num--;          
  154.         //if(num==0)
  155.                 if(KEYL!=1)
  156.         {
  157.                 LED1=0;LED2=0;LED3=0;LED4=0;LED5=0;LED6=0;
  158.                                
  159.                                 signl=0;
  160.                         //        signr=0;
  161.                            
  162.                        
  163.                   
  164.                                
  165.                           
  166.                

  167.                         if(++count3>=150)//1.5秒延時
  168.                {
  169.                  count3=150; //保持
  170.                  LED11=1;                //日行燈亮
  171.                }  
  172.         }
  173. }

  174. /********觸發子程序函數*********/

  175. void keyScan()
  176. {
  177.                             
  178.              if(KEYL==1  && signl==0 && D0==1 )//左轉流光
  179.                 {
  180.                                                 count3=0;        //計數3清0
  181.                         signl=1;
  182.                         num=25;
  183.                         while(num)
  184.                         {
  185.                                 LED11=0;//日行燈滅
  186.                                 Led_L();
  187.                         }
  188.                        
  189.                 }
  190.              if(KEYL==1  && signl==0 && D1==1 )//左轉閃光
  191.                 {
  192.                                                 count3=0;        //計數3清0
  193.                         signl=1;
  194.                         num=25;
  195.                         while(num)
  196.                         {
  197.                                 LED11=0;//日行燈滅
  198.                                 Led_R();
  199.                         }
  200.                        ;
  201.                 }  
  202.             if(KEYL==1  && signl==0 && D2==1 )//左轉閃光兩次流光一次
  203.                 {      
  204.                 static unsigned char mode = 0;
  205.                 count3=0;        //計數3清0
  206.                 signl=1;
  207.                 num=25;
  208.                 while(num)
  209.                  {
  210.                   LED11=0;//日行燈滅
  211.                   switch (mode)
  212.                    {
  213.                   case 0:
  214.             Led_R();
  215.                           break;
  216.                   case 1:
  217.             Led_R();
  218.                           break;
  219.                   case 2:
  220.             Led_L();
  221.                           break;
  222.                   default:
  223.                           break;
  224.                   }
  225.                 }
  226.                                 mode++;
  227.                                 mode%=3;
  228.                
  229.                }
  230. }
復制代碼
回復

使用道具 舉報

15#
ID:161164 發表于 2021-7-23 00:28 | 只看該作者
川蜀浪子 發表于 2021-7-22 11:19
首先在這里謝謝大神的幫助,讓我達到了想要的效果,加入大神的代碼后可以達到選擇的流光模式。但同時我又 ...

那就涉及到EEPROM的讀寫操作了
可搜索壇內STC EEPROM操作的例子
或參考STC-ISP內的范例
回復

使用道具 舉報

16#
ID:826754 發表于 2021-7-23 08:40 | 只看該作者
lkc8210 發表于 2021-7-23 00:28
那就涉及到EEPROM的讀寫操作了
可搜索壇內STC EEPROM操作的例子
或參考STC-ISP內的范例

謝謝大神的指點,但目前對STC EEPROM的操作還一點都不懂,看了手冊的例程也沒明白要怎樣寫入我想要的數據,可以請大神幫指點一下這方面的程序。
回復

使用道具 舉報

17#
ID:161164 發表于 2021-7-23 15:38 來自手機 | 只看該作者
川蜀浪子 發表于 2021-7-23 08:40
謝謝大神的指點,但目前對STC EEPROM的操作還一點都不懂,看了手冊的例程也沒明白要怎樣寫入我想要的數據 ...

例程中定義和函數部分照抄就可以
寫數據就是IapProgram(地址,數據)
讀數據就是 數據=IapRead(地址)
要注意STC EEPROM的寫是寫入零
所有地址的初始值為0xFF
如寫入0xA9(B10101001)后
就不能再寫入0xB9(B10111001)
但可寫入0x89(B10001001)
所以想更改EEProm中的數值,通常是先擦除再寫入
但擦除是按扇區(512字節)進行的
如果已儲存多于一個字節的數據
正常做法是
先讀取所有數據到變數中
更改某變數中的數值
擦除扇區
把所有變數寫入EEProm

評分

參與人數 1黑幣 +40 收起 理由
admin + 40 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲男女视频在线观看 | 日韩久久精品 | 中文字幕亚洲在线 | 亚洲视频在线观看 | 欧美在线视频一区二区 | 夜夜摸天天操 | 国产成人精品一区二区三区网站观看 | 完全免费在线视频 | 国产精品久久久久久久久久了 | 在线观看黄色大片 | 91社区在线观看播放 | 伊人狼人影院 | 毛片软件 | 国产一在线观看 | 国产一二区视频 | 一区二区三区在线观看视频 | 三级在线免费观看 | 日韩av一区二区在线 | 欧美国产日韩在线观看 | 欧美v片 | 国产精品免费观看 | 黄色网址在线播放 | 久久av一区 | 免费久 | 正在播放国产精品 | 日本手机看片 | 99色播| av男人的天堂在线 | 精品区 | 日韩精品中文字幕一区二区三区 | 91在线精品一区二区 | 91精品国产色综合久久不卡98 | 亚洲小视频在线观看 | 国产一区欧美 | 丝袜美腿一区 | 国产一区二区三区在线 | 激情五月综合 | 中文字幕高清免费日韩视频在线 | 久久69精品久久久久久国产越南 | 一本色道精品久久一区二区三区 | 一片毛片|