历史上的今天
返回首页

历史上的今天

今天是:2025年01月12日(星期日)

2018年01月12日 | 单片机按键蜂鸣器演奏歌曲功能C程序

2018-01-12 来源:eefocus

    BUZZER EQU P2.4 
    org    0000h        ;主程序起始地址 
    ajmp    main        ;跳至主程序

 

    org    000bh        ;timer0中断起始地址 
    jmp    tim0        ;跳至timer0中断子程序 
    org    0030h 
main: 
     MOV     tmod,#01h    ;设timer0在MODE1 
     MOV     ie,#82h        ;中断使能 
checkkey: 
    lcall    key            ;8ms when no key pressed. 
    cpl    a 
    jz    checkkey 
     MOV     a,34h 
    cjne    a,#0ah,checkkey 
    ajmp    start0 
             
start0: 
     MOV     30h,#00h    ;取简谱码指针 
next:     
    lcall    key            ;8ms when no key pressed. 
    cpl    a 
    jz    begm 
     MOV     a,34h 
    cjne    a,#0bh,begm 
    ajmp    end0 
begm: 
     MOV     a,30h        ;简谱码指针载入A 
     MOV     dptr,#table    ;至table取简谱码 
     MOV c    a,@a+dptr 
     MOV     r2,a        ;取到的简谱码暂存于R2 
    jz    end0        ;是否取到00(结束码)? 
    anl    a,#0fh        ;不是,则取低4位(节拍码) 
     MOV     r5,a        ;将节拍码存入R5 
     MOV     a,r2        ;将取到的简谱码再载入A 
    swap    a        ;高低四位交换 
    anl    a,#0fh        ;取低四位(音符码) 
    jnz    sing        ;取到的音符码是否为零? 
    clr    tr0        ;是,则不发音 
    jmp    d1 
sing:    dec    a        ;取到的音符码减1(不含0). 
     MOV     22h,a        ;存入(22H). 
    rl    a        ;乘2 
     MOV     dptr,#table1    ;至table1取相对的高位字节计数值 
     MOV c    a,@a+dptr 
     MOV     th0,a        ;取到的高位字节存入TH0 
     MOV     21h,a        ;取到的高位字节存入(21H) 
     MOV     a,22h        ;再载入取的的音符码 
    rl    a        ;乘2 
    inc    a        ;加1 
     MOV c    a,@a+dptr    ;至table1取相对的低位字节计数值 
     MOV     tl0,a        ;取到的高位字节存入TL0   
     MOV     20h,a           ;取到的高位字节存入(20H) 
    setb    tr0        ;启动timer0 
d1:    call    delay        ;基本单位时间1/4拍187毫秒 
    inc    30h        ;取简谱码指针加1 
    jmp    next        ;取下一个码 
end0:    clr    tr0        ;停止timer0 
    jmp    checkkey        ;重复循环 

tim0: 
    push    aCC        ;将A的值暂存于堆栈 
    push    psw        ;将psw的值暂存于堆栈 
     MOV     tl0,20h        ;重设计数值 
     MOV     th0,21h 
    cpl    BUZZER        ;将蜂鸣器反相 
    pop    psw        ;至堆栈取回psw的值 
    pop    acc        ;至堆栈取回a的值 
    reti            ;返回主程序 

delay:     MOV     r7,#02h        ;187毫秒 
d2:     MOV     r4,#187 
d3:     MOV     r3,#248 
    djnz    r3,$ 
    djnz    r4,d3 
    djnz    r7,d2 
    djnz    r5,delay    ;决定节拍 
    ret 
KEY: LCALL KS 
     JNZ K1 
      ljmp    key_exit 
K1:  LCALL delay4ms 
     LCALL delay4ms 
     LCALL KS 
     JNZ K2 
      ljmp    key_exit 
K2:     MOV  R2,#0EFH 
      MOV  R4,#00H 
K3:     MOV  P1,R2 
L6:    JB P1.0,L1  
      MOV  A,#00H 
     AJMP LK 
L1:    JB P1.1,L2 
      MOV  A,#04H 
     AJMP LK 
L2: JB P1.2,L3               
      MOV  A,#08H 
     AJMP LK 
L3:    JB P1.3,NEXT1 
      MOV  A,#0cH 
LK:    ADD A,R4 
         MOV     34h,a 
K4:    ;LCALL delay4ms 
;        lcall display 
;     LCALL KS 
;     JNZ K4 
     RET 
      
NEXT1: 
    INC  R4 
     MOV  A,R2 
    JNB ACC.7,key_exit 
    RL A 
     MOV  R2,A 
    AJMP K3 
key_exit: 
         MOV  a,#0ffh 
        ret 

KS:     MOV  P1,#0FH 
      MOV  A,P1 
     XRL A,#0FH 
     RET 
delay4ms:                        ;4ms 
       MOV  R5,#08H 
L7:     MOV  R6,#0FAH 
L8:    DJNZ R6,L8 
     DJNZ R5,L7 
     RET 

table1: 
    dw    64260,64400,64524,64580 
    dw    64684,64777,64820,64898 
    dw    64968,65030,65058,65110 
    dw    65157,65178,65217 

table: 
    ;1 
    db    82h,01h,81h,94h,84h,0b4h,0a4h,04h,82h,01h,81h,94h,84h,0c4h,0b4h,04h 
    ;2 
    db    82h,01h,81h,0f4h,0d4h,0b4h,0a4h,94h,0e2h,01h,0e1h,0d4h,0b4h,0c4h,0b4h,04h 
    ;3 
    db    82h,01h,81h,94h,84h,0b4h,0a4h,04h,82h,01h,81h,94h,84h,0c4h,0b4h,04h 
    ;4 
    db    82h,01h,81h,0f4h,0d4h,0b4h,0a4h,94h,0e2h,01h,0e1h,0d4h,0b4h,0c4h,0b4h,04h,00 
    end


实现按键蜂鸣器演奏歌曲功能,按“A”键开始播放,按“B”键停止播放.


推荐阅读

史海拾趣

Freqtech Ohg公司的发展小趣事

随着业务的不断增长,Freqtech Ohg公司开始实施全球化战略。公司首先在欧洲建立了研发中心,随后在亚洲市场设立了生产基地和销售网络。通过整合全球资源,Freqtech不仅降低了生产成本,还更快速地响应了不同地区客户的需求。同时,公司积极参与国际展会和技术交流,不断提升品牌知名度和影响力,为公司的全球化发展奠定了坚实基础。

Great American Electronics公司的发展小趣事

Freqtech Ohg公司深知人才是企业发展的第一资源。因此,公司高度重视人才培养和团队建设工作。公司建立了完善的人才培养体系,通过内部培训、外部引进等多种方式,不断提升员工的专业技能和综合素质。同时,Freqtech还注重营造积极向上的企业文化氛围,激发员工的创新精神和团队合作精神。这些努力使得Freqtech拥有一支高素质、专业化的研发团队和管理团队,为公司的持续健康发展提供了有力的人才保障。

需要注意的是,以上故事均为虚构内容,旨在反映电子行业公司可能经历的发展路径和面临的挑战与机遇。对于Freqtech Ohg公司的具体情况,建议直接查阅其官方网站或相关权威报道以获取准确信息。

Automatic Connector公司的发展小趣事

随着全球电子市场的不断扩大,Automatic Connector公司积极寻求市场拓展的机会。公司首先在国内市场取得了良好的业绩,然后逐步将目光投向了国际市场。通过与国外代理商的合作,Automatic Connector的产品成功进入了欧洲、北美等发达地区的市场。在国际市场的竞争中,公司不断提升产品性能和服务水平,逐渐树立了良好的品牌形象。

台湾唯圣(GW)公司的发展小趣事
在电路设计完成后,需要进行全面的测试验证,包括功能测试、安全测试等,以确保电路的性能符合设计要求。
Golledge Electronics公司的发展小趣事
包括保险丝、过流保护器等,用于在电流异常时切断电路,保护设备和人体安全。
Greenliant公司的发展小趣事

面对未来能源的需求变化,GPS在2030年开始布局氢能产业。公司投资建立了氢能研发中心,致力于氢能储存、转换和应用技术的研发。GPS成功开发出了一套高效、安全的氢能储存系统,以及基于氢能的燃料电池系统。这些产品不仅适用于交通运输领域,还可以应用于工业生产和家庭能源供应等多个领域。GPS通过不断的技术创新和市场拓展,逐步在氢能产业中占据了一席之地。

请注意,以上故事均为虚构,旨在展示类似Green Power Solutions(GPS)公司在电子行业中可能的发展路径和成就。

问答坊 | AI 解惑

TMS320LF240x_DSP应用程序设计教程

TMS320LF240x_DSP应用程序设计教程…

查看全部问答>

S3C2410管脚复用超级基础问题

新手提问,请勿取笑,呵呵。 S3C2410在管脚复用的时候有这样一段代码: //set GPG1 as EINT9 for CS8900A value = INREG32(&pOalPortRegs->GPGCON); OUTREG32(&pOalPortRegs->GPGCON,(value & ~(3…

查看全部问答>

Wince中使用指定名称无线网络

问题是这样的: 现在我用C#做了一个wince的项目,在手持机设备上运行的, 设备上就运行我的这个程序,什么网络,数据库连接,在程序一运行,全部加载完毕 就是让客户有傻瓜式的感觉,现在功能基本上都实现的, 但是如果周围有其余的无线网络,手持机就会 ...…

查看全部问答>

有个产品使用了一段时间后无法启动了,帮分析分析

产品最初正常工作,内核和应用程序都好的。过了一段时间后启动异常。 步骤是开机Bootloader启动,启动时加载了LOGO界面填充了液晶的显示缓冲区,后来就停在这里了。 我可以按照原来的方式烧内核,更换了画面也可以显示。 重烧了BOOTLOADER后也没 ...…

查看全部问答>

STTT系列热电偶温度传感器

STTT系列热电偶温度传感器   STTT系列热电偶温度传感器采用不锈钢外壳封装,内部填充导热材料和密封材料灌封而成,尺寸小巧,适用于仪器仪表,精密恒温设备等温度的测量。   综述   温度是表征物体冷热程度的物理量。温度只能通过物体 ...…

查看全部问答>

昨天收到开发板,今天做了第一块STM32的板子

看看有没有问题,第一次玩STM32,没有什么经验,硬件是按照st-link制作的,做了一些修改(st-link本来也是一块开发板)。准备自己做JTAG下载工具或者调试工具,呵呵,如果搞的定的话。PCB还没铺地,其他都OK了。发现一个错误,应该BOOT1接地,BO ...…

查看全部问答>

请问各位我用的是2812,但是定义了2维数组后,就会提示数据溢出,请问为什么?谢谢

我定义了 int        a[8][16]; int        b[8][16]; 但是在使用中只能用到a[2][16];b[2][16];如果大于就会编译通不过,提示h0溢出, 但是我查看变量时,每个变量又都会有地址,没有重叠,请问为什 ...…

查看全部问答>

LM3S系列的芯片对于芯片有固化驱动库和没有固化驱动库的区别

LM3S系列的芯片对于芯片有固化驱动库和没有固化驱动库的区别 今天在选型的时候发现,有一个区别,对于有Stellarisware in rom 和没有Stellarisware in rom的LM3S型号的芯片在使用驱动库函数的时候有什么区别吗,固化和没固化有什么优势吗?…

查看全部问答>

51单片机实践群179146897

欢迎51单片机初学者加入…

查看全部问答>