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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于單片機匯編語言和proteus的最新搶答器設計

[復制鏈接]
跳轉到指定樓層
樓主
畢業設計做的項目,用proteus和keil軟件做的搶答器,下面是仿真原理圖:


單片機匯編語言源程序如下:
  1. SO BIT 2FH.0               ;發聲標志
  2. RESET EQU P2.0             ;搶答復位與設定時間
  3. STA EQU P2.1               ;搶答開始
  4. TTIME EQU 10H            ;暫存時間16進制
  5. TIME EQU 15H                 ;時間10進制
  6. PL EQU 12H                 ;搶答到的人
  7. TEAM EQU 39H                ;搶答到的人所在組
  8.                            ;LCD n的程序為顯示子程序
  9.                            ;F0為時間是否已到與
  10. KEY0 EQU P3.3
  11. KEY1 EQU P3.4
  12. FLAGT EQU 2FH.1            ;是否進HOLDON循環標志
  13. ANS EQU  P2.2              ;回答按鍵
  14. FLAG0 EQU 2FH.2            ;選手編號跳出循環標志
  15. WRO EQU P2.6               ;搶答正確與否
  16. RIG EQU P2.7               
  17. ORG 0000H
  18. LJMP MAIN
  19. ORG 000BH
  20. LJMP T00
  21. ORG 001BH
  22. LJMP T11
  23. ;******************************************************************************************************
  24. ;初始設置
  25. MAIN:
  26. MOV SP,#50H
  27. MOV 18H,#0FFH
  28. MOV TMOD,#11H
  29. MOV TH0,#3CH
  30. MOV TL0,#0B0H
  31. MOV TH1,#0FCH
  32. MOV TL1,#18H
  33. SETB EA
  34. SETB ET0
  35. SETB ET1
  36. SETB TR1
  37. CLR F0
  38. CLR SO
  39. CLR KEY0               ;矩陣式鍵盤初始化
  40. SETB KEY1



  41. ;******************************************************************************************************
  42. ;復位位置
  43. INI:
  44. CLR SO                   ;停止發聲
  45. CLR FLAGT
  46. CLR FLAG0
  47. CLR TR0
  48. MOV TTIME,#30            ;設置30S計時時間
  49. MOV PL,#00
  50. MOV A,TTIME             ;計時時間10進制        
  51. MOV B,#10
  52. DIV AB
  53. SWAP A
  54. ADD A,B
  55. MOV TIME,A             ;TIME計時時間10進制   
  56. MOV 11H,#20            ;設置11H計時中間點1秒
  57. LCALL Init_M7219 ;數碼管等器件初始顯示
  58. LCALL LCD2            ;顯示ready
  59. LCALL DELAYX

  60. ;******************************************************************************************************
  61. ;判斷開關是否按下
  62. ST0:
  63. LCALL DISPLAY
  64. JB RESET,ST1          ;判斷是否需要調整時間
  65. JNB SO,NEXT1
  66. JNB RESET,INI              ;作弊復位
  67. NEXT1:
  68. LCALL DELAYX
  69. INC TTIME             ;這里設置為加1調整,
  70. MOV A,TTIME            
  71. MOV B,#10
  72. DIV AB
  73. SWAP A
  74. ADD A,B
  75. MOV TIME,A             ;顯示時間進制轉換
  76. MOV A,TTIME            
  77. CLR C
  78. CJNE A,#31,ST1         ;最高允許30s,也是默認值
  79. MOV TTIME,#01H
  80. MOV TIME,#01H          ;超出30s重置為1s開始

  81. ;******************************************************************************************************
  82. ;判斷是否有人作弊
  83. ST1:
  84. LCALL MAT
  85. MOV A,P1
  86. CPL A
  87. MOV B,A
  88. JZ NEXT
  89. MOV CHEATER,#00H;      
  90. DEAL0:                  ;將P0口讀到的數據轉換至對應作弊選手編號(移位)
  91. CLR C                   ;移位前準備
  92. RRC A
  93. CLR C
  94. INC CHEATER             ;移位計數,獲得作弊選手號
  95. JNZ DEAL0
  96. MOV A,CHEATER
  97. MOV A,#00H
  98. ADD A,TEAM
  99. ADD A,CHEATER               ;得到編號
  100. MOV B,#10
  101. DIV AB
  102. MOV TEAM,A
  103. MOV CHEATER,B
  104. SETB SO                    ;發聲報警
  105. LCALL LCD1
  106. NEXT:
  107. JB STA,ST0                   ;沒有開關按下,返回判斷是否修正時間,否則執行搶答
  108. LCALL LCD3
  109. SETB F0                     ;循環標志,后續用于跳出循環,時間到可使之置0        
  110. SETB TR0                    ;啟動定時
  111. LCALL DELAYSO                 ;短暫發聲

  112. ;******************************************************************************************************
  113. ;關鍵循環,用于判斷是否有按下
  114. START:
  115. JNB F0,HOLDON               ;時間是否已到
  116. LCALL MAT                   ;矩陣式鍵盤子程序
  117. MOV A,P1
  118. XRL A,#0FFH
  119. JNZ HOLDON
  120. LJMP START


  121. ;******************************************************************************************************
  122. ;時間到或者有人搶答,轉入此循環等待
  123. HOLDON:
  124. MOV 17H,A              ;A數據暫存
  125. CLR TR0                ;有人搶答停止計時
  126. H1:
  127. JB F0,H2
  128. LCALL LCD4              ;LCD顯示結束
  129. H2:
  130. JNB F0,HOLD
  131. LCALL LCD5              ;LCD顯示搶答成功
  132. HOLD:
  133. MOV A,17H                ;數據恢復
  134. JZ CONTINUE              ;用于下面移位轉換循環的執行條件
  135. MOV PL,#00H;
  136. SETB FLAGT               ;有人搶答才置1
  137. DEAL:                    ;轉換
  138. CLR C
  139. RRC A
  140. CLR C                   ;移位轉換
  141. INC PL
  142. JNZ DEAL
  143. CONTINUE:
  144. JB FLAG0,KO
  145. ADD A,TEAM
  146. ADD A,PL               ;得到編號
  147. MOV B,#10
  148. DIV AB
  149. MOV TEAM,A
  150. MOV PL,B
  151. SETB FLAG0
  152. MOV 17H,#00H
  153. SJMP KO
  154. ST00:
  155. LJMP INI
  156. KO:
  157. JNB FLAGT,$+6
  158. JNB ANS,ANSWER               ;回答倒計時
  159. JNB RESET,ST00              ;按下復位鍵后回到起始狀態,但由于此處轉移字節已超過128B,所以迂回使用了LJMP
  160. SETB SO
  161. LCALL DISPLAY
  162. AJMP HOLD                   ;否則維持狀態


  163. ;******************************************************************************************************
  164. ;回答倒計時
  165. ANSWER:
  166. CLR SO                    ;停止報警
  167. MOV TTIME,#31             ;默認回答倒計時30S
  168. SETB TR0
  169. LCALL LCD6                ;LCD顯示
  170. L1:
  171. JNB TR0,L3                 ;封鎖
  172. JB WRO,L2                 ;回答正確與否
  173. LCALL LCD7
  174. CLR TR0
  175. L2:
  176. JB RIG,L1
  177. LCALL LCD8
  178. CLR TR0
  179. L3:
  180. JB RESET,$
  181. LJMP INI

  182. ;******************************************************************************************************
  183. ;矩陣式鍵盤子程序
  184. MAT:                     
  185. CPL KEY0
  186. CPL KEY1
  187. JB KEY0,ELSE0
  188. MOV TEAM,#00H
  189. RET
  190. ELSE0:
  191. MOV TEAM,#08H
  192. RET


  193. ;******************************************************************************************************
  194. ;MAX7219顯示程序
  195. M7219_CLK BIT P3.2
  196. M7219_DIN BIT P3.0
  197. M7219_LOAD BIT P3.1
  198. LED_BUF   EQU 50H
  199. SET_MODEL EQU 0FFH
  200. SET_BRIGHT EQU 04H
  201. SET_LIMIT EQU 03H
  202. SET_NORMAL EQU 01H
  203. SET_START EQU 01H

  204. DISPLAY:
  205. MOV A,#00H
  206. JNB FLAGT,GVA0;是否搶答
  207. MOV A,PL  
  208. GVA0:
  209. MOV B,A;TTIME送端口   
  210. MOV A,#01H
  211. LCALL w_7219;放入MAX7290子程序
  212. JB FLAGT,GVA
  213. MOV A,#00H
  214. SJMP GVA2
  215. GVA:
  216. MOV A,TEAM
  217. GVA2:
  218. MOV B,A   
  219. MOV A,#02H
  220. LCALL w_7219
  221. MOV A,TIME
  222. ANL A,#0FH
  223. MOV B,A
  224. MOV A,#03H
  225. LCALL w_7219
  226. MOV A,TIME
  227. SWAP A
  228. ANL A,#0FH
  229. MOV B,A
  230. MOV A,#04H
  231. LCALL w_7219
  232. LCALL DELAY
  233. RET


  234. INIT_M7219:  ;初始化MAX7219
  235. MOV A,#0BH  
  236. MOV B,#SET_LIMIT
  237. LCALL W_7219
  238. MOV A,#09H
  239. MOV B,#SET_MODEL
  240. LCALL W_7219
  241. MOV A,#0AH  ;設置亮度
  242. MOV B,#SET_BRIGHT ;15/32亮度
  243. LCALL W_7219
  244. MOV A,#0FH  
  245. MOV B,#SET_NORMAL
  246. LCALL W_7219
  247. MOV A,#0CH  
  248. MOV B,#SET_START
  249. LCALL  W_7219
  250. RET

  251. DISP:
  252. MOV R0,#LED_BUF
  253. MOV R4,#01H
  254. MOV R3,#SET_LIMIT
  255. DISP1:
  256. MOV A,@R0
  257. MOV B,A
  258. MOV A,R4
  259. LCALL W_7219
  260. INC R0
  261. INC R4
  262. DJNZ R3,DISP1
  263. RET

  264. W_7219:
  265. CLR M7219_CLK
  266. CLR M7219_DIN
  267. CLR  M7219_LOAD ;置LOAD=0
  268. LCALL  SD_7219  ;傳送7219的地址
  269. MOV A,B
  270. LCALL SD_7219  ;傳送數據
  271. SETB M7219_LOAD  ;數據裝載
  272. CLR M7219_DIN
  273. RET

  274. SD_7219:   ;向7219送地址與數據
  275. MOV R2,#08H  
  276. C_SD: CLR C
  277. CLR M7219_CLK
  278. RLC A
  279. MOV M7219_DIN,C ;準備數據
  280. NOP
  281. SETB M7219_CLK ;上升沿將數據傳入
  282. NOP
  283. NOP
  284. CLR M7219_CLK
  285. DJNZ R2,C_SD
  286. RET







  287. ;******************************************************************************************************
  288. ;LCD顯示程序
  289. RS EQU P2.3
  290. RW EQU P2.4
  291. E EQU P2.5
  292. LCD EQU P0
  293. BF EQU P0.7
  294. CHEATER EQU 36H

  295. ;LCD顯示區                      (LCD顯示內容)
  296. LCD1:
  297. LCALL LCDINI
  298. MOV A,#84H
  299. LCALL W_CMD
  300. MOV DPTR,#TAB
  301. MOV R7,#0                      ;CHEAT
  302. LP1:
  303. MOV        A,R7
  304. MOVC A,@A+DPTR
  305. LCALL W_DATA
  306. INC R7
  307. CJNE R7,#06,LP1
  308. MOV A,#32;空格
  309. LCALL W_DATA
  310. MOV A,#30H
  311. ADD A,TEAM
  312. LCALL W_DATA
  313. MOV A,#30H
  314. ADD A,CHEATER
  315. LCALL W_DATA
  316. MOV A,#0C6H
  317. ACALL W_CMD
  318. LP2:
  319. MOV A,R7
  320. MOVC A,@A+DPTR
  321. LCALL W_DATA
  322. INC R7
  323. CJNE R7,#11,LP2
  324. RET

  325. LCD2:
  326. LCALL LCDINI
  327. MOV A,#85H
  328. LCALL W_CMD
  329. MOV DPTR,#READY
  330. MOV R7,#0                      ;READY
  331. LP11:
  332. MOV        A,R7
  333. MOVC A,@A+DPTR
  334. LCALL W_DATA
  335. INC R7
  336. CJNE R7,#5,LP11
  337. RET

  338. LCD3:
  339. LCALL LCDINI
  340. MOV A,#84H
  341. LCALL W_CMD
  342. MOV DPTR,#REACING
  343. MOV R7,#0                      ;REACING
  344. LP111:
  345. MOV        A,R7
  346. MOVC A,@A+DPTR
  347. LCALL W_DATA
  348. INC R7
  349. CJNE R7,#7,LP111
  350. RET

  351. LCD4:
  352. LCALL LCDINI
  353. MOV A,#86H
  354. LCALL W_CMD
  355. MOV DPTR,#OVER
  356. MOV R7,#0                      ;OVER
  357. LP1111:
  358. MOV        A,R7
  359. MOVC A,@A+DPTR
  360. LCALL W_DATA
  361. INC R7
  362. CJNE R7,#4,LP1111
  363. RET

  364. LCD5:
  365. LCALL LCDINI
  366. MOV A,#86H
  367. LCALL W_CMD
  368. MOV DPTR,#DONE
  369. MOV R7,#0                      ;DONE
  370. LP11111:
  371. MOV        A,R7
  372. MOVC A,@A+DPTR
  373. LCALL W_DATA
  374. INC R7
  375. CJNE R7,#4,LP11111
  376. RET

  377. LCD6:
  378. LCALL LCDINI
  379. MOV A,#83H
  380. LCALL W_CMD
  381. MOV DPTR,#ANSWERING
  382. MOV R7,#0                      ;ANSWERING
  383. LP111111:
  384. MOV        A,R7
  385. MOVC A,@A+DPTR
  386. LCALL W_DATA
  387. INC R7
  388. CJNE R7,#9,LP111111
  389. RET

  390. LCD7:
  391. LCALL LCDINI
  392. MOV A,#85H
  393. LCALL W_CMD
  394. MOV DPTR,#RIGHT
  395. MOV R7,#0                      ;RIGHT
  396. LP1111111:
  397. MOV        A,R7
  398. MOVC A,@A+DPTR
  399. LCALL W_DATA
  400. INC R7
  401. CJNE R7,#5,LP1111111
  402. RET

  403. LCD8:
  404. LCALL LCDINI
  405. MOV A,#85H
  406. LCALL W_CMD
  407. MOV DPTR,#WRONG
  408. MOV R7,#0                      ;WRONG
  409. LP111111111:
  410. MOV        A,R7
  411. MOVC A,@A+DPTR
  412. LCALL W_DATA
  413. INC R7
  414. CJNE R7,#5,LP111111111
  415. RET

  416. ;LCD初始化
  417. LCDINI:
  418. MOV A,#38H
  419. LCALL W_CMD
  420. MOV A,#0CH
  421. LCALL W_CMD
  422. MOV A,#06H
  423. LCALL W_CMD
  424. MOV A,#01H
  425. LCALL W_CMD
  426. RET

  427. W_CMD:
  428. ACALL WAIT
  429. CLR RS
  430. CLR RW
  431. MOV LCD,A
  432. SETB E
  433. CLR E
  434. RET
  435. W_DATA:
  436. ACALL WAIT
  437. SETB RS
  438. CLR RW
  439. MOV LCD,A
  440. SETB E
  441. CLR E
  442. RET
  443. WAIT:
  444. MOV R6,#20
  445. W1:
  446. MOV R5,#250
  447. DJNZ R5,$
  448. DJNZ R6,W1
  449. RET


  450. ;******************************************************************************************************
  451. ;延遲1
  452. DELAY:                   ;延遲用于MAX7219,7219在循環中寫入不能過快
  453. MOV R7,#02H
  454. DELAY0:
  455. MOV R6,#0AH
  456. DELAY1:
  457. MOV R5,#0AH
  458. DELAY2:
  459. DJNZ R5,DELAY2
  460. DJNZ R6,DELAY1
  461. DJNZ R7,DELAY0
  462. RET
  463. ;延遲2
  464. DELAYX:                ;RESET鍵軟件防抖動,以及長按設置時間時的時間輪轉速度
  465. LCALL DELAY
  466. LCALL DELAY
  467. LCALL DELAY
  468. LCALL DELAY
  469. DJNZ 18H,DELAYX
  470. RET
  471. ;延遲3
  472. DELAYSO:                   ;開始開關按下短時發聲延時
  473. SETB SO
  474. ACALL DELAYX
  475. CLR SO
  476. RET



  477. ;******************************************************************************************************
  478. ;中斷
  479. ;定時器T0中斷
  480. T00:                        ;定時器t0中斷
  481. MOV TH0,#3CH
  482. MOV TL0,#0B0H                ;50ms定時
  483. DJNZ 11H,RETI1
  484. MOV 11H,#20                 ;1s定時
  485. MOV A,TTIME
  486. DEC A           
  487. MOV B,#10
  488. DIV AB
  489. SWAP A
  490. ADD A,B
  491. MOV TIME,A                ;定時進制轉換16轉10   
  492. LCALL DISPLAY
  493. DJNZ TTIME,RETI1
  494. CLR TR0                   ;自停止
  495. CLR F0                    ;時間到無人搶答清零F0跳出檢測循環
  496. SETB SO                   ;發聲
  497. RETI1:
  498. RETI
  499. ;定時器1中斷,頻率1KHZ,用于喇叭發聲
  500. T11:                     
  501. MOV TH1,#0FCH            
  502. MOV TL1,#18H
  503. JNB SO, RETT11            ;判斷發聲標志位SO
  504. CPL P3.7
  505. RETT11:
  506. RETI


  507. ;******************************************************************************************************
  508. ;LCD顯示表
  509. TAB:                  
  510. DB 'PLAYER'
  511. DB 'CHEAT'
  512. READY:
  513. DB 'READY'
  514. REACING:
  515. DB 'REACING'
  516. OVER:
  517. DB 'OVER'
  518. DONE:
  519. DB 'DONE'
  520. ANSWERING:
  521. DB 'ANSWERING'
  522. RIGHT:
  523. DB 'RIGHT'
  524. WRONG:
  525. DB 'WRONG'
  526. END
復制代碼

所有資料51hei提供下載:
程序及仿真.rar (36.86 KB, 下載次數: 25)


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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 一区二区三区四区免费观看 | 亚洲精品在线播放 | 九九热精品在线视频 | 国产精品久久99 | 在线国产一区 | 欧美亚洲视频在线观看 | 黄色香蕉视频在线观看 | 一级特黄网站 | 欧美精品中文字幕久久二区 | 亚洲性网 | 欧美综合久久久 | 欧美日韩一区在线 | 日韩综合网 | 精品久久久久久 | 久久草在线视频 | 久久日韩精品一区二区三区 | 一区二区在线不卡 | 日韩综合网 | 福利视频二区 | 欧美精品电影一区 | 亚洲精品视频在线播放 | 久久精品亚洲国产奇米99 | 日韩欧美三区 | 成人影院一区二区三区 | 国产精品欧美一区二区 | 中文字幕国产一区 | 国产成在线观看免费视频 | 日韩二| 在线成人 | 中文字幕韩在线第一页 | 九九热最新地址 | 亚洲精品视频一区二区三区 | 欧美日韩国产精品激情在线播放 | 日本精品裸体写真集在线观看 | 国产高清在线 | 亚洲电影第三页 | 国产精品二区三区 | 午夜手机在线 | 中文字幕亚洲一区二区三区 | 日本在线视频一区二区 | 欧美aⅴ |