标题:
STM8单片机实现6种颜色流水灯
[打印本页]
作者:
1234567890zyj
时间:
2020-2-26 13:41
标题:
STM8单片机实现6种颜色流水灯
#include "IOSTM8S103F3.h"
#define nop() asm("nop")
#define PD5_out PD_ODR_ODR5
// CLK_CKDIVR = 0x00; //CPUDIV = 1 HSIDIV = 1 内部时钟 = 16Mhz
void clock_16Mhz(void)
{
CLK_SWCR|=0x02; //开启切换
CLK_ICKR|=0x01; //开启内部HSI
while(!(CLK_ICKR&0x02)); //HSI准备就绪
CLK_SWR=0xe1; //HSI为主时钟源
while((CLK_SWCR & 0x01)==0x01); //等待切换完成
CLK_CKDIVR=0x00; //HSI不分频
CLK_SWCR&=(~0x02); //关闭切换
}
void send_1_bit(void)
{
PD_ODR_ODR5 =1;
nop();nop();nop();nop();nop();nop();
nop();//nop();//nop();nop();nop();//nop();
PD_ODR_ODR5 =0;
nop();nop();nop();//nop();//nop();nop();
}
void send_0_bit(void)
{
PD_ODR_ODR5 =0;
nop();nop();nop();nop();nop();nop();
nop();//nop();//nop();nop();nop();//nop();
PD_ODR_ODR5 =1;
nop();nop();nop();//nop();//nop();//nop();
}
/*
void red(void) //green
{unsigned char i;
for(i=0;i<8;i++){send_0_bit();}
for(i=0;i<8;i++){send_1_bit();}
for(i=0;i<8;i++){send_1_bit();}
}
void green(void)
{unsigned char i;
for(i=0;i<8;i++){send_0_bit();}
for(i=0;i<8;i++){send_1_bit();}
for(i=0;i<8;i++){send_0_bit();}
}
void blue(void)
{unsigned char i;
for(i=0;i<8;i++){send_0_bit();}
for(i=0;i<8;i++){send_0_bit();}
for(i=0;i<8;i++){send_1_bit();}
}
*/
void Delay_Ms(unsigned int ms)
{
unsigned int x,y;
for(x=0;x<ms;x++){for(y=0;y<330;y++);}
}
void light_off(void) //111 led off
{unsigned char i;
for(i=0;i<8;i++) {send_1_bit();}
for(i=0;i<8;i++) {send_1_bit();}
for(i=0;i<8;i++) {send_1_bit();}
}
void reset(void)
{unsigned int i;
PD_ODR_ODR5 =0;
for(i=0;i<550;i++) {nop();}
}
void clour110_lan(void) //110 lan: blue
{unsigned char i;
for(i=0;i<8;i++){send_1_bit();}
for(i=0;i<8;i++){send_1_bit();}
for(i=0;i<8;i++){send_0_bit();}
}
void clour101_hong(void) //101 hong:red
{unsigned char i;
for(i=0;i<8;i++){send_1_bit();}
for(i=0;i<8;i++){send_0_bit();}
for(i=0;i<8;i++){send_1_bit();}
}
void clour011_lv(void) //011 lv:green
{unsigned char i;
for(i=0;i<8;i++){send_0_bit();}
for(i=0;i<8;i++){send_1_bit();}
for(i=0;i<8;i++){send_1_bit();}
}
void clour001_honglv(void) //001 honglv :green red off
{unsigned char i;
for(i=0;i<8;i++){send_0_bit();}
for(i=0;i<8;i++){send_0_bit();}
for(i=0;i<8;i++){send_1_bit();}
}
void clour010_lvlan(void) //010 lvlan: green off blue
{unsigned char i;
for(i=0;i<8;i++){send_0_bit();}
for(i=0;i<8;i++){send_1_bit();}
for(i=0;i<8;i++){send_0_bit();}
}
void clour100_honglan(void) //100 honglan: off red blue
{unsigned char i;
for(i=0;i<8;i++){send_1_bit();}
for(i=0;i<8;i++){send_0_bit();}
for(i=0;i<8;i++){send_0_bit();}
}
void clour000_bai(void) //000 bai: green red blue
{unsigned char i;
for(i=0;i<8;i++){send_0_bit();}
for(i=0;i<8;i++){send_0_bit();}
for(i=0;i<8;i++){send_0_bit();}
}
//全灭num盏灯
void light_off_num(unsigned char num)
{unsigned char i;
for(i=0;i<num;i++) {light_off();}
reset();
}
//点亮num个红色灯
void clour101_hong_num(unsigned char num)
{unsigned char i;
for(i=0;i<num;i++){clour101_hong();}
}
//点亮num个绿色灯
void clour011_lv_num(unsigned char num)
{unsigned char i;
for(i=0;i<num;i++){clour011_lv();}
}
//点亮num个蓝色灯
void clour110_lan_num(unsigned char num)
{unsigned char i;
for(i=0;i<num;i++){clour110_lan();}
}
//点亮num个红蓝色灯
void clour100_honglan_num(unsigned char num)
{unsigned char i;
for(i=0;i<num;i++){clour100_honglan();}
}
//点亮num个绿蓝色灯
void clour010_lvlan_num(unsigned char num)
{unsigned char i;
for(i=0;i<num;i++){clour010_lvlan();}
}
//点亮num个红绿色灯
void clour001_honglv_num(unsigned char num)
{unsigned char i;
for(i=0;i<num;i++){clour001_honglv();}
}
//红色流水灯
void hong_liushui(unsigned char num)
{unsigned char i;
for(i=0;i<num;i++)
{clour101_hong_num(i+1);reset();Delay_Ms(2000);light_off_num(8);}
}
//绿色流水灯
void lv_liushui(unsigned char num)
{unsigned char i;
for(i=0;i<num;i++)
{clour011_lv_num(i+1);reset();Delay_Ms(2000);light_off_num(8);}
}
//蓝色流水灯
void lan_liushui(unsigned char num)
{unsigned char i;
for(i=0;i<num;i++)
{clour110_lan_num(i+1);reset();Delay_Ms(2000);light_off_num(8);}
}
//红蓝色流水灯
void honglan_liushui(unsigned char num)
{unsigned char i;
for(i=0;i<num;i++)
{clour100_honglan_num(i+1);reset();Delay_Ms(2000);light_off_num(8);}
}
void honglv_liushui(unsigned char num)
{unsigned char i;
for(i=0;i<num;i++)
{clour001_honglv_num(i+1);reset();Delay_Ms(2000);light_off_num(8);}
}
void lvlan_liushui(unsigned char num)
{unsigned char i;
for(i=0;i<num;i++)
{clour010_lvlan_num(i+1);reset();Delay_Ms(2000);light_off_num(8);}
}
int main( void )
{
// clock_16Mhz();
CLK_CKDIVR = 0x00; //内部16MHz频率
PD_DDR|=0x20; //设置PD5引脚以10Mhz的频率输出
PD_CR1|=0x20;
PD_CR2|=0x20;
light_off_num(8); //8盏灯全灭
//测试
//clour110() ;clour110() ; clour101() ;clour011() ;reset();
//测试
//clour101_hong_num(3);clour101_hong_num(3);reset();light_off_num(8);
//hong_liushui(6);
while(1){
hong_liushui(8);lv_liushui(8);lan_liushui(8);
honglan_liushui(8);honglv_liushui(8);lvlan_liushui(8);
}
}
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1