久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 8348|回復: 0
打印 上一主題 下一主題
收起左側

51單片機蜂鳴器播放歌曲匯編源碼和仿真

[復制鏈接]
跳轉到指定樓層
樓主
一個用51單片機播放歌曲的小程序


單片機匯編語言源程序如下:
  1.   org 0000H
  2. sjmp start

  3. org  0040H
  4. start: mov R3,#-1;

  5. loop4:
  6.        jb p1.0,stopzero ; the first step: see if button1 on. it is 0 jump to stopzero  (2us)
  7.            inc R3  ;R3=0 at first   (1us)
  8.        sjmp mod1;butoon=1  jump to paly the song (2us)

  9. stopzero:  ;(5us)
  10.          jb p1.1,stopone         ;see if button2 is on. it's 0 jump to stoptone(2us)
  11.                  inc R3  ;  R3=0 at first   (1us)
  12.          sjmp mod1         ; jump to paly the song (2us)
  13. stopone:; (5us)
  14.           jb p1.3,loop4         ;see if button3 is on. it's 0 jump to stoptwo(2us)
  15.           inc R3         
  16.                   sjmp mod1         ; jump to paly the song (2us)
  17.                  

  18.                              

  19. mod1:        mov a,R3       ;(1us)
  20. chec1:       jb p1.0,chec2         ;(2us)find which song we are playing (2us)
  21.                          sjmp b1                ;(2us)

  22. chec2:             jb p1.1,chec3
  23.                          sjmp b2

  24. chec3:             jb p1.3,chec1
  25.                          sjmp b3

  26. b1:              mov b,#11        ;(1us)  b=first song's notes number
  27.                          sjmp di ;(2us)

  28. b2:              mov b,#30 ;b=second song's notes number
  29.                          sjmp di

  30. b3:              mov b,#30         ;b= third song's notes number
  31.                      sjmp di                 

  32. di:          div ab         ;divide a by b ,remainder is in b (4us)
  33.                          mov a,b        ; put remainder in a  (1us)
  34.                          mov R3,b        ;put remainder in R3(which will be divided later  (1us)
  35.                         
  36.                           
  37. check1:      jb p1.0,check2 ;to find which song is playing and get the duration table (
  38.                          sjmp songdu1

  39. check2:             jb p1.1,check3
  40.                          sjmp songdu2

  41. check3:             jb p1.3,check1
  42.                          sjmp songdu3

  43. songdu1:                  mov dptr,#durationone         ;get duration table (2us)
  44.                                          sjmp get

  45. songdu2:                  mov dptr,#durationtwo         ;get duration table
  46.                      sjmp get

  47. songdu3:                  mov dptr,#durationthree         ;get duration table
  48.                      sjmp get
  49.                                           
  50. get:             movc a,@a+dptr          ;get the data in duration table one by one(2us)
  51.                                  mov R2,a; put a in R2 (1us)
  52.                                  
  53. ;loop3(24+3+notes's half period)
  54. loop3:             mov a,b                  ;give reminder to a agian to get notes table(1us)
  55. che1:      jb p1.0,che2
  56.                          sjmp songno1

  57. che2:             jb p1.1,che3
  58.                          sjmp songno2

  59. che3:             jb p1.3,che1
  60.                          sjmp songno3

  61. songno1:                  mov dptr,#notesone         ;get duration table (2us)
  62.                                          sjmp getn

  63. songno2:                  mov dptr,#notestwo         ;get duration table
  64.                      sjmp getn

  65. songno3:                  mov dptr,#notesthree         ;get duration table
  66.                      sjmp getn

  67.         
  68. getn:                 movc a,@a+dptr        ;  (2us)
  69.                  mov R1,a  ;put note now in R1                        (1us)

  70. loop2:mov R0,#10  ;the part of play every note:(2*R0+2+1)*R1
  71. loop1:  djnz R0,$
  72.            djnz R1,loop2
  73.                    cpl p3.1                  
  74.                    djnz R2, loop3  ;start make delay (2us) R2*(loop3+2us)
  75.               
  76.                    mov R1,255                  ;make rest between two notes (1us)
  77.                
  78. delay2:mov R0,#255
  79. delay1:djnz R0,$
  80.            djnz R1,delay2
  81.                    acall loop4 ; get all steps again and agian
  82.                  sjmp $

  83. notesone:  db 66,83,105,83,74,56,74,66,74,105,83   ; the delay time of the music score one by one      
  84. ……………………

  85. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
lab2-8051.rar (65.72 KB, 下載次數: 40)


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 中文字幕av第一页 | 久久久久亚洲 | 黄色片在线网站 | 99久久精品免费看国产免费软件 | 国产粉嫩尤物极品99综合精品 | 国产精品久久在线观看 | 69精品久久久久久 | 一本大道久久a久久精二百 国产成人免费在线 | 一区二区高清 | 日本午夜精品一区二区三区 | 国产视频久久久久 | 人人干人人艹 | 国产美女福利在线观看 | 亚洲一区二区久久 | 99亚洲国产精品 | 色嗨嗨 | 欧美黄色片在线观看 | 农村真人裸体丰满少妇毛片 | 午夜影院在线免费观看视频 | 日韩av电影院 | 精品亚洲一区二区 | 高清人人天天夜夜曰狠狠狠狠 | 少妇诱惑av | 久久99这里只有精品 | 另类二区 | 成人国产精品免费观看 | 欧美视频一区二区三区 | 久久不射网 | 欧美精品一区二区三区在线 | 婷婷激情在线 | 在线观看一区 | 成人欧美一区二区三区黑人孕妇 | 日本精品一区二区三区在线观看视频 | 日本免费一区二区三区 | 亚洲第一成人影院 | 午夜国产精品视频 | 精品亚洲二区 | xx视频在线| 亚洲精品乱码久久久久久按摩观 | 欧美电影在线观看网站 | 午夜小电影 |