#include

unsigned char tone;

unsigned char op;

sbit led=P1^1;

sbit spk=P1^0;

sbit key1=P3^2;       //两只老虎演奏按键

sbit key2=P3^3;       //1~i演奏按键

unsigned char code shuma[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};

//用于使定时器初值变化以产生相应频率的定时

unsigned char code yinfu_H[]=

{0xfb,0xfc,0xfc,0xfc,0xfd,0xfd,0xfd,0xfd,0x00};

unsigned char code yinfu_L[]=

{0xe9,0x5c,0xc1,0xef,0x45,0x92,0xd0,0xee,0x00};

void delay(unsigned int N)

{

unsigned int j=N;

while(j--)

{

unsigned char i;

for(i=0;i<250;i++);

}

}

unsigned  char code laohu[]=

{1,2,3,1,1,2,3,1,3,4,5,3,4,5,5,6,5,4,3,1,5,6,5,4,3,1,3,1,1,3

,1,1};//两只老虎乐谱

unsigned  char code  laohuys[]=

{220,220,220,220,220,220,220,220,220,220,235,220,220,210,150

,150,

170,170,200,200,150,150,170,170,200,200,244,240,250,244,220,

250};

//定时器初始化

void initTimer(void)

{

TMOD=0x01;

TH0=yinfu_H[tone];

TL0=yinfu_L[tone];

}

//定时器T0中断服务程序

void timer0(void) interrupt 1

{

TH0=yinfu_H[tone];

TL0=yinfu_L[tone];

spk=~spk;        //

}

void laohu_yz()//两只老虎 演奏程序

{

unsigned char i;

for(i=0;i<32;i++)

{

led=1;

tone=laohu[i]-1;

delay(laohuys[i]/1.2);

led=0;    //每个音符闪烁一次

delay(laohuys[i]/1.5);

}

}

void yuep_yz()//1~i音符演奏程序

{

unsigned char i;

for(i=0;i<16;i++)

{

led=1;

if(i<8)

{

tone=i;

}

else

{

tone=15-i;

}

delay(220);

led=0;

delay(180);

}

}

void jianpan()

{

op=P2;

switch(op)

{

case 0xfe:led=0;tone=0;P0=shuma[1];TR0=1;break;

case 0xfd:led=0;tone=1;P0=shuma[2];TR0=1;break;

case 0xfb:led=0;tone=2;P0=shuma[3];TR0=1;break;

case 0xf7:led=0;tone=3;P0=shuma[4];TR0=1;break;

case 0xef:led=0;tone=4;P0=shuma[5];TR0=1;break;

case 0xdf:led=0;tone=5;P0=shuma[6];TR0=1;break;

case 0xbf:led=0;tone=6;P0=shuma[7];TR0=1;break;

case 0x7f:led=0;tone=7;P0=shuma[8];TR0=1;break;

default:break;

}

delay(4);

TR0=0;

led=1;

P0=0xff;

}

//主程序

void main(void)

{

initTimer();

ET0=1;

EA=1;

spk=0;

while(1)

{

if(key1==0)//判断K1键是否按下

{

delay(10);

if(key1==0)

{

TR0=1;

laohu_yz();

spk=0;

}

}

else if(key2==0)//判断K2键是否按下

{

delay(10);

if(key2==0)

{

TR0=1;

yuep_yz();

spk=0;

}

}

jianpan();//键盘检测

}

}

51单片机两只老虎 c语言,基于51单片机的简易电子琴(两只老虎)相关推荐

  1. 单片机检测电机频率c语言,基于51单片机的电动机测速表的设计.doc

    基于51单片机的电动机测速表的设计 基于51单片机的电动机测速表设计 摘 要 本文介绍了采用光电传感器实施电机转速测量的方法.基本原理,完成了一种基于AT89C51单片机平台的电动机测速表的软硬件设计 ...

  2. 用单片机c51电子秤的c语言,基于51单片机的电子秤系统设计

    微机原理论文第八篇:基于51单片机的电子秤系统设计 摘要:本文主要分析51单片机下的数字电子秤.在设计过程中,这种电子秤具体包括电源.传感器.蓝牙.转换器.单片机.键盘.开关.显示器等组成部分,在实践 ...

  3. 单片机课程设计洗衣机c语言,基于51单片机洗衣机控制器的设计(附程序)☆

    基于51单片机洗衣机控制器的设计(附程序)☆(任务书,开题报告,中期检查表,毕业论文21000字,程序) 摘  要 洗衣机是人们日常生活中常见的一种家电,已经成为人们生活中不可缺少的家用电器.在工业生 ...

  4. 基于单片机的倒车雷达系统设计c语言,基于AT89C2051单片机实现超声波倒车雷达系统的设计...

    描述 倒车雷达(Car Reversing Aid Systems)的全称是"倒车防撞雷达",也称"泊车辅助装置",是汽车泊车安全辅助装置,能以声音或者更为直观 ...

  5. 51单片机两只老虎 c语言,基于51单片机做音乐盒(两只老虎)

    /********************************************************************************* 项目:音频音乐盒 设计时间:201 ...

  6. 51单片机dds信号发生器 扫频 c语言,基于AT89C51单片机和DDS器件实现频率特征测试仪的设计...

    1. 引 言 频率特性是一个系统(或元件)对不同频率正弦输入信号的响应特性.如图1所示,被测系统输入幅值为Ar.角频率为ω的正弦信号,如果该系统是线性的,则其稳态输出也是正弦信号,频率ω不变,幅值为A ...

  7. 单片机60秒秒表c语言,基于51单片机的60秒,秒表计时器

    keil软件生成HEX文件,在proteus仿真实现 C程序 #include #define uint unsigned int #define uchar unsigned char uchar ...

  8. 单片机自动调光C语言,基于51单片机的DS18B20水温PID控制调节系统设计C语言程序...

    #include 'reg52.h' #include 'stdio.h' #define uchar unsigned char #define uint unsigned int sbit s1= ...

  9. spwm单片机4路输出C语言,基于PIC单片机的正弦波逆变器设计与实现

    描述 目前,SPWM信号主要有3种生成方式: 1)使用比较器.振荡器等模拟电路产生三角波和方波进行比较,产生SPWM波,但是此种方法电路复杂,受元器件精度影响大,且不易控制: 2)利用专用SPWM集成 ...

  10. 单片机设计时钟程序c语言,基于.C51单片机的数字时钟课程设计(C语言,带闹钟).pdf...

    - - .. -- 单片机技术课程设计 数字电子钟 学院 : word 可编辑 . - - .. -- 班级 : 姓名 : 学号 : 教师 : 摘 要 电子钟在生活中应用非常广泛 ,而一种简单方便的数 ...

最新文章

  1. 12月7日学习内容整理:ORM单表操作
  2. background 旋转_基于HTML5 Canvas 实现矢量工控风机叶轮旋转
  3. when is Lessifier triggered to be loaded
  4. Linux---单例模式
  5. 刨根问底(一):从INode客户端看如何培养兴趣
  6. java mybatis sql server未返回响应。连接已关闭
  7. mat opencv 修改roi_OpenCV开发笔记(七十三):红胖子8分钟带你使用opencv+dnn+yolov3识别物体...
  8. blos硬盘启动台式计算机,bios设置硬盘启动,最全的bios设置硬盘启动详细方法(两种模式)...
  9. 武汉大学计算机学院2015级,武汉大学研究生课程-数据挖掘-2015级研究生试题.doc...
  10. 《支付机构外汇业务管理办法》正式发布 合作银行不得超过2家
  11. javascript检测浏览器是否需要升级版本和提示
  12. Matlab绘制区域图
  13. ESP8266 创建自己的NVS分区
  14. 《Python数据分析基础教程:NumPy学习指南(第2版)》笔记8:第三章 常用函数4——线性模型、数组修剪与压缩、阶乘
  15. 使用ESP8266接入阿里云物联网平台(阿里 云智能APP)可远程控制电脑开关机,灯光等设备 CP2102, CH340
  16. 求出1-n之间的素数(质数)
  17. BootLoader启动过程分析
  18. 计算机组成与人体组成类比
  19. 大学的计算机社团都学什么,大学有什么好玩的社团 大学生必入的5个社团
  20. 数组的push()、pop()、shift()和unshift()

热门文章

  1. Vue传递参数不在URL路径上 显示参数的完整方法
  2. 互联网思维心得体会1500字_互联网思维学习心得体会
  3. 互联网思维之流量思维
  4. 机器学习 K-Nearst-Neighbors算法
  5. Unity_线性空间
  6. dsp28335 Ecap总结
  7. UVM中starting_phase
  8. GitLab使用中的403错误
  9. 代码的坏味道之十七 :Inappropriate Intimacy(狎昵关系)
  10. pymol 分离蛋白与小分子保存;pymol分离蛋白多聚体亚基;pymol对接位点交互图展示;去除杂原子