欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: STC8G1K08-16PIN單片機為主控轉向中網燈主控程序 求指教 [打印本頁]

作者: 川蜀浪子    時間: 2020-11-9 19:56
標題: STC8G1K08-16PIN單片機為主控轉向中網燈主控程序 求指教
  1. /********使用STC8G1K08-16PIN為主控轉向流光燈,
  2. 1、上電掃描流光左右同時流光三次,日行燈亮。
  3. 2、接收到左或右轉向信號時相應方向流光一次,日行燈LED11 50%亮度。
  4. 3、斷開左或右轉向信號時,日行燈LED11 100%亮度。
  5. 4、鎖車左右同時接到信號時流光。*****/

  6. #include <STC8G.H>  
  7. typedef unsigned char u8;
  8. typedef unsigned int  u16;
  9. /********端口引腳定義*****/  
  10. sbit KEYL=P5^4;                                //設置左方向觸發信號
  11. sbit KEYR=P5^5;                            //設置右方向觸發信號

  12. sbit LED1=P3^2;                            //左方向流光燈設定
  13. sbit LED2=P3^3;
  14. sbit LED3=P3^4;
  15. sbit LED4=P3^5;
  16. sbit LED5=P3^6;

  17. sbit LED6=P3^7;                                //右方向流光燈設定
  18. sbit LED7=P1^0;
  19. sbit LED8=P1^1;
  20. sbit LED9=P1^6;
  21. sbit LED10=P1^7;

  22. sbit LED11=P3^1;                   //日行燈設定

  23. bit signl=0;             //觸發狀態標志
  24. bit signr=0;
  25. u8  count1=0;                        //開關消抖計數變量
  26. u16 count2=0,count3=0;        //LED延時計數變量

  27. /********定時器初始化*****/  
  28. void Timer0Init()        //10毫秒@11.0592MHz
  29. {
  30.         AUXR &= 0x7F;        //定時器時鐘12T模式
  31.         TMOD &= 0xF0;        //設置定時器自動重裝模式
  32.         TL0 = 0x00;                //設置定時初值
  33.         TH0 = 0xDC;                //設置定時初值
  34.         TF0 = 0;                //清除TF0標志
  35.         TR0 = 1;                //定時器0開始計時
  36. }
  37. /********上電掃描流光子函數*****/
  38. void Led()
  39. {
  40.                                                                 LED1=LED6=1;    //LED1,LED6亮
  41.                                 count2++;
  42.                                 if(count2>=10) //0.1秒延時
  43.                                      LED1=LED6=LED2=LED7=1;     //LED1、2,LED6、7亮
  44.                                 if(count2>=20)//0.2秒延時
  45.                                      LED1=LED6=0;   LED2=LED7=LED3=LED8=1;     //LED2、3,LED7、8亮
  46.                                 if(count2>=30)//0.3秒延時
  47.                                          LED1=LED6=LED2=LED7=0;   LED3=LED8=LED4=LED9=1;                         //LED3、4,LED8、9亮
  48.                                 if(count2>=40)//0.4秒延時
  49.                                          LED1=LED6=LED2=LED7=LED3=LED8=0;   LED4=LED9=LED5=LED10=1;         //LED4、5,LED9、10亮
  50.                                 if(count2>=50)//0.5秒延時
  51.                                          LED1=LED6=LED2=LED7=LED3=LED8=LED4=LED9=0;   LED5=LED10=1;         //LED5,LED10亮
  52.                                                                
  53.                                                                 {
  54.                                    count2=60; //保持
  55.                                      LED1=LED6=LED2=LED7=LED3=LED8=LED4=LED9=LED5=LED10=0;       //LED滅
  56.                                 }

  57. }




  58. /******主函數區******/  
  59. void main()
  60. {
  61.         P3M0=0xFE;//設P3口為推挽輸出,P3.0為高阻輸入.         
  62.         P3M1=0x01;
  63.                 P1M0=0xC3;//設P1口為推挽輸出,
  64.                 P1M1=0x00;         
  65.         P5M0=0x00;//設P5.4、P5.5為準雙向口.        
  66.         P5M1=0x00;
  67.                 P3=0X01;
  68.                 P1=0X3C;

  69.         
  70.         KEYL =1; //不可以設低電平
  71.                 KEYR =1;        
  72.         Timer0Init();
  73.                 Led();
  74.                 Led();
  75.                 Led();
  76.                 LED11=1; //P5.5為高電平
  77.         while(1)         
  78.         {                 
  79.                 if(TF0==1)//定時器10毫秒溢出
  80.                 {
  81.                         TF0=0; //清0
  82. /********掃描開關(觸發/復位)**************/
  83.                         if(KEYL==1)//如P5.4為高電平
  84.                         {
  85.                                 if(++count1>=2&&signl==0)//消抖計數和判斷判斷開關觸發狀態
  86.                                         signl=1;//觸發狀態標志置1
  87.                         }
  88.                         else                     //如P5.4為低電平
  89.                         {
  90.                                 signl=0;                //觸發狀態標志清0
  91.                                 count1=0;        //消抖計數清0
  92.                         }
  93.                         if(KEYR==1)//如P5.5為高電平
  94.                         {
  95.                                 if(++count1>=2&&signr==0)//消抖計數和判斷判斷開關觸發狀態
  96.                                         signr=1;//觸發狀態標志置1
  97.                         }
  98.                         else                     //如P5.5為低電平
  99.                         {
  100.                                 signr=0;                //觸發狀態標志清0
  101.                                 count1=0;        //消抖計數清0
  102.                         }
  103. /********執行觸發/復位部分**************/
  104.                         if(signl==1)                                                                          //觸發狀態
  105.                         {
  106.                                 count3=0;                                                                 //計數3清0
  107.                                 LED11=0;                                                             //P3.1需PWM50%亮度         //P3.1輸出低電平 熄
  108.                                                                 LED1=1;                                                                             //LED1亮
  109.                                 count2++;
  110.                                 if(count2>=10) //0.1秒延時
  111.                                      LED1=LED2=1;                                             //LED1、2,亮
  112.                                 if(count2>=20)//0.2秒延時
  113.                                      LED1=0;   LED2=LED3=1;                  //LED2、3,亮
  114.                                 if(count2>=30)//0.3秒延時
  115.                                          LED1=LED2=0;   LED3=LED4=1;                         //LED3、4,亮
  116.                                 if(count2>=40)//0.4秒延時
  117.                                          LED1=LED2=LED3=0;   LED4=LED5=1;             //LED4、5,亮
  118.                                 if(count2>=50)//0.5秒延時
  119.                                          LED1=LED2=LED3=LED4=0;   LED5=1;             //LED5,亮
  120.                                                                
  121.                                                                 {
  122.                                    count2=60; //保持
  123.                                      LED1=LED2=LED3=LED4=LED5=0;                        //LED滅
  124.                                 }

  125.                         }
  126.                         else                                        //復位狀態
  127.                         {
  128.                                 count2=0;                                                        //計數2清0
  129.                                 LED1=LED2=LED3=LED4=LED5=0;                                        //LED1~5熄
  130.                                 if(++count3>=100)//1秒延時
  131.                                 {
  132.                                         count3=100; //保持
  133.                                         LED11=1;                                        //LED5亮
  134.                                 }
  135.                         }
  136.                         if(signr==1)                                                                          //觸發狀態
  137.                         {
  138.                                 count3=0;                                                                 //計數3清0
  139.                                 LED11=0;                                                                     //P3.1需PWM50%亮度         //P3.1輸出低電平 熄
  140.                                                                 LED6=1;                                                                             //LED6亮
  141.                                 count2++;
  142.                                 if(count2>=10) //0.1秒延時
  143.                                      LED6=LED7=1;                                             //LED6、7,亮
  144.                                 if(count2>=20)//0.2秒延時
  145.                                      LED6=0;   LED7=LED8=1;                  //LED7、8,亮
  146.                                 if(count2>=30)//0.3秒延時
  147.                                          LED6=LED7=0;   LED8=LED9=1;                         //LED8、9,亮
  148.                                 if(count2>=40)//0.4秒延時
  149.                                          LED6=LED7=LED8=0;   LED9=LED10=1;             //LED9、10,亮
  150.                                 if(count2>=50)//0.5秒延時
  151.                                          LED6=LED7=LED8=LED9=0;   LED10=1;             //LED10,亮
  152.                                                                
  153.                                                                 {
  154.                                    count2=60; //保持
  155.                                      LED6=LED7=LED8=LED9=LED10=0;                        //LED滅
  156.                                 }

  157.                         }
  158.                         else                                        //復位狀態
  159.                         {
  160.                                 count2=0;                                                        //計數2清0
  161.                                 LED6=LED7=LED8=LED9=LED10=0;                                        //LED6~10熄
  162.                                 if(++count3>=100)//1秒延時
  163.                                 {
  164.                                         count3=100; //保持
  165.                                         LED11=1;                                        //LED5亮
  166.                                 }
  167.                         }


  168.                 }
  169.         }
  170. }
復制代碼



作者: 川蜀浪子    時間: 2020-11-10 10:06
那位大大幫忙看看這個程序需要怎樣修改一下,及怎樣加入PWM的調光功能。
作者: 川蜀浪子    時間: 2020-11-12 08:21
看看那位大神能指點一下雙輸入信號的思路。

作者: lovexulu    時間: 2020-11-12 16:37
吐槽一句,這程序寫的真廢片子。
輸出選擇pwm端I/O,配置pwm。 硬件需要做些改動,不改硬件控制亮度,你估計要配置8路pwm 。不過stc8G1k08芯片只有3路。。。。
關于信號采集。。。我想應該是控制信號輸入,嚴謹寫法用中斷,不嚴謹嘛。輪詢就能行。至于雙路信號,最多不過4種狀態,case0~3,不香么。
另外,流光寫成子函數,傳遞調用參數不香么,多寫幾個花樣閃爍做成子函數。。。。。
還有,你想要的功能表達并不詳細,沒法給你具體解答。
作者: 川蜀浪子    時間: 2020-11-28 11:41
沒有人指點嗎?貼子都沉了。
作者: 51c_yang    時間: 2021-6-10 10:05
請問stc8G1k08的芯片,在keil中cpu選89c52的行嗎,還有這個頭文件就是“stc8G.h”嘛




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1