標(biāo)題:
STM8單片機(jī)實(shí)現(xiàn)6種顏色流水燈
[打印本頁]
作者:
1234567890zyj
時(shí)間:
2020-2-26 13:41
標(biāo)題:
STM8單片機(jī)實(shí)現(xiàn)6種顏色流水燈
#include "IOSTM8S103F3.h"
#define nop() asm("nop")
#define PD5_out PD_ODR_ODR5
// CLK_CKDIVR = 0x00; //CPUDIV = 1 HSIDIV = 1 內(nèi)部時(shí)鐘 = 16Mhz
void clock_16Mhz(void)
{
CLK_SWCR|=0x02; //開啟切換
CLK_ICKR|=0x01; //開啟內(nèi)部HSI
while(!(CLK_ICKR&0x02)); //HSI準(zhǔn)備就緒
CLK_SWR=0xe1; //HSI為主時(shí)鐘源
while((CLK_SWCR & 0x01)==0x01); //等待切換完成
CLK_CKDIVR=0x00; //HSI不分頻
CLK_SWCR&=(~0x02); //關(guān)閉切換
}
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();
}
//點(diǎn)亮num個(gè)紅色燈
void clour101_hong_num(unsigned char num)
{unsigned char i;
for(i=0;i<num;i++){clour101_hong();}
}
//點(diǎn)亮num個(gè)綠色燈
void clour011_lv_num(unsigned char num)
{unsigned char i;
for(i=0;i<num;i++){clour011_lv();}
}
//點(diǎn)亮num個(gè)藍(lán)色燈
void clour110_lan_num(unsigned char num)
{unsigned char i;
for(i=0;i<num;i++){clour110_lan();}
}
//點(diǎn)亮num個(gè)紅藍(lán)色燈
void clour100_honglan_num(unsigned char num)
{unsigned char i;
for(i=0;i<num;i++){clour100_honglan();}
}
//點(diǎn)亮num個(gè)綠藍(lán)色燈
void clour010_lvlan_num(unsigned char num)
{unsigned char i;
for(i=0;i<num;i++){clour010_lvlan();}
}
//點(diǎn)亮num個(gè)紅綠色燈
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);}
}
//藍(lán)色流水燈
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);}
}
//紅藍(lán)色流水燈
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; //內(nèi)部16MHz頻率
PD_DDR|=0x20; //設(shè)置PD5引腳以10Mhz的頻率輸出
PD_CR1|=0x20;
PD_CR2|=0x20;
light_off_num(8); //8盞燈全滅
//測(cè)試
//clour110() ;clour110() ; clour101() ;clour011() ;reset();
//測(cè)試
//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);
}
}
復(fù)制代碼
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1