新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 用C51寫的單片機音樂彩燈程序

        用C51寫的單片機音樂彩燈程序

        作者: 時間:2016-11-22 來源:網絡 收藏
        #include

        #define TLEDS 20//每個花樣狀態持續時間,以50mS為單位
        #define NUM_OF_LED_S 4//每種模式LED花樣數?
        typedef unsigned char uchar;
        typedef unsigned int uint;

        本文引用地址:http://www.104case.com/article/201611/320051.htm

        data uchar led_array_num;//當前模式下,LED花樣狀態序號
        data uchar music_array_num;//音符的序號
        data uchar i;//模式號
        data uchar t_count_led;//用于LED狀態持續時間計時
        data uint t_count_music;//
        data uint t_yinfu;//音符持續時間

        uchar code led_array_p0[4][NUM_OF_LED_S]={{0xc0,0xc0,0xc0,0xc0},{0x38,0x38,0x38,0x38},{0x05,0x07,0x02,0x07},{0xff,0x81,0xff,0xff}};
        uchar code led_array_p2[4][NUM_OF_LED_S]={{0x07,0x0b,0x0d,0x0e},{0x07,0x09,0x0e,0x00},{0x06,0x09,0x06,0x00},{0x07,0x09,0x0e,0x00}};
        uchar code music_array_h[4][128]={{0xfc,0xfc,0xfc,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfe,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,
        0xfc,0xfc,0xfc,0xfc,0xfc,0xfd,0xfd,0xfc,0xfc,0xfc,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfe,0xfd,0xfd,
        0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfc,0xfc,0xfc,0xfc,0xfd,0xfc},
        {0xfc,0xfc,0xfd,0xfc,0xfc,0xfc,0xfd,0xfc,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfc,0xfd,
        0xfd,0xfd,0xfd,0xfd,0xfc,0xfc,0xfd,0xfc,0xfc,0xfd,0xfc},
        {0xfb,0xfb,0xfb,0xfb,0xfc,0xfc,0xfb,0xfb,0xfb,0xfb,0xfc,0xfc,0xfb,0xfb,0xfd,0xfd,0xfc,0xfc,0xfb,0xfd,0xfd,
        0xfd,0xfc,0xfc,0xfc},
        {0xfc,0xfc,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfc,0xfc,0xfc,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfc,
        0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfc,0xfc,0xfc,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfc,0xfc,0xfc}};
        uchar code music_array_l[4][128]={{0x43,0x43,0x43,0x08,0x81,0x81,0x81,0x81,0xc7,0xc7,0xc7,0x21,0x81,0x33,0x33,0x33,0xc7,0x08,0x08,0x08,0x81,0xb5,0xb5,0xb5,0xb5,0xb5,0x81,0x81,0x43,0x43,0x43,0x08,0x81,0x81,0x81,0x81,0xc7,0xc7,0xc7,0x21,0x81,0x33,0x33,0x33,0xc7,0x08,0x08,0x08,0x08,0x08,0x81,0xb5,0xb5,0xb5,0xb5,0x08,0x43},{0x43,0xb5,0x08,0x43,0x43,0xb5,0x08,0x43,0x08,0x33,0x81,0x08,0x33,0x81,0x81,0xc7,0x81,0x33,0x08,0x43,0x81,0xc7,0x81,0x33,0x08,0x43,0x43,0x81,0x43,0x43,0x81,0x43},{0x03,0x03,0x8f,0x03,0x43,0x0b,0x03,0x03,0x8f,0x03,0xb5,0x43,0x03,0x03,0x81,0x08,0x43,0x0b,0x8f,0x33,0x33,0x08,0x43,0xb5,0x43},{0x43,0x43,0x81,0x81,0xc7,0xc7,0x81,0x33,0x33,0x08,0x08,0xb5,0xb5,0x43,0x81,0x81,0x33,0x33,0x08,0x08,0xb5,0x81,0x81,0x33,0x33,0x08,0x08,0xb5,0x43,0x43,0x81,0x81,0xc7,0xc7,0x81,0x33,0x33,0x08,0x08,0xb5,0xb5,0x43}};
        uint code music_array_t[4][128]={{523,523,523,658,784,784,784,784,880,880,880,1046,784,698,698,698,880,658,658,658,784,593,593,593,593,593,784,784,523,523
        ,523,658,784,784,784,784,880,880,880,1046,784,698,698,698,880,658,658,658,658,658,784,593,593,593,593,658,523,0},{523,593,658,523,523,593,658,523,658,698,3134,658,698,3134,391,440,391,698,658,523,391,568,391,698,658,523,523,784,1046,523,784,1046,0},{391,391,880,391,523,1486,391,391,880,391,593,1569,391,391,3134,658,523,988,440,698,698,1317,523,593,1569,0},{523,523,784,784,880,880,784,698,698,658,658,593,593,523,784,784,698,698,658,658,593,784,784,698,698,658,658,593,523,523,784,784,880,880,784,698,698,658,658,593,593,523,0}};

        void delay(void)
        {
        uchar c_1;
        uchar c_2;
        uchar c_3;
        for (c_1=0; c_1< 10;c_1++)
        for(c_2 = 0;c_2< 10;c_2++)
        for(c_3 = 0; c_3<55;c_3++)
        ;
        }


        void main(void)
        {

        led_array_num = 0;
        music_array_num = 0;
        t_yinfu = music_array_t[0][0]; //初始化

        //delay();

        i = 0;
        TMOD = 0x11; //定時器工作方式設置
        TR0 = 0; //關定時器
        TR1 = 0;


        TH1 = 0x3c;
        TL1 = 0xb0;
        P0 = led_array_p0[0][0];//彩燈
        P2 = led_array_p2[0][0];
        t_count_led = 0;

        TH0 = music_array_h[0][0];//音樂
        TL0 = music_array_l[0][0];
        t_yinfu = music_array_t[0][0];
        t_count_music = 0;

        IE = 0x8a;
        TR0 = 1;
        TR1 = 1;


        //以下開始掃描按鍵
        while(1)
        {
        P1_0 = 1;
        if(P1_0 == 0)
        {
        delay();
        if(P1_0 == 0)
        {
        TR0 = 0;
        TR1 = 0;
        i = 0;//去抖動

        led_array_num = 0;
        music_array_num = 0;

        TH1 = 0x3c;
        TL1 = 0xb0;
        P0 = led_array_p0[0][0];//彩燈
        P2 = led_array_p2[0][0];
        t_count_led = 0;

        TH0 = music_array_h[0][0];//音樂
        TL0 = music_array_l[0][0];
        t_yinfu = music_array_t[0][0];
        t_count_music = 0;

        while(P1_0 == 0)
        {
        while(P1_0 == 0)
        t_count_music = 0;
        delay();
        }

        TR0 = 1;
        TR1 = 1;

        }


        }
        if(P1_1 == 0)
        {
        delay();
        if(P1_1 == 0)
        {
        TR0 = 0;
        TR1 = 0;
        i = 1;

        led_array_num = 0;
        music_array_num = 0;

        TH1 = 0x3c;
        TL1 = 0xb0;
        P0 = led_array_p0[1][0];//彩燈
        P2 = led_array_p2[1][0];
        t_count_led = 0;

        TH0 = music_array_h[1][0];//音樂
        TL0 = music_array_l[1][0];
        t_yinfu = music_array_t[1][0];
        t_count_music = 0;

        while(P1_1 == 0)
        {
        while(P1_1 == 0)
        t_count_music = 0;
        delay();
        }

        TR0 = 1;
        TR1 = 1;

        }


        }
        if(P1_2 == 0)
        {
        delay();
        if(P1_2 == 0)
        {
        TR0 = 0;
        TR1 = 0;
        i = 2;

        led_array_num = 0;
        music_array_num = 0;

        TH1 = 0x3c;
        TL1 = 0xb0;
        P0 = led_array_p0[2][0];//彩燈
        P2 = led_array_p2[2][0];
        t_count_led = 0;

        TH0 = music_array_h[2][0];//音樂
        TL0 = music_array_l[2][0];
        t_yinfu = music_array_t[2][0];
        t_count_music = 0;
        while(P1_2 == 0)
        {
        while(P1_2 == 0)
        t_count_music = 0;
        delay();
        }

        TR0 = 1;
        TR1 = 1;

        }

        }
        if(P1_3 == 0)
        {
        delay();
        if(P1_3 == 0)
        {
        TR0 = 0;
        TR1 = 0;
        i = 3;

        led_array_num = 0;
        music_array_num = 0;

        TH1 = 0x3c;
        TL1 = 0xb0;
        P0 = led_array_p0[3][0];//彩燈
        P2 = led_array_p2[3][0];
        t_count_led = 0;

        TH0 = music_array_h[3][0];//音樂
        TL0 = music_array_l[3][0];
        t_yinfu = music_array_t[3][0];
        t_count_music = 0;
        while(P1_3 == 0)
        {
        while(P1_3 == 0)
        t_count_music = 0;
        delay();
        }

        TR0 = 1;
        TR1 = 1;


        }

        }
        }
        }


        void Timer0IntRoute(void) interrupt 1
        {
        t_count_music++;
        P1_4 = ~P1_4;
        TH0 = music_array_h[i][music_array_num];//音樂
        TL0 = music_array_l[i][music_array_num];
        if(t_count_music >= t_yinfu)
        {
        t_yinfu = music_array_t[i][++music_array_num];
        if(t_yinfu == 0)
        {
        music_array_num = 0;
        t_yinfu = music_array_t[i][music_array_num];
        }
        TH0 = music_array_h[i][music_array_num];//音樂
        TL0 = music_array_l[i][music_array_num];
        t_count_music = 0;
        }
        }


        void Timer1IntRoute(void) interrupt 3
        {
        t_count_led++;
        TH1 = 0x3c;
        TL1 = 0xb0;
        if(t_count_led >= TLEDS)
        {
        t_count_led = 0;
        led_array_num++;
        if(led_array_num>=NUM_OF_LED_S)
        led_array_num = 0;
        P0 = led_array_p0[i][led_array_num];
        P2 = led_array_p2[i][led_array_num];
        }
        }




        關鍵詞: C51單片機音樂彩

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 美姑县| 丽江市| 龙胜| 宁都县| 盘锦市| 荆州市| 丹巴县| 新昌县| 金川县| 西宁市| 宁蒗| 安泽县| 昔阳县| 任丘市| 且末县| 新和县| 崇州市| 通城县| 宁津县| 福清市| 禄劝| 巴南区| 亳州市| 中超| 定安县| 锡林浩特市| 茶陵县| 饶阳县| 平邑县| 客服| 东阿县| 余庆县| 昌宁县| 时尚| 吴桥县| 梅河口市| 都江堰市| 旬邑县| 三穗县| 安宁市| 恩平市|