找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 11704|回复: 6
收起左侧

单片机制作DS1302 LCD1602显示年历时钟 汇编程序+电路图

[复制链接]
ID:85192 发表于 2015-7-10 02:47 | 显示全部楼层 |阅读模式


程序清单:
  1. ;DS1302 1602LCD显示
  2. ;2016 04 26    E:\D[J\DS1302LCD\DS1302LCD.ASM

  3. H_ADJ  BIT P2.0 ;时/年调整
  4. M_ADJ  BIT P2.1 ;分/月调整
  5. S_ADJ  BIT P2.2 ;秒/日调整
  6. DT_SET  BIT P2.3 ;时间/日期选择
  7. W_ADJ  BIT P2.4 ;星期调整
  8. STR  BIT P2.5 ;启动走时

  9. T_RST  BIT P3.2  ;实时时钟复位线引脚
  10. T_CLK   BIT  P3.3  ;实时时钟时钟线引脚
  11. T_IO   BIT  P3.4  ;实时时钟数据线引脚

  12. E   BIT  P3.5  
  13. RW   BIT  P3.6
  14. RS   BIT  P3.7


  15. DL_BIT   EQU  20H ;日低位
  16. DH_BIT   EQU  21H  ;日高位
  17. MOL_BIT   EQU  22H  ;月低位
  18. MOH_BIT   EQU  23H  ;月高位
  19. YL_BIT   EQU  24H  ;年低位
  20. YH_BIT   EQU  25H  ;年高位

  21. SL_BIT  EQU 26H ;秒低位
  22. SH_BIT  EQU 27H ;秒高位
  23. ML_BIT  EQU 28H ;分低位
  24. MH_BIT  EQU 29H ;分高位
  25. HL_BIT  EQU 2AH ;时低位
  26. HH_BIT  EQU 2BH ;时高位

  27. SEC  EQU 30H
  28. MIN  EQU 31H
  29. HOUR  EQU  32H
  30. DAY  EQU  33H
  31. MONTH  EQU  34H
  32. WEEK  EQU  35H
  33. YEAR  EQU  36H

  34. DS1302_ADDR  EQU  5EH
  35. DS1302_DATA  EQU  5FH


  36. ORG  00H
  37. LJMP  MAIN
  38. ORG 0BH
  39. AJMP T0INT
  40. ORG  30H
  41. MAIN:
  42. MOV SP,#60H

  43. MOV TMOD,#01H
  44. MOV TH0,#3CH
  45. MOV TL0,#0B0H
  46. MOV R0,#10
  47. SETB EA
  48. SETB ET0
  49. SETB TR0
  50. MOV R1,37H

  51. MOV YEAR,#11H ;上电预置日期、时间
  52. MOV WEEK,#00H ;周1 MON
  53. MOV MONTH,#04H ;2011 04 25 12:00:00
  54. MOV DAY,#25H
  55. MOV HOUR,#12H
  56. MOV MIN,#00H
  57. MOV SEC,#00H

  58. MAIN1:
  59. LCALL KEY
  60. JB F0,MAIN10 ;F0=1,开始走时。走时前写,不读。走时后读,不写。
  61. LCALL WR1302  
  62. AJMP MAIN2
  63. MAIN10:
  64. LCALL RD1302   
  65. MAIN2:
  66. MOV A,YEAR  
  67. MOV B,#10H
  68. DIV AB
  69. MOV YL_BIT,B
  70. MOV YH_BIT,A
  71. MOV A,MONTH
  72. MOV B,#10H
  73. DIV AB
  74. MOV MOL_BIT,B
  75. MOV MOH_BIT,A
  76. MOV A,DAY
  77. MOV B,#10H
  78. DIV AB
  79. MOV DL_BIT,B
  80. MOV DH_BIT,A

  81. MOV A,HOUR  
  82. MOV B,#10H
  83. DIV AB
  84. MOV HL_BIT,B
  85. MOV HH_BIT,A
  86. MOV A,MIN
  87. MOV B,#10H
  88. DIV AB
  89. MOV ML_BIT,B
  90. MOV MH_BIT,A
  91. MOV A,SEC
  92. MOV B,#10H
  93. DIV AB
  94. MOV SL_BIT,B
  95. MOV SH_BIT,A

  96. JNB 7CH,MAIN1 ;0.5S标志
  97. CLR 7CH
  98. LCALL WEEKCOV         ;星期数字转换成英语缩写3 字母
  99. LCALL DISP

  100. AJMP MAIN1

  101. KEY: ;按键子程序

  102. KEY_SET:
  103. JB DT_SET,KEY_H
  104. ACALL D10MS
  105. JNB DT_SET,$-2
  106. CPL 7FH
  107. JB F0,RT
  108. CPL P2.7  ;点亮日期设定
  109. AJMP RT
  110. KEY_H:
  111. JB H_ADJ,KEY_M
  112. ACALL D10MS
  113. JNB H_ADJ,$-2
  114. AJMP H_ADD
  115. KEY_M:
  116. JB M_ADJ,KEY_S
  117. ACALL D10MS
  118. JNB M_ADJ,$-2
  119. AJMP M_ADD
  120. KEY_S:
  121. JB S_ADJ,KEY_W
  122. ACALL D10MS
  123. JNB S_ADJ,$-2
  124. AJMP S_ADD
  125. KEY_W:
  126. JB W_ADJ,KEY_ST
  127. ACALL D10MS
  128. JNB W_ADJ,$-2
  129. AJMP W_ADD
  130. KEY_ST:
  131. JB STR,RT
  132. ACALL D10MS
  133. JNB STR,$-2
  134. AJMP K_STR
  135. RT:
  136. RET

  137. H_ADD:
  138. JB 7FH,Y_ADD ;7FH为日期/时间切换键标志。1为年月日。
  139. MOV A,HOUR
  140. ADD     A,#01H
  141. DA   A
  142. CJNE A,#24H,H_ADD1
  143. MOV A,#0
  144. H_ADD1:
  145. MOV HOUR,A
  146. AJMP RT
  147. Y_ADD:
  148. MOV A,YEAR
  149. ADD A,#01H
  150. DA A
  151. CJNE A,#20H,Y_ADD1
  152. MOV A,#0
  153. Y_ADD1:
  154. MOV YEAR,A
  155. AJMP RT

  156. M_ADD:
  157. JB 7FH,MO_ADD
  158. MOV A,MIN
  159. ADD     A,#01H
  160. DA   A
  161. CJNE A,#60H,M_ADD1
  162. MOV A,#00H
  163. M_ADD1:
  164. MOV MIN,A
  165. AJMP RT
  166. MO_ADD:
  167. MOV A,MONTH
  168. ADD     A,#01H
  169. DA   A
  170. CJNE A,#13H,MO_ADD1
  171. MOV A,#1
  172. MO_ADD1:
  173. MOV MONTH,A
  174. AJMP RT

  175. S_ADD:
  176. JB 7FH,D_ADD
  177. MOV A,SEC
  178. ADD     A,#01H
  179. DA   A
  180. CJNE A,#60H,S_ADD1
  181. MOV A,#00H
  182. S_ADD1:
  183. MOV SEC,A
  184. AJMP RT
  185. D_ADD:
  186. MOV A,DAY
  187. ADD A,#01H
  188. DA   A
  189. CJNE A,#32H,D_ADD1
  190. MOV A,#01H
  191. D_ADD1:
  192. MOV DAY,A
  193. AJMP RT

  194. W_ADD:
  195. MOV A,WEEK
  196. ADD A,#01H
  197. DA   A
  198. CJNE A,#7H,W_ADD1
  199. MOV A,#0
  200. W_ADD1:
  201. MOV WEEK,A
  202. AJMP RT

  203. K_STR:
  204. MOV DS1302_ADDR,#80H ;开始振荡
  205. MOV DS1302_DATA,SEC
  206. LCALL WRITE
  207. MOV DS1302_ADDR,#8EH ;禁止写入1302
  208. MOV DS1302_DATA,#80H
  209. LCALL WRITE
  210. SETB F0
  211. CLR P2.7
  212. AJMP RT

  213. WR1302:
  214. MOV DS1302_ADDR,#8EH
  215. MOV DS1302_DATA,#00H        ;允许写1302
  216. LCALL WRITE
  217. MOV DS1302_ADDR,#80H
  218. MOV DS1302_DATA,#80H      ;1302停止振荡
  219. LCALL  WRITE

  220. MOV DS1302_ADDR,#8CH ;年写入1302
  221. MOV DS1302_DATA,YEAR
  222. LCALL WRITE

  223. MOV DS1302_ADDR,#8AH ;周写入1302
  224. MOV DS1302_DATA,WEEK
  225. LCALL WRITE

  226. MOV DS1302_ADDR,#88H ;月写入1302
  227. MOV DS1302_DATA,MONTH
  228. LCALL WRITE

  229. MOV DS1302_ADDR,#86H ;日写入1302
  230. MOV DS1302_DATA,DAY
  231. LCALL WRITE

  232. MOV DS1302_ADDR,#84H ;时写入1302
  233. MOV DS1302_DATA,HOUR
  234. LCALL WRITE

  235. MOV DS1302_ADDR,#82H ;分写入1302
  236. MOV DS1302_DATA,MIN
  237. LCALL WRITE

  238. MOV DS1302_ADDR,#82H ;秒写入1302
  239. MOV DS1302_DATA,MIN
  240. LCALL WRITE

  241. RET


  242. WRITE:  
  243. CLR  T_CLK
  244. NOP
  245. SETB  T_RST
  246. NOP
  247. MOV  A,DS1302_ADDR
  248. MOV  R4,#8
  249. WRITE1:
  250. RRC  A                       
  251. NOP
  252. NOP
  253. CLR  T_CLK
  254. NOP
  255. NOP
  256. NOP
  257. MOV  T_IO,C
  258. NOP
  259. NOP
  260. NOP
  261. SETB  T_CLK
  262. NOP
  263. NOP
  264. DJNZ  R4,WRITE1
  265. CLR  T_CLK
  266. NOP
  267. MOV  A,DS1302_DATA
  268. MOV  R4,#8
  269. WRITE2:
  270. RRC  A
  271. NOP                        
  272. CLR  T_CLK
  273. NOP
  274. NOP
  275. MOV  T_IO,C
  276. NOP
  277. NOP
  278. NOP
  279. SETB  T_CLK
  280. NOP
  281. NOP
  282. DJNZ R4,WRITE2
  283. CLR  T_RST
  284. RET

  285. RD1302:
  286. MOV  DS1302_ADDR,#8DH         ;年读出
  287. LCALL  READ
  288. MOV  YEAR,DS1302_DATA
  289. MOV  DS1302_ADDR,#8BH         ;周读出
  290. LCALL  READ
  291. MOV  WEEK,DS1302_DATA
  292. MOV  DS1302_ADDR,#89H         ;月读出
  293. LCALL  READ
  294. MOV  MONTH,DS1302_DATA
  295. MOV  DS1302_ADDR,#87H         ;日读出
  296. LCALL  READ
  297. MOV  DAY,DS1302_DATA
  298. MOV  DS1302_ADDR,#85H         ;时读出
  299. LCALL  READ
  300. MOV  HOUR,DS1302_DATA
  301. MOV  DS1302_ADDR,#83H         ;分读出
  302. LCALL  READ
  303. MOV  MIN,DS1302_DATA
  304. MOV  DS1302_ADDR,#81H         ;秒读出
  305. LCALL  READ
  306. MOV  SEC,DS1302_DATA
  307. RET
  308.                                    
  309. READ:  
  310. CLR  T_CLK
  311. NOP
  312. NOP
  313. SETB  T_RST
  314. NOP
  315. MOV  A,DS1302_ADDR
  316. MOV  R4,#8
  317.                            
  318. READ1:  
  319. RRC  A
  320. MOV  T_IO,C
  321. NOP
  322. NOP
  323. NOP
  324. SETB  T_CLK
  325. NOP
  326. NOP
  327. NOP
  328. CLR  T_CLK
  329. NOP
  330. NOP
  331. DJNZ  R4,READ1
  332. MOV  R4,#8
  333.                     
  334. READ2:  
  335. CLR  T_CLK
  336. NOP
  337. NOP
  338. NOP
  339. MOV  C,T_IO
  340. NOP
  341. NOP
  342. NOP
  343. NOP
  344. NOP
  345. RRC  A
  346. NOP
  347. NOP
  348. NOP
  349. NOP
  350. SETB  T_CLK
  351. NOP
  352. DJNZ  R4,READ2
  353. MOV  DS1302_DATA,A
  354. CLR  T_RST
  355. RET



  356. DISP:  

  357. MOV  A,#30H   ;16进制转ASCII
  358. ORL  YH_BIT, A
  359. ORL  YL_BIT, A
  360. ORL  MOH_BIT, A
  361. ORL  MOL_BIT, A
  362. ORL DH_BIT, A
  363. ORL DL_BIT, A

  364. ;LCALL WEEKCOV

  365. ORL  HH_BIT, A
  366. ORL  HL_BIT, A
  367. ORL  MH_BIT, A
  368. ORL  ML_BIT, A
  369. ORL SH_BIT, A
  370. ORL SL_BIT, A


  371. LCALL  INIT_1602
  372. MOV  A, #10000000B          ; LINE1
  373. LCALL   WR_CMD
  374. MOV  A,#"2"  
  375. LCALL WR_DATA

  376. MOV  A,#"0"
  377. LCALL   WR_DATA
  378. MOV  A, YH_BIT  
  379. LCALL WR_DATA

  380. MOV  A, YL_BIT
  381. LCALL   WR_DATA
  382. MOV  A,#" "
  383. LCALL   WR_DATA

  384. MOV  A,MOH_BIT
  385. LCALL   WR_DATA
  386. MOV  A,MOL_BIT
  387. LCALL   WR_DATA
  388. MOV  A,#" "
  389. LCALL   WR_DATA
  390. MOV  A,DH_BIT
  391. LCALL   WR_DATA
  392. MOV  A,DL_BIT
  393. LCALL   WR_DATA
  394. MOV  A,#" "
  395. LCALL  WR_DATA
  396. MOV  A,#" "
  397. LCALL  WR_DATA
  398. LCALL WEEKDISP  ;星期显示英文缩写3个字母

  399. MOV A, #11000000B           ; LINE2
  400. LCALL  WR_CMD

  401. MOV  A,HH_BIT  
  402. LCALL WR_DATA

  403. MOV  A,HL_BIT
  404. LCALL   WR_DATA
  405. MOV A,#":"
  406. LCALL   WR_DATA

  407. MOV  A,MH_BIT
  408. LCALL   WR_DATA
  409. MOV  A,ML_BIT
  410. LCALL   WR_DATA
  411. MOV A,#":"
  412. LCALL   WR_DATA
  413. MOV  A,SH_BIT
  414. LCALL   WR_DATA
  415. MOV  A,SL_BIT
  416. LCALL   WR_DATA

  417. RET

  418. WEEKCOV:

  419. MOV A,WEEK
  420. CJNE A,#0,W2
  421. MOV 37H,#"M"
  422. MOV 38H,#"O"
  423. MOV 39H,#"N"

  424. W2:
  425. MOV A,WEEK
  426. CJNE A,#1,W3
  427. MOV 37H,#"T"
  428. MOV 38H,#"U"
  429. MOV 39H,#"E"          ;星期一 MON 星期二 TUE 星期三 WED 星期四 THU
  430.       ;星期五 FRI 星期六 SAT 星期天 SUN
  431. W3:
  432. MOV A,WEEK
  433. CJNE A,#2,W4
  434. MOV 37H,#"W"
  435. MOV 38H,#"E"
  436. MOV 39H,#"D"
  437. W4:
  438. MOV A,WEEK
  439. CJNE A,#3,W5
  440. MOV 37H,#"T"
  441. MOV 38H,#"H"
  442. MOV 39H,#"U"
  443. W5:
  444. MOV A,WEEK
  445. CJNE A,#4,W6
  446. MOV 37H,#"F"
  447. MOV 38H,#"R"
  448. MOV 39H,#"I"
  449. W6:
  450. MOV A,WEEK
  451. CJNE A,#5,W7
  452. MOV 37H,#"S"
  453. MOV 38H,#"A"
  454. MOV 39H,#"T"
  455. W7:
  456. MOV A,WEEK
  457. CJNE A,#6,W8
  458. MOV 37H,#"S"
  459. MOV 38H,#"U"
  460. MOV 39H,#"N"   
  461. W8:
  462. RET

  463. WEEKDISP:
  464. MOV  A,37H
  465. LCALL   WR_DATA
  466. MOV  A,38H
  467. LCALL   WR_DATA
  468. MOV  A,39H
  469. LCALL   WR_DATA
  470. RET

  471. INIT_1602:
  472. MOV   A, #01H
  473. LCALL  WR_CMD ;清屏
  474. MOV   A, #38H
  475. LCALL  WR_CMD ;8位数据,16X2,5X7点阵
  476. MOV   A, #0CH
  477. LCALL  WR_CMD ;开显示,关光标,不闪烁
  478. MOV   A, #06H
  479. LCALL  WR_CMD ;读写字符时地址+1,整屏不移动
  480. RET

  481. WR_CMD:
  482. MOV  P1, A
  483. CLR  RS ;写入控制命令
  484. CLR  RW
  485. CLR  E
  486. LCALL  BUSY
  487. SETB  E
  488. RET

  489. WR_DATA:
  490. MOV  P1, A
  491. SETB  RS ;写入数据
  492. CLR  RW
  493. CLR  E
  494. LCALL  BUSY ;判断液晶模块是否忙?
  495. SETB  E
  496. RET

  497. BUSY:   ;查看LCD是否忙
  498. MOV  P1,#0FFH
  499. CLR  RS
  500. SETB  RW
  501. CLR  E
  502. NOP
  503. SETB  E
  504. JB  P1.7,BUSY ;如果P1.7为高电平表示忙就循环等待
  505. RET

  506. T0INT:
  507. MOV TH0,#3CH
  508. MOV TL0,#0B0H
  509. DJNZ R0,RTI
  510. MOV R0,#10
  511. setb 7CH
  512. RTI:
  513. RETI

  514. D1MS:   
  515. MOV  R7,#250
  516. LOOP0:  
  517. NOP
  518. NOP
  519. DJNZ  R7,LOOP0
  520. RET

  521. D10MS:
  522. MOV R4,#25
  523. MOV R3,#200
  524. DJNZ R3,$
  525. DJNZ R2,$-4
  526. RET

  527. END
复制代码


回复

使用道具 举报

ID:99809 发表于 2015-12-21 14:24 | 显示全部楼层
题目要求是什么??
回复

使用道具 举报

ID:74784 发表于 2016-12-19 16:44 | 显示全部楼层
没看到数据表代码~~~~~~~~~~~
回复

使用道具 举报

ID:316515 发表于 2018-6-16 21:49 | 显示全部楼层
功能可调吗?

回复

使用道具 举报

ID:316515 发表于 2018-6-16 22:57 | 显示全部楼层
跪求按键程序
回复

使用道具 举报

ID:353831 发表于 2018-6-18 20:14 | 显示全部楼层
有用LED的电路图吗
回复

使用道具 举报

ID:72088 发表于 2018-11-8 08:54 | 显示全部楼层

上面有按键程序的,只有加键,没有减键,我在找减键程序,
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表