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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5354|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

c51單片機(jī)匯編語言單片機(jī)八位搶答器程序 求指導(dǎo)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:334971 發(fā)表于 2018-5-21 16:14 | 只看該作者 回帖獎勵 |倒序?yàn)g覽 |閱讀模式
單片機(jī)源程序如下:
  1. OK EQU 20H
  2. RING EQU 22H
  3. ORG 0000H
  4. AJMP MAIN
  5. ORG 0003H
  6. AJMP INT0SUB
  7. ORG 000BH
  8. AJMP T0INT
  9. ORG 0013H
  10. AJMP INT1SUB
  11. ORG 001BH
  12. AJMP T1INT
  13. ORG 0040H
  14. MAIN:MOV R1,#30;初設(shè)搶答時間為 30s
  15. MOV R2,#60;初設(shè)答題時間為 60s
  16. MOV TMOD,#11H;設(shè)置定時器工作于方式 1
  17. MOV TH0,#0FH
  18. MOV TL0,#0B1H;越高發(fā)聲頻率越高,越尖
  19. MOV TH1,#3CH
  20. MOV TL1,#0B0H;50ms為一次溢出中斷
  21. SETB EA
  22. SETB ET0
  23. SETB ET1
  24. SETB EX0
  25. SETB EX1;允許 4個中斷, T0/T1/INT0/INT1
  26. CLR OK
  27. CLR RING
  28. SETB TR1
  29. SETB TR0;一開始就運(yùn)行定時器,以開始顯示 FFF ,若要重新計(jì)數(shù),重置 TH1/TL1就 行
  30. ;=====查詢程序 =======
  31. START:MOV R5,#0BH
  32. MOV R4,#0BH
  33. MOV R3,#0BH
  34. ACALL DISPLAY;未開始搶答時候顯示 FFF
  35. JB P3.0,NEXT
  36. ACALL DELAY
  37. JB P3.0,NEXT;去抖動,如果“開始”按下就向下執(zhí)行,否則跳到非法搶答查詢 ACALL BARK;按鍵發(fā)聲
  38. MOV A,R1
  39. MOV R6,A;送 R1->R6,因?yàn)?R1中保存了搶答時間
  40. SETB OK;搶答標(biāo)志位,勇于 COUNT 程序中半段是否查詢搶答
  41. MOV R7,#01H;讀搶答鍵數(shù)據(jù)信號標(biāo)志,這里表示只讀一次有用信號
  42. MOV R3,#0AH;搶答只顯示計(jì)時,滅號數(shù)
  43. AJMP COUNT;進(jìn)入倒計(jì)時程序, “查詢有效搶答的程序”在 COUNT 里面 NEXT:JNB P1.0,FALSE1
  44. JNB P1.1,FALSE2
  45. JNB P1.2,FALSE3
  46. JNB P1.3,FALSE4
  47. JNB P1.4,FALSE5
  48. JNB P1.5,FALSE6
  49. JNB P1.6,FALSE7
  50. JNB P1.7,FALSE8
  51. AJMP START
  52. ;====非法搶答處理程序 =====
  53. FALSE1:MOV R3,#01H
  54. AJMP ERROR
  55. FALSE2:MOV R3,#02H
  56. AJMP ERROR
  57. FALSE3:MOV R3,#03H
  58. AJMP ERROR
  59. FALSE4:MOV R3,#04H
  60. AJMP ERROR
  61. FALSE5:MOV R3,#05H
  62. AJMP ERROR
  63. FALSE6:MOV R3,#06H
  64. AJMP ERROR
  65. FALSE7:MOV R3,#07H
  66. AJMP ERROR
  67. FALSE8:MOV R3,#08H
  68. AJMP ERROR
  69. ;======INT0(搶答時間 R1調(diào)整程序) =====
  70. INT0SUB:MOV A,R1
  71. MOV B,#0AH
  72. DIV AB
  73. MOV R5,A
  74. MOV R4,B
  75. MOV R3,#0AH
  76. ACALL DISPLAY;現(xiàn)在兩個時間 LED 上顯示 R1
  77. JNB P3.4,INC0;P3.4為 +1S鍵,如按下跳到 INC0
  78. JNB P3.5,DEC0;P3.5為 -1s 鍵,如按下跳到 DEC0
  79. JNB P3.1,BACK0;P3.1為確定鍵,如按下跳到 BACK0
  80. AJMP INT0SUB
  81. INC0:MOV A,R1
  82. CJNE A,#63H,ADD0;如果不是 99, R2加 1,如果加到 99, R1就置 0,重新加起
  83. MOV R1,#00H
  84. ACALL DELAY1
  85. AJMP INT0SUB
  86. ADD0:INC R1
  87. ACALL DELAY1
  88. AJMP INT0SUB
  89. DEC0:MOV A,R1
  90. JZ SETR1;如果 R1為 0, R1就置 99 DEC R1
  91. ACALL DELAY1
  92. AJMP INT0SUB
  93. SETR1:MOV R1,#63H
  94. ACALL DELAY1
  95. AJMP INT0SUB
  96. BACK0:RETI
  97. ;=====INT1(回答時間 R2調(diào)整程序) ===== INT1SUB:MOV A,R2
  98. MOV B,#0AH
  99. DIV AB
  100. MOV R5,A
  101. MOV R4,B
  102. MOV R3,#0AH
  103. ACALL DISPLAY
  104. JNB P3.4,INC1
  105. JNB P3.5,DEC1
  106. JNB P3.1,BACK1
  107. AJMP INT1SUB
  108. INC1:MOV A,R2
  109. CJNE A,#63H,ADD1
  110. MOV R2,#00H
  111. ACALL DELAY1
  112. AJMP INT1SUB
  113. ADD1:INC R2
  114. ACALL DELAY1
  115. AJMP INT1SUB
  116. DEC1:MOV A,R2
  117. JZ SETR2
  118. DEC R2
  119. ACALL DELAY1
  120. AJMP INT1SUB
  121. SETR2:MOV R2,#63H
  122. ACALL DELAY1
  123. AJMP INT1SUB
  124. BACK1:RETI
  125. ;=====倒計(jì)時程序(搶答倒計(jì)時和回答倒計(jì)時都調(diào)到該程序) ======
  126. REPEAT:MOV A,R2;使用錦囊時重新計(jì)時
  127. MOV R6,A
  128. CLR RING
  129. COUNT:MOV R0,#00H;重置定時器中斷次數(shù)
  130. MOV TH1,#3CH
  131. MOV TL1,#0B0H;重置定時器
  132. RECOUNT:MOV A,R6;R6保存了倒計(jì)時間,之前應(yīng)先將搶答或答題時間給 R6
  133. MOV B,#0AH
  134. DIV AB;除十分出個位 /十位
  135. MOV 30H,A;十位存于 (30H)
  136. MOV 31H,B;個位存于 (31H)
  137. MOV R5,30H;取十位
  138. MOV R4,31H;取個位
  139. MOV A,R6
  140. SUBB A,#07H
  141. JNC LARGER;大于 5s 調(diào)到 LARGER, 小于等于 5s 會提醒
  142. MOV A,R0
  143. CJNE A,#0AH,FULL;1s中 0.5s 向下運(yùn)行
  144. CLR RING
  145. AJMP CHECK
  146. FULL:CJNE A,#14H,CHECK;下面是 1s 的情況,響并顯示號數(shù)并請 R0,重新計(jì)數(shù)
  147. SETB RING
  148. MOV A,R6
  149. JZ QUIT;計(jì)時完畢
  150. MOV R0,#00H
  151. DEC R6;一秒標(biāo)志減 1
  152. AJMP CHECK
  153. LARGER:MOV A,R0
  154. CJNE A,#14H,CHECK;如果 1s 向下運(yùn)行,否則跳到查“停 /顯示”
  155. DEC R6;計(jì)時一秒 R6自動減 1
  156. MOV R0,#00H
  157. CHECK:JNB P3.1,QUIT;如按下停止鍵退出
  158. JNB OK,CHECKK;只在回答倒計(jì)時才有效
  159. AJMP NEXTT
  160. CHECKK:JNB P3.0,REPEAT;判斷是否使用錦囊
  161. NEXTT:ACALL DISPLAY
  162. JB OK,ACOUNT; 如果是搶答倒計(jì)時,如是則查詢搶答,否則跳過查詢繼續(xù)倒數(shù)(這 里起到鎖搶答作用)
  163. AJMP RECOUNT
  164. ACOUNT:MOV A,36H
  165. JNB ACC.0,TRUE1
  166. JNB ACC.1,TRUE2
  167. JNB ACC.2,TRUE3
  168. JNB ACC.3,TRUE4
  169. JNB ACC.4,TRUE5
  170. JNB ACC.5,TRUE6
  171. JNB ACC.6,TZ1
  172. JNB ACC.7,TZ2
  173. AJMP RECOUNT
  174. TZ1:JMP TRUE7
  175. TZ2:JMP TRUE8
  176. QUIT:CLR OK;如果按下了“停止”執(zhí)行的程序
  177. CLR RING
  178. AJMP START
  179. ;=====正常搶答處理程序 =======
  180. TRUE1:ACALL BARK
  181. MOV A,R2
  182. MOV R6,A;搶答時間 R2送 R6
  183. MOV R3,#01H
  184. CLR OK;因?yàn)榇痤}的計(jì)時不在查詢搶答,所以就鎖了搶答 AJMP COUNT
  185. TRUE2:ACALL BARK
  186. MOV A,R2
  187. MOV R6,A
  188. MOV R3,#02H
  189. CLR OK
  190. AJMP COUNT
  191. TRUE3:ACALL BARK
  192. MOV A,R2
  193. MOV R6,A
  194. MOV R3,#03H
  195. CLR OK
  196. AJMP COUNT
  197. TRUE4:ACALL BARK
  198. MOV A,R2
  199. MOV R6,A
  200. MOV R3,#04H
  201. CLR OK
  202. AJMP COUNT
  203. TRUE5:ACALL BARK
  204. MOV A,R2
  205. MOV R6,A
  206. MOV R3,#05H
  207. CLR OK
  208. AJMP COUNT
  209. TRUE6:ACALL BARK
  210. MOV A,R2
  211. MOV R6,A
  212. MOV R3,#06H
  213. CLR OK
  214. AJMP COUNT
  215. TRUE7:ACALL BARK
  216. MOV A,R2
  217. MOV R6,A
  218. MOV R3,#07H
  219. CLR OK
  220. AJMP COUNT
  221. TRUE8:ACALL BARK
  222. MOV A,R2
  223. MOV R6,A
  224. MOV R3,#08H
  225. CLR OK
  226. AJMP COUNT
  227. ;=====犯規(guī)搶答程序 =========
  228. ERROR:MOV R0,#00H
  229. MOV TH1,#3CH
  230. MOV TL1,#0B0H
  231. MOV 34H,R3;犯規(guī)號數(shù)暫存與(34H)
  232. HERE:MOV A,R0
  233. CJNE A,#06H,FLASH;0.3s向下運(yùn)行 ->滅并停響
  234. CLR RING
  235. MOV R3,#0AH
  236. MOV R4,#0AH
  237. MOV R5,#0AH;三燈全滅
  238. AJMP CHECK1
  239. FLASH:CJNE A,#0CH,CHECK1;下面是 0.8s 的情況,響并顯示號數(shù)并清 R0,重新計(jì) SETB RING
  240. MOV R0,#00H
  241. MOV R3,34H;取回號數(shù)
  242. MOV R5,#0BH
  243. MOV R4,#0BH;顯示 FF 和號數(shù)
  244. AJMP CHECK1
  245. CHECK1:JNB P3.1,QUIT
  246. ACALL DISPLAY
  247. AJMP HERE
  248. QUIT1:CLR RING
  249. CLR OK
  250. AJMP START
  251. ;=====顯示程序 =====
  252. DISPLAY:MOV DPTR,#DAT1; 查表顯示程序, 利用 P0口做段選碼輸出 /P2低三位做位選嗎輸 出
  253. MOV A,R3
  254. MOVC A,@A+DPTR
  255. MOV P2,#0FEH
  256. MOV P0,A
  257. ACALL DELAY2
  258. MOV DPTR,#DAT2
  259. MOV A,R5
  260. MOVC A,@A+DPTR
  261. MOV P2,#0FDH
  262. MOV P0,A
  263. ACALL DELAY2
  264. MOV A,R4
  265. MOVC A,@A+DPTR
  266. MOV P2,#0FBH
  267. MOV P0,A
  268. ACALL DELAY2
  269. RET
  270. DA T1:DB 00H,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,00H,71H;滅、 1、 2、 3、 4、 5、 6、 7、 8、 9、滅、 F
  271. DA T2:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,00H,71H;0、 1、 2、 3、 4、 5、 6、 7、 8、 9、滅、 F
  272. ;======加減時間延時(起到不會按下就加 N 個數(shù)) =====
  273. DELAY1:MOV 35H,#08H
  274. LOOP0:ACALL DISPLAY
  275. DJNZ 35H,LOOP0
  276. RET
  277. ;======延時 4236個機(jī)器周期(去抖動用到) =====
  278. DELAY:MOV 32H,#12H
  279. LOOP:MOV 33H,#0AFH
  280. LOOP1:DJNZ 33H,LOOP1
  281. DJNZ 32H,LOOP
  282. RET
  283. ;======延時 4236個機(jī)器周期(顯示用到) =======
  284. DELAY2:MOV 32H,#43H
  285. LOOP3:MOV 33H,#1EH
  286. MOV A,R7;每隔 60~70個機(jī)器周期讀一次 P1口,全為 1時為無效數(shù)據(jù),繼續(xù)讀,有 一個不為 1時,轉(zhuǎn)到正常強(qiáng)大處理
  287. JNZ AAAA1;沒讀到有效數(shù)據(jù)時繼續(xù)轉(zhuǎn)到 AAAA1
  288. LOOP2:DJNZ 33H,LOOP2
  289. DJNZ 32H,LOOP3
  290. RET
  291. ;=======讀搶答按鍵數(shù)據(jù)口程序 ========
  292. ; 由于在度搶答數(shù)據(jù)口的時候,單片機(jī)首先進(jìn)入倒計(jì)時程序,再調(diào)用顯示程序,最后哎檢測 安檢口
  293. ; 然而在檢測安檢口時動態(tài)掃描要調(diào)用三次(4MS )延時程序。這樣就會導(dǎo)致讀數(shù)據(jù)口出現(xiàn) 滯后,造成 1號優(yōu)先最高, 8號最低
  294. ; 故采用在延時子程序中加了讀數(shù)據(jù)口程序,保證了靈敏度和可靠性
  295. AAAA1:MOV A,P1
  296. CJNE A,#0FFH,AA1; 當(dāng)不全為 1時的數(shù)據(jù)為有效數(shù)據(jù)
  297. AA0:MOV 36H,A;將有效數(shù)據(jù)送到 36H 暫存
  298. AJMP LOOP2
  299. AA1:DEC R7
  300. AJMP AA0
  301. ;=====發(fā)聲程序 ======
  302. BARK:SETB RING
  303. ACALL DELAY1
  304. ACALL DELAY1
  305. CLR RING;按鍵發(fā)聲
  306. RET
  307. ;=====T0溢出中斷(響鈴程序) ======
  308. T0INT:MOV TH0,#0ECH
  309. MOV TL0,#0FFH
  310. JNB RING,OUT
  311. CPL P3.6;RING標(biāo)志位為 1時 P3.6口不短取反使喇叭發(fā)出一定頻率的聲音 OUT:RETI
  312. ;=====T1溢出中斷(計(jì)時程序) ======
  313. T1INT:MOV TH1,#3CH
  314. MOV TL1,#0B0H
  315. INC R0
  316. RETI
  317. END
復(fù)制代碼

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

使用道具 舉報(bào)

沙發(fā)
ID:760763 發(fā)表于 2021-6-23 09:09 | 只看該作者
編譯有錯誤
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久久精品网 | 欧产日产国产精品国产 | 啪啪毛片| 蜜月va乱码一区二区三区 | 成人九区 | 婷婷久久五月天 | 久久久久一区 | 天天插天天狠天天透 | 一级毛片视频在线 | 一区二区三区视频在线观看 | 国产一区二区三区不卡av | 天天射视频| 亚洲一区二区三区免费观看 | 精品国产欧美在线 | 特黄色一级毛片 | 精品亚洲一区二区三区 | 天天玩天天干天天操 | 日本成人一区二区 | 99在线播放| 一区二区伦理电影 | 欧美成人一区二区 | 欧美在线视频一区二区 | 在线观看免费黄色片 | 精品国产乱码久久久久久影片 | 韩国av一区二区 | 天天综合国产 | 亚洲久在线| 9久久 | 亚洲国产成人精品在线 | 九九热这里只有精品在线观看 | 美女视频一区 | 香蕉国产在线视频 | 一区二区不卡视频 | 91视频进入| 国产精品久久福利 | 日本电影韩国电影免费观看 | 精品一区二区不卡 | 一区二区精品在线 | 亚州精品天堂中文字幕 | 99精品国产一区二区青青牛奶 | 精品视频一区二区在线观看 |