欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機鬧鐘鬧鈴設計 Proteus仿真+PPT+匯編語言程序

[復制鏈接]
跳轉到指定樓層
樓主
單片機學習資料,如何設置一個鬧鐘
1. 能顯示時時-分分-秒秒;
2. 能夠設定定時時間、修改定時時間;
3. 定時時間到能發出報警聲。

PPT內容預覽:



單片機匯編語言源程序如下:
  1. ORG 0000H
  2. LJMP MAIN
  3. ORG 000BH
  4. LJMP TIME
  5. ORG 0100H
  6. MAIN:
  7. MOV SP,#50H
  8. MOV 20H,#00H         //暫存秒、分、時數字
  9. MOV 21H,#00H
  10. MOV 22H,#00H
  11. MOV 23H,#01H
  12. MOV 24H,#01H
  13. MOV 25H,#00H                                                                        
  14. MOV 30H,#00H  //以下至35H 為當前顯示秒鐘分鐘時鐘
  15. MOV 31H,#00H
  16. MOV 32H,#00H
  17. MOV 33H,#00H
  18. MOV 34H,#00H
  19. MOV 35H,#00H
  20. MOV 36H,#01H  //以下至39H 為設定的分鐘時鐘時間
  21. MOV 37H,#00H
  22. MOV 38H,#01H
  23. MOV 39H,#00H
  24. MOV TMOD,#01H                  //16位計數器
  25. MOV TH0,#3CH                  //計數初值=15536 定時50000微秒=0.05秒
  26. MOV TL0,#0B0H
  27. MOV IE,#87H
  28. SETB TR0                        //啟動計數 定時0.5秒后中斷跳轉 TIME
  29. MOV R2,#14H                //20
  30. MOV P2,#0FFH        //P2口寫一
  31. LOOP:
  32.   LCALL TIMEPRO //看當前是否到達設定時間
  33.   LCALL DISPLAY1
  34.   JB P1.1,M1  //設定時間按鈕是否按下,未被按下查詢下一個鍵
  35.   MOV R1, #23H           //存儲按下狀態
  36.   LCALL SETTIME           //跳轉至設定當前時間程序
  37.   LJMP LOOP
  38. M1:
  39.   JB P1.2,M2//確認是否進入設定定時時間,未被按下查詢下一個鍵
  40.   MOV R1,#24H          //存儲按下狀態
  41.   LCALL SETATIME  //跳轉至設定定時時間程序
  42.   LJMP LOOP
  43. M2:
  44.   JB P1.5,M4 //確認是否返回  未被按下跳轉M4返回
  45. M4:
  46.   LJMP LOOP        //功能鍵全都未被按下 返回loop繼續查詢
  47. DELAY: MOV R4,#030H                //延時
  48. DL00:MOV R5,#0FFH
  49. DL11:MOV R6,#9H
  50. DL12:
  51.   DJNZ R6,DL12
  52.   DJNZ R5,DL11
  53.   DJNZ R4,DL00
  54.   RET
  55. SETTIME:
  56. L0:LCALL DISPLAY1  //顯示當前時間
  57. MM1:
  58.   JB P1.3,L1 //查看小時+1按鈕是否按下 未按下查詢下一個鍵
  59.   MOV C,P1.3        
  60.   JC MM1         //防抖動
  61.   LCALL DELAY1 //延時
  62.   JC MM1 //cy=1跳轉 P1.2沒被按下跳轉
  63. MSTOP1:  //確認p1.3按鍵松開,按一次鍵只執行一次
  64.   MOV C,P1.3
  65.   JNC MSTOP1 //未松開按鍵則死循環 松開跳出
  66.   LCALL DELAY1
  67.   MOV C,P1.3
  68.   JNC MSTOP1//防抖動
  69.   CJNE R1,#23H,NEXT         //區分設定當前時間狀態與設定定時狀態
  70. L3:
  71.   INC 22H //小時+1
  72.   MOV A,22H //A =1
  73.   CJNE A,#18H,GO12 //A不等于18H(24)則跳轉(防溢出)
  74.   MOV 22H,#00H //清零(24H清零)
  75.   MOV 34H,#00H
  76.   MOV 35H,#00H
  77.   LJMP L0 //顯示當前時間
  78.   NEXT: LJMP L4
  79. L1:
  80.   JB P1.4,L2 //查詢分鐘+1按鈕是否按下,未按下查詢下一個鍵
  81.   MOV C,P1.4
  82.   JC L1        // 防抖動
  83.   LCALL DELAY1
  84.   JC L1//  直到P1.4按下跳出死循環
  85. MSTOP2:  //確認P1.4松開,按一次鍵只執行一次加一程序
  86.   MOV C,P1.4 //讀取目前按鍵狀態
  87.   JNC MSTOP2 //P1.4未松開進入死循環,松開后跳出
  88.   LCALL DELAY1
  89.   MOV C,P1.4
  90.   JNC MSTOP2//
  91.   CJNE R1,#23H,NEXT1 //判斷是否在設定當前時間狀態下
  92.   L5:
  93.   INC 21H //分鐘+1
  94.   MOV A,21H        
  95.   CJNE A,#3CH,GO11 //分鐘不等于60跳轉,防溢出
  96.   MOV 21H,#00H        //分鐘到達60復位清零
  97.   MOV 32H,#00H
  98.   MOV 33H,#00H
  99.   LJMP L0          //顯示當前時間
  100.   NEXT2:CJNE R1,#24H,L0
  101.   LJMP SETATIME
  102.   L2:
  103.   JB P1.5,NEXT2 //查看P1.5是否按下
  104.   MOV C,P1.5
  105.   JC L2 //再次查詢
  106.   LCALL DELAY1
  107.   MOV C,P1.5
  108.   JC L2// 防抖動 直到P1.4按下跳出循環
  109. STOP1:        //確認P1.5松開
  110.   MOV C,P1.5
  111.   JNC STOP1// P1.5按下跳轉 直到松開
  112.   LCALL DELAY1
  113.   MOV C,P1.5//防抖動
  114.   JNC STOP1
  115.   MOV R1,#00H  //清零按鍵狀態存儲
  116.   LJMP LOOP//返回
  117.   NEXT1: LJMP L6
  118. GO11:                //分鐘顯示預備程序
  119.   MOV B,#0AH  //B=10
  120.   DIV AB         
  121.   MOV 32H,B //放余數        分鐘第二位
  122.   MOV 33H,A //放商         分鐘第一位
  123.   LJMP L0 //顯示
  124. GO12:                   //小時顯示預備程序
  125.   MOV B,#0AH //B=10
  126.   DIV AB        
  127.   MOV 34H,B //余數        小時數第二位
  128.   MOV 35H,A //商  小時數第一位
  129.   LJMP L0        //顯示
  130. SETATIME:LCALL DISPLAY2 //顯示設定時間
  131. N0:LCALL DISPLAY2 //同上
  132. LJMP MM1   //查詢按鍵狀態
  133. L4:
  134.   INC 24H        //小時+1
  135.   MOV A,24H        //
  136.   CJNE A,#24,GO22 //如果A不等于24 跳轉GO22防溢出
  137.   MOV 24H,#00H        //A=24 小時溢出 復位
  138.   MOV 38H,#00H
  139.   MOV 39H,#00H
  140.   LJMP N0  //跳轉顯示
  141. L6:
  142.   INC 23H //分鐘+1
  143.   MOV A,23H        
  144.   CJNE A,#60,GO21 //不等于60跳轉,防溢出
  145.   MOV 23H,#00H        //復位
  146.   MOV 36H,#00H
  147.   MOV 37H,#00H
  148.   LJMP N0  //跳轉顯示
  149. GO21: //分鐘顯示預備程序
  150.   MOV B,#0AH //B=10
  151.   DIV AB //
  152.   MOV 36H,B        // 設定的分鐘第二位
  153.   MOV 37H,A        // 設定的分鐘第一位
  154.   LJMP N0  //跳轉顯示
  155. GO22:         //小時顯示預備程序
  156.   MOV B,#0AH
  157.   DIV AB
  158.   MOV 38H,B        //設定的小時第二位
  159.   MOV 39H,A        //設定的小時第一位
  160.   LJMP N0        //跳轉顯示
  161. TIMEPRO:         //判斷是否到達當前設定時間
  162.   MOV A,21H
  163.   MOV B,23H
  164.   CJNE A,B,BK        // 查詢分鐘是否相等 A B不相等跳轉至BK
  165.   MOV A,22H         
  166.   MOV B,24H        
  167.   CJNE A,B,BK //小時不相等  跳轉至BK
  168.   SETB 25H.0  
  169.   MOV C,25H.0  
  170.   JC XX        //跳轉至XX 時分相等 到達設定時間
  171. XX:
  172.   LCALL TIMEOUT        //跳轉鬧鈴程序
  173. BK:
  174.   RET
  175. TIMEOUT:
  176. X1:
  177.   LCALL BZ //  跳轉喇叭程序
  178.   LCALL DISPLAY2   //顯示設定時間
  179.   CLR 25H.0         //復位
  180.   JB P1.5,X1 //查詢P1.5狀態 按下跳轉                                                                                                   
  181.   LCALL DELAY
  182.   MOV 23H,#00H
  183.   MOV 24H,#00H
  184.   CLR 25H.0        
  185.   LJMP LOOP          //顯示當前時間
  186. BZ:
  187.   CLR P3.7 // 喇叭程序 清零P3.7
  188.   MOV R7,#10  //延時
  189. T2:
  190.   MOV R6,#64H
  191. T3:
  192.   DJNZ R6,T3
  193.   DJNZ R7,T2
  194.   SETB P3.7        //延時一段時間后取反
  195.   RET //返回X1
  196. DELAY1:MOV R4,#14H          //防抖動專用延時
  197. DL001:MOV R5,#0FFH
  198. DL111:DJNZ R5,DL111
  199. DJNZ R4,DL001
  200. RET   
  201. TIME: //時間運行程序,定時器定時0.05秒后產生中斷
  202.   PUSH ACC
  203.   PUSH PSW        //現場保護
  204.   MOV TH0,#3CH
  205.   MOV TL0,#0B0H         //重裝初值
  206.   DJNZ R2,RET0        //R2減一不為0跳轉至RET0 R2=20 循環20次后以后已定時1秒
  207.   MOV R2,#14H        //重裝循環值
  208.   MOV A,20H         //秒鐘存儲單元
  209.   CLR C         //清零CY
  210.   INC A //秒鐘自動加一
  211.   CJNE A,#3CH,GO1 //秒鐘A不等于60 跳轉GO1 防溢出
  212.   MOV 20H,#0 //復位
  213.   MOV 30H,#0
  214.   MOV 31H,#0
  215.   MOV A,21H        //當前時間分鐘存儲單元
  216.   INC A         //定時60秒后分鐘+1
  217.   CJNE A,#3CH,GO2        //分鐘A不等于60跳轉
  218.   MOV 21H,#0H          //復位
  219.   MOV 32H,#0
  220.   MOV 33H,#0
  221.   MOV A,22H          //設定小時時間(當前)
  222.   INC A         //定時60min后小時自動加一
  223.   CJNE A,#18H,GO3 //小時A不等于24跳轉
  224.   MOV 22H,#00H //復位
  225.   MOV 34H,#0
  226.   MOV 35H,#0
  227.   AJMP RET0         //出棧返回
  228. GO1:   //GO123均為顯示預備程序
  229.   MOV 20H,A         //當前秒鐘
  230.   MOV B,#0AH
  231.   DIV AB
  232.   MOV 31H,A         //秒鐘第一位
  233.   MOV 30H,B         //秒鐘第二位
  234.   AJMP RET0
  235. GO2:
  236.   MOV 21H,A         //當前分鐘
  237.   MOV B,#0AH
  238.   DIV AB
  239.   MOV 33H,A          //分鐘第一位
  240.   MOV 32H,B          //分鐘第二位
  241.   AJMP RET0
  242. GO3:
  243.   MOV 22H,A           //當前小時
  244.   MOV B,#0AH
  245.   DIV AB
  246.   MOV 35H,A           //小時第一位
  247.   MOV 34H,B          //小時第二位
  248.   AJMP RET0
  249. RET0:
  250.   POP PSW  //出棧
  251.   POP ACC
  252.   RETI        //中斷返回
  253. DISPLAY1:        //顯示當前時間
  254.   MOV R0,#30H //
  255.   MOV R3,#0FEH //數碼管選擇碼
  256.   MOV A,R3 //
  257. PLAY1:
  258.   MOV P2,A                //數碼管選通 寫P2
  259. MOV A,@R0  //秒鐘第二位存儲單元
  260. MOV DPTR,#DSEG1        //表首地址送DPTR
  261. MOVC A,@A+DPTR         //查表=查對應數字的數碼管顯示碼送對應選通數碼管
  262. MOV P0,A   //輸出顯示
  263. LCALL DL1 //延時
  264. MOV P2,#0FFH //讀P2先寫一
  265. MOV A,R3
  266. RL A  //向左循環選擇數碼管
  267. JNB ACC.6,LD1  //循環6次 跳轉至LD1返回
  268. INC R0 //30——35以此為秒分時的二位、一位、輪流顯示
  269. MOV R3,A
  270. LJMP PLAY1
  271. ……………………

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

所有資料51hei提供下載:
仿真ppt程序.7z (7.65 MB, 下載次數: 105)


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:765657 發表于 2020-8-23 14:31 | 只看該作者
請問這個里面是沒有proteus文件的嗎?
回復

使用道具 舉報

板凳
ID:765657 發表于 2020-8-25 23:27 | 只看該作者
請問這個如果是用八位LED數碼管匯編還能用嗎?
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表