標(biāo)題: STM8單片機(jī)實(shí)現(xiàn)6種顏色流水燈 [打印本頁]

作者: 1234567890zyj    時(shí)間: 2020-2-26 13:41
標(biāo)題: STM8單片機(jī)實(shí)現(xiàn)6種顏色流水燈
  1. #include "IOSTM8S103F3.h"
  2. #define nop()     asm("nop")
  3. #define PD5_out  PD_ODR_ODR5  
  4. // CLK_CKDIVR = 0x00;    //CPUDIV = 1 HSIDIV = 1  內(nèi)部時(shí)鐘 = 16Mhz
  5. void clock_16Mhz(void)
  6. {
  7.     CLK_SWCR|=0x02;                      //開啟切換
  8.     CLK_ICKR|=0x01;                      //開啟內(nèi)部HSI
  9.     while(!(CLK_ICKR&0x02));            //HSI準(zhǔn)備就緒
  10.     CLK_SWR=0xe1;                        //HSI為主時(shí)鐘源
  11.     while((CLK_SWCR & 0x01)==0x01);     //等待切換完成
  12.     CLK_CKDIVR=0x00;                    //HSI不分頻
  13.     CLK_SWCR&=(~0x02);                  //關(guān)閉切換
  14. }
  15. void    send_1_bit(void)
  16. {
  17.   PD_ODR_ODR5 =1;
  18.   nop();nop();nop();nop();nop();nop();
  19.   nop();//nop();//nop();nop();nop();//nop();
  20.   PD_ODR_ODR5 =0;
  21.   nop();nop();nop();//nop();//nop();nop();
  22. }

  23. void    send_0_bit(void)
  24. {
  25.   PD_ODR_ODR5 =0;
  26.   nop();nop();nop();nop();nop();nop();
  27.   nop();//nop();//nop();nop();nop();//nop();
  28.   PD_ODR_ODR5 =1;
  29.   nop();nop();nop();//nop();//nop();//nop();
  30. }
  31. /*
  32. void    red(void)       //green
  33. {unsigned char i;
  34.   for(i=0;i<8;i++){send_0_bit();}
  35.   for(i=0;i<8;i++){send_1_bit();}
  36.   for(i=0;i<8;i++){send_1_bit();}
  37. }

  38. void    green(void)
  39. {unsigned char i;
  40.   for(i=0;i<8;i++){send_0_bit();}
  41.   for(i=0;i<8;i++){send_1_bit();}
  42.   for(i=0;i<8;i++){send_0_bit();}
  43. }

  44. void    blue(void)
  45. {unsigned char i;
  46.   for(i=0;i<8;i++){send_0_bit();}
  47.   for(i=0;i<8;i++){send_0_bit();}
  48.   for(i=0;i<8;i++){send_1_bit();}
  49. }
  50. */

  51. void Delay_Ms(unsigned int ms)
  52. {
  53. unsigned int x,y;
  54. for(x=0;x<ms;x++){for(y=0;y<330;y++);}
  55. }

  56. void    light_off(void)         //111 led off
  57. {unsigned char i;
  58.   for(i=0;i<8;i++) {send_1_bit();}
  59.   for(i=0;i<8;i++) {send_1_bit();}
  60.   for(i=0;i<8;i++) {send_1_bit();}
  61. }

  62. void reset(void)
  63. {unsigned int i;
  64.     PD_ODR_ODR5 =0;
  65.     for(i=0;i<550;i++) {nop();}     
  66. }

  67. void    clour110_lan(void)       //110 lan: blue
  68. {unsigned char i;
  69.   for(i=0;i<8;i++){send_1_bit();}
  70.   for(i=0;i<8;i++){send_1_bit();}
  71.   for(i=0;i<8;i++){send_0_bit();}
  72. }
  73. void    clour101_hong(void)       //101  hong:red
  74. {unsigned char i;
  75.   for(i=0;i<8;i++){send_1_bit();}
  76.   for(i=0;i<8;i++){send_0_bit();}
  77.   for(i=0;i<8;i++){send_1_bit();}
  78. }
  79. void    clour011_lv(void)       //011  lv:green  
  80. {unsigned char i;
  81.   for(i=0;i<8;i++){send_0_bit();}
  82.   for(i=0;i<8;i++){send_1_bit();}
  83.   for(i=0;i<8;i++){send_1_bit();}
  84. }
  85. void    clour001_honglv(void)       //001  honglv :green red off
  86. {unsigned char i;
  87.   for(i=0;i<8;i++){send_0_bit();}
  88.   for(i=0;i<8;i++){send_0_bit();}
  89.   for(i=0;i<8;i++){send_1_bit();}
  90. }
  91. void    clour010_lvlan(void)       //010 lvlan: green  off  blue
  92. {unsigned char i;
  93.   for(i=0;i<8;i++){send_0_bit();}
  94.   for(i=0;i<8;i++){send_1_bit();}
  95.   for(i=0;i<8;i++){send_0_bit();}
  96. }
  97. void    clour100_honglan(void)       //100  honglan: off  red blue
  98. {unsigned char i;
  99.   for(i=0;i<8;i++){send_1_bit();}
  100.   for(i=0;i<8;i++){send_0_bit();}
  101.   for(i=0;i<8;i++){send_0_bit();}
  102. }
  103. void    clour000_bai(void)           //000  bai: green red blue
  104. {unsigned char i;
  105.   for(i=0;i<8;i++){send_0_bit();}
  106.   for(i=0;i<8;i++){send_0_bit();}
  107.   for(i=0;i<8;i++){send_0_bit();}
  108. }


  109. //全滅num盞燈
  110. void    light_off_num(unsigned char num)
  111. {unsigned char i;
  112.   for(i=0;i<num;i++) {light_off();}
  113.   reset();
  114. }
  115. //點(diǎn)亮num個(gè)紅色燈
  116. void    clour101_hong_num(unsigned char num)
  117. {unsigned char i;
  118. for(i=0;i<num;i++){clour101_hong();}
  119. }
  120. //點(diǎn)亮num個(gè)綠色燈
  121. void    clour011_lv_num(unsigned char num)
  122. {unsigned char i;
  123. for(i=0;i<num;i++){clour011_lv();}
  124. }
  125. //點(diǎn)亮num個(gè)藍(lán)色燈
  126. void    clour110_lan_num(unsigned char num)
  127. {unsigned char i;
  128. for(i=0;i<num;i++){clour110_lan();}
  129. }

  130. //點(diǎn)亮num個(gè)紅藍(lán)色燈
  131. void    clour100_honglan_num(unsigned char num)
  132. {unsigned char i;
  133. for(i=0;i<num;i++){clour100_honglan();}
  134. }
  135. //點(diǎn)亮num個(gè)綠藍(lán)色燈
  136. void    clour010_lvlan_num(unsigned char num)
  137. {unsigned char i;
  138. for(i=0;i<num;i++){clour010_lvlan();}
  139. }
  140. //點(diǎn)亮num個(gè)紅綠色燈
  141. void    clour001_honglv_num(unsigned char num)
  142. {unsigned char i;
  143. for(i=0;i<num;i++){clour001_honglv();}
  144. }

  145. //紅色流水燈
  146. void    hong_liushui(unsigned char num)
  147. {unsigned char i;
  148.   for(i=0;i<num;i++)
  149.   {clour101_hong_num(i+1);reset();Delay_Ms(2000);light_off_num(8);}
  150. }
  151. //綠色流水燈
  152. void    lv_liushui(unsigned char num)
  153. {unsigned char i;
  154.   for(i=0;i<num;i++)
  155.   {clour011_lv_num(i+1);reset();Delay_Ms(2000);light_off_num(8);}
  156. }
  157. //藍(lán)色流水燈
  158. void    lan_liushui(unsigned char num)
  159. {unsigned char i;
  160.   for(i=0;i<num;i++)
  161.   {clour110_lan_num(i+1);reset();Delay_Ms(2000);light_off_num(8);}
  162. }
  163. //紅藍(lán)色流水燈
  164. void    honglan_liushui(unsigned char num)
  165. {unsigned char i;
  166.   for(i=0;i<num;i++)
  167.   {clour100_honglan_num(i+1);reset();Delay_Ms(2000);light_off_num(8);}
  168. }


  169. void    honglv_liushui(unsigned char num)
  170. {unsigned char i;
  171.   for(i=0;i<num;i++)
  172.   {clour001_honglv_num(i+1);reset();Delay_Ms(2000);light_off_num(8);}
  173. }
  174. void    lvlan_liushui(unsigned char num)
  175. {unsigned char i;
  176.   for(i=0;i<num;i++)
  177.   {clour010_lvlan_num(i+1);reset();Delay_Ms(2000);light_off_num(8);}
  178. }

  179. int main( void )
  180. {
  181. //  clock_16Mhz();
  182.   CLK_CKDIVR = 0x00;     //內(nèi)部16MHz頻率

  183.   PD_DDR|=0x20;          //設(shè)置PD5引腳以10Mhz的頻率輸出
  184.   PD_CR1|=0x20;
  185.   PD_CR2|=0x20;
  186.   light_off_num(8);     //8盞燈全滅

  187. //測(cè)試
  188. //clour110() ;clour110() ; clour101() ;clour011() ;reset();
  189. //測(cè)試  
  190. //clour101_hong_num(3);clour101_hong_num(3);reset();light_off_num(8);
  191. //hong_liushui(6);
  192.   while(1){
  193.     hong_liushui(8);lv_liushui(8);lan_liushui(8);
  194.     honglan_liushui(8);honglv_liushui(8);lvlan_liushui(8);

  195.   }

  196. }
復(fù)制代碼





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