单片机指示灯交替闪烁示例 改

双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++);
}

  • 14
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值