双LED交替闪烁 改《半兽人前奏》鼓点闪烁 示例 单片机代码
#include "main.h"
//定义变量
unsigned char temp = 0xfe;
unsigned char KEY_NUM = 0;
//bpm96 一个32分音符39*2 ms
//float fbpm = 60/96/8/2*1000;
int bpm = 39;
//一道杠8分音符 1,0,0,0,
//两道杠16分音符 1,0,1,0,
//三道杠32分音符 1,1,1,1,
unsigned char led_blink_delays_right[] = {
0xaa,//1,0,1,0,1,0,1,0,
0x8a,//1,0,0,0,1,0,1,0,
0x00,//0,0,0,0,0,0,0,0,
0x08,//0,0,0,0,1,0,0,0,
0xaa,//1,0,1,0,1,0,1,0,
0x8a,//10001010
0x00,//00000000
0xaa,//10101010
0xaa,//10101010
0x8a,//10001010
0x00,//00001000
0x88,//10001000
0xaa,//10101010
0x8a,//10001010
0x8a,//10001010
0xba,//10111010
0xba,//10111010
0x8a,//10001010
0x2a,//00101010
0x8a,//10001010
0x0a,//00001010
0x88,//10001000
0x88,//10001000
0x88,//10001000
0x8a,//10001010
0x24,//00100100
0xaa,//10101010
0x2a,//00101010
0x88,//10001000
0x24,//00100100
0xaa,//10101010
0x2a,//00101010
};
unsigned char led_blink_delays_left[] = {
0x88,//1,0,0,0,1,0,0,0,
0x00,//0,0,0,0,0,0,0,0,
0x00,//0,0,0,0,0,0,0,0,
0x00,//0,0,0,0,0,0,0,0,
0x00,//0,0,0,0,0,0,0,0,
0x88,//1,0,0,0,1,0,0,0,
0x88,//1,0,0,0,1,0,0,0,
0x80,//1,0,0,0,0,0,0,0,
0x00,//0,0,0,0,0,0,0,0,
0x00,//0,0,0,0,0,0,0,0,
0x00,//0,0,0,0,0,0,0,0,
0x80,//1,0,0,0,0,0,0,0,
0x80,//1,0,0,0,0,0,0,0,
0x88,//1,0,0,0,1,0,0,0,
0xaa,//1,0,1,0,1,0,1,0,
0xaa,//1,0,1,0,1,0,1,0,
0x82,//10000010
0x88,//1,0,0,0,1,0,0,0,
0x08,//00001000
0x80,//1,0,0,0,0,0,0,0,
0x82,//10000010
0x88,//1,0,0,0,1,0,0,0,
0x08,//00001000
0xaa,//1,0,1,0,1,0,1,0,
0x8a,//10001010
0x88,//1,0,0,0,1,0,0,0,
0x08,//00001000
0x80,//1,0,0,0,0,0,0,0,
0x82,//10000010
0x88,//1,0,0,0,1,0,0,0,
0x88,//1,0,0,0,1,0,0,0,
0x80,//1,0,0,0,0,0,0,0,
};
//****************************************************
//主函数
//****************************************************
void main()
{
/*
while(1)
{
LED1 = 0;
LED2 = 0;
Delay_ms(3);
LED1 = 1;
LED2 = 1;
Delay_ms(300);
}
*/
// LED闪烁延时的数组
//float fbpm = 60/96/8/2*1000;
int bpm = 39;
int delays_count = sizeof(led_blink_delays_left) / sizeof(led_blink_delays_left[0]); // 数组元素个数
int i,j;
unsigned char led_blink_delays_left_shift;
unsigned char left_bit;
unsigned char led_blink_delays_right_shift;
unsigned char right_bit;
unsigned char read_bit = 0x80;
while(1)
{
for (i = 0; i < delays_count; i++) {
led_blink_delays_left_shift = led_blink_delays_left[i];
led_blink_delays_right_shift = led_blink_delays_right[i];
left_bit = led_blink_delays_left_shift & read_bit;
led_blink_delays_left_shift = led_blink_delays_left_shift << 1;
right_bit = led_blink_delays_right_shift & read_bit;
led_blink_delays_right_shift = led_blink_delays_right_shift << 1;
//if (led_blink_delays_left[i] == 1){
if (left_bit == read_bit){
LED1 = 0;
}else{
LED1 = 1;
}
//if (led_blink_delays_right[i] == 1){
if (right_bit == read_bit){
LED2 = 0;
}else{
LED2 = 1;
}
Delay_ms(bpm);
LED1 = 1;
LED2 = 1;
Delay_ms(bpm);
}
}
}
//****************************************************
//MS延时函数(12M晶振下测试)
//****************************************************
void Delay_ms(unsigned int n)
{
unsigned int i,j;
for(i=0;i<n;i++)
//for(j=0;j<123;j++);
for(j=0;j<105;j++);
}