用C51写的单片机音乐彩灯程序

发布者:紫色小猫最新更新时间:2016-02-26 来源: eefocus关键字:C51  单片机  音乐彩灯 手机看文章 扫描二维码
随时随地手机看文章
#include

#define TLEDS 20//每个花样状态持续时间,以50mS为单位
#define NUM_OF_LED_S 4//每种模式LED花样数?
typedef unsigned char uchar;
typedef unsigned int uint;

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  单片机  音乐彩灯 引用地址:用C51写的单片机音乐彩灯程序

上一篇:AT89S52控制混合式步进电机 C程序
下一篇:C51单片机地址指针及其应用

推荐阅读最新更新时间:2024-03-16 14:45

STC89C52系列单片机内部资源——串口通信
计算机通信是将计算机技术和通信技术的相结合,完成计算机与外部设备或计算机与计算机之间的信息交换 。可以分为两大类:并行通信与串行通信。 并行通信通常是将数据字节的各位用多条数据线同时进行传送 。 并行通信控制简单、传输速度快;由于传输线较多,长距离传送时成本高且接收方的各位同时接收存在困难。 串行通信是将数据字节分成一位一位的形式在一条传输线上逐个地传送。 串行通信的特点:传输线少,长距离传送时成本低,且可以利用电话网等现成的设备,但数据的传送控制比并行通信复杂。 串行通信的基本概念 一、异步通信与同步通信 1、异步通信 异步通信是指通信的发送与接收设备使用各自的时钟控制数据的发送和接收过程。为使双方的收发协调
[单片机]
STC89C52系列<font color='red'>单片机</font>内部资源——串口通信
在Linux下51单片机的开发环境搭建详细程序编写详细概述
在Linux下没有像keli那样好用的IDE来开发51单片机,开发环境只能自己搭建了。 第一步:安装交叉编译工具 a) 安装SDCC sudo apt-get install sdcc b)测试SDCC是否可用,这是个网上找的简单的流水灯代码 test.c, 用来测试 #include 8051.h #define uint unsigned int #define uchar unsigned char uchar tab = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; void Delay(uint xms) { uint i,j; for(i=xms;i 0;i--) for(j
[单片机]
C51变量的存储
一、全局变量和局部变量 全局变量和局部变量的区别在于作用域的不同。此外还有静态全局变量和静态局部变量。 全局变量作用域为全局,在一个源文件中定义,其他的源文件也可以应用。在其他的源文件中使用extern加以声明; 静态全局变量作用域为该源文件,只作用在声明它的源文件中,通过static声明,这样即使在其他的源文件中有相同名称的变量也不相同; 局部变量作用域为函数内部。当函数被调用时,为其分配空间,函数调用完成后收回内存,销毁变量; 局部静态变量作用域为局部,只被初始化一次,但是在后面它一直存在。即使函数调用完成后也一直存在。 全局变量和局部变量都是要分配内存的,它们的区别只是在于作用域不同。 在C中,全局变量、静态全局变量及静态局
[单片机]
TMS320VC5402与单片机的HPI口通信设计
  引言   随着信息技术的发展,数字信号处理在通信、语音处理、图像处理、工业控制等方面得到了广泛的应用.TMS 320VC5402 是专门为快速实现各种数字信号处理算法而设计的常用定点DSP 芯片,广泛使用在各类数字信号中. 该芯片采用优化的哈佛结构,6 级流水线,片上含16 kB 零等待双端口SRAM ,增强型8 位HPI接口,主频可达到100 MHz ,3. 3 V 和1. 8 V 双电源供电 .作为信号采集处理及控制显示系统,传统的方法是采用来单片机实现 ,但单片机的实时处理功能较弱. DSP 芯片具有强大的数据处理能力,但在控制显示方面不如单片机灵活. 为此,本文采用A T89C51 单片机作为主机,DSP 作为高速数
[单片机]
TMS320VC5402与<font color='red'>单片机</font>的HPI口通信设计
多枚“重磅炸弹”搅动MCU市场战火一片
  微 控制器 领域从来不缺少火热的话题和产品,2012新春伊始,众多厂商就纷纷向市场投放多枚“重磅炸‘弹”,搅动 MCU 市场战火一片。让我们来看看各家都用了哪些看家本领。   金刚狼归来,MCU迈入“无电池时代”   还记得“金刚狼(Wolverine)”吗?这个在电影《金刚狼》中具有超强自愈能力的不死英雄,如今,又回来了!日前, 德州仪器 (TI)推出了号称“全球最低功耗”的微控制器平台——“金刚狼”,直接将应用目标锁定在 便携式 医疗、智能感知与计量、能量收集、 消费电子 等领域。基于该平台的首批器件为MSP430FR58xx系列,预计将于2012年6月供货。   TI全球副总裁兼微控制器业务部总经理Scott
[电源管理]
MCU将如何在未来十年推进边缘人工智能的发展
微控制器 (MCU) 正在日益推进端点智能化变革。那么,对 MCU 未来十年有何期待?日前瑞萨电子战略市场业务拓展总监Carmelo Sansone做了七个关键预测,本文编译自 https://www.embedded.com/how-mcus-will-advance-endpoint-intelligence-over-the-next-decade/ 以下是文章详情: 对于每台计算机和智能手机,微处理器一直是嵌入式系统中最核心部分,并且无论是在低功耗还是智能化上的需求都最为迫切,但目前微控制器也加入到边缘智能这一浪潮中,并且相比SoC的功耗、成本、面积等优势更为明显 微控制器最近在工业设备的预测性维护和消费产品的
[单片机]
<font color='red'>MCU</font>将如何在未来十年推进边缘人工智能的发展
PIC18单片机的RS-485/CAN智能转换器的设计
RS-485是一个电气接口规范,它定义了一个基于单对平衡线的多点、双向(半双工)通信链路,只对接口的电气特性做出规定,而不涉及接插件、电缆或协议,在此基础上用户可以建立自己的高层通信协议,在当时看来是一种相对经济具有相当高噪声抑制相对高的传输速率传输距离远和宽共模范围的通信平台,因此基于RS-485总线的通讯方法得到了广泛的应用。 由于RS-485总线本身存在的许多局限性,随着科技的发展RS-485的总线效率低,系统的实时性差、通讯的可靠性低、后期维护成本高、网络工程调试复杂、传输距离不理想、单总线可挂接的节点少、应用不灵活等缺点慢慢的暴露出来。虽历经多次改进但均是治标不治本。 CAN-bus是一种多主方式的串行通讯总线。
[单片机]
PIC18<font color='red'>单片机</font>的RS-485/CAN智能转换器的设计
80c51是几位单片机 80c51单片机有几个中断源
  80c51是几位单片机   80C51是一种8位微处理器,也被称为8051,由Intel公司推出。它是最早的商用单片机之一,由于它的简单易用、灵活可靠,被广泛应用于许多嵌入式系统中。在80C51系列中,最常见的型号包括AT89C51和AT89S52等。   80c51单片机寻址范围有多少   80C51单片机的寻址范围取决于其具体的型号和存储器结构。在最常见的AT89C51和AT89S52型号中,其寻址范围如下:   内部RAM寻址范围:0x00-0x7F(128字节)   内部ROM寻址范围:0x0000-0xFFFF(64KB)   特殊功能寄存器(SFR)寻址范围:0x80-0xFF(128字节)   外部扩展RAM
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved