萬用電路板

个人兴趣爱好交流空间

« 高保真音频功率放大器LM1875电风扇的维修要领 »

基于51单片机的玩具电子琴【图】

        这是一款用51单片机控制的玩具电子琴,用到了51的定时器和键盘技术,它的汇编程序流程如下,很适合初学者学习制作。

        说明:由单片机的P1.0口输出音频信号,在P1.0口接三极管以驱动喇叭,最好用两个三极管构成达林顿结构。P2口连接8个一端接地的按键作为输入,当然也需要连接8只10K的电阻至电源作为上拉电阻。P2.0~P2.7依次为Do、Re、Mi、Fa、So、La、Si、Do(高)音。

 

       BUZZ     EQU P1.0
       ORG      0000H
       LJMP     MAIN
       ORG      000BH
       LJMP     INT_T0
       ORG      0100H
MAIN:  
       MOV      SP,#60H        ;初始化堆栈指针
       MOV      30H,#00        ;定时器初值清零
       MOV      31H,#00
       MOV      P1,#0FFH       ;设置P1口为输入模式
       MOV      TMOD,#01H      ;设置定时器0为工作模式1
       SETB     ET0            ;开定时器0中断
       SETB     EA             ;开总中断
       CLR      TR0            ;关闭定时器0
START: 
       MOV      R0,P2      
       CJNE     R0,#0FFH,KEY1  ;键盘扫描
       CLR      TR0
       SJMP     START
KEY1:
       CJNE     R0,#0FEH,KEY2  ;K1键按下
       MOV      30H,#0FBH      ;设置音阶1
       MOV      31H,#0E9H
       LJMP     SET_TIMER
KEY2:  
       CJNE     R0,#0FDH,KEY3  ;K2键按下
       MOV      30H,#0FCH      ;设置音阶2
       MOV      31H,#5CH
       LJMP     SET_TIMER
KEY3:
       CJNE     R0,#0FBH,KEY4  ;K3键按下
       MOV      30H,#0FCH      ;设置音阶3
       MOV      31H,#0C1H
       LJMP     SET_TIMER
KEY4:
       CJNE     R0,#0F7H,KEY5  ;K4键按下
       MOV      30H,#0FCH      ;设置音阶4
       MOV      31H,#0EFH
       LJMP     SET_TIMER
KEY5:
       CJNE     R0,#0EFH,KEY6  ;K5键按下
       MOV      30H,#0FDH      ;设置音阶5
       MOV      31H,#045H
       LJMP     SET_TIMER
KEY6:
       CJNE     R0,#0DFH,KEY7  ;K6键按下
       MOV      30H,#0FDH      ;设置音阶6
       MOV      31H,#92H
       LJMP     SET_TIMER
KEY7:
       CJNE     R0,#0BFH,KEY8  ;K7键按下
       MOV      30H,#0FDH      ;设置音阶7
       MOV      31H,#0D6H
       LJMP     SET_TIMER
KEY8: 
       CJNE R0,#7FH,NOKEY  ;K8按下
       MOV      30H,#0FDH      ;设置音阶8
       MOV      31H,#0FBH
SET_TIMER:
       SETB     TR0            ;发声
       SJMP     START
NOKEY:
       CLR      TR0            ;无键按下
       SJMP     START
INT_T0:                        ;T0中断服务程序
       MOV      TH0,30H        ;定时器赋初值
       MOV      TL0,31H
       CPL      BUZZ           ;输出方波
       RETI
       END

(点击图片可放大)

原创文章如转载,请注明:转载自萬用電路板 [ http://www.jiangx.net/ ]

  • quote 1.vega
  • 想问一下这个万用电路板在哪买的?
    jiangx 于 2008-8-24 15:27:32 回复
    就在武汉前进四路电子市场啊,我不是在网上买的
  • 2008-8-21 22:01:55 回复该留言

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

有用链接

最近发表

热文排行

最新评论及回复

图标汇集

  • 留言板
  • 订阅本站的 ATOM 1.0 新闻聚合
  • 订阅本站的 RSS 2.0 新闻聚合

Powered By Z-Blog 1.8

Copyright 2008 JiangX.net 萬用電路板 All Rights Reserved.
鄂ICP备08003060号 [login]