找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1591|回复: 0
打印 上一主题 下一主题
收起左侧

STM8单片机实现6种颜色流水灯

[复制链接]
跳转到指定楼层
楼主
ID:698492 发表于 2020-2-26 13:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. #include "IOSTM8S103F3.h"
  2. #define nop()     asm("nop")
  3. #define PD5_out  PD_ODR_ODR5  
  4. // CLK_CKDIVR = 0x00;    //CPUDIV = 1 HSIDIV = 1  内部时钟 = 16Mhz
  5. void clock_16Mhz(void)
  6. {
  7.     CLK_SWCR|=0x02;                      //开启切换
  8.     CLK_ICKR|=0x01;                      //开启内部HSI
  9.     while(!(CLK_ICKR&0x02));            //HSI准备就绪
  10.     CLK_SWR=0xe1;                        //HSI为主时钟源
  11.     while((CLK_SWCR & 0x01)==0x01);     //等待切换完成
  12.     CLK_CKDIVR=0x00;                    //HSI不分频
  13.     CLK_SWCR&=(~0x02);                  //关闭切换
  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. //点亮num个红色灯
  116. void    clour101_hong_num(unsigned char num)
  117. {unsigned char i;
  118. for(i=0;i<num;i++){clour101_hong();}
  119. }
  120. //点亮num个绿色灯
  121. void    clour011_lv_num(unsigned char num)
  122. {unsigned char i;
  123. for(i=0;i<num;i++){clour011_lv();}
  124. }
  125. //点亮num个蓝色灯
  126. void    clour110_lan_num(unsigned char num)
  127. {unsigned char i;
  128. for(i=0;i<num;i++){clour110_lan();}
  129. }

  130. //点亮num个红蓝色灯
  131. void    clour100_honglan_num(unsigned char num)
  132. {unsigned char i;
  133. for(i=0;i<num;i++){clour100_honglan();}
  134. }
  135. //点亮num个绿蓝色灯
  136. void    clour010_lvlan_num(unsigned char num)
  137. {unsigned char i;
  138. for(i=0;i<num;i++){clour010_lvlan();}
  139. }
  140. //点亮num个红绿色灯
  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. //蓝色流水灯
  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. //红蓝色流水灯
  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;     //内部16MHz频率

  183.   PD_DDR|=0x20;          //设置PD5引脚以10Mhz的频率输出
  184.   PD_CR1|=0x20;
  185.   PD_CR2|=0x20;
  186.   light_off_num(8);     //8盏灯全灭

  187. //测试
  188. //clour110() ;clour110() ; clour101() ;clour011() ;reset();
  189. //测试  
  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. }
复制代码
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表