数码之家

 找回密码
 立即注册
搜索
查看: 3545|回复: 25

新站发帖,汇编语言编写的GPS授时数字钟

[复制链接]
发表于 2019-1-8 14:54:22 | 显示全部楼层 |阅读模式

爱科技、爱创意、爱折腾、爱极致,我们都是技术控

您需要 登录 才可以下载或查看,没有账号?立即注册

x
这是一个GPS授时的数字钟,做了已经好几年了,现在拿出来和大家分享一下


新版发图片还是有大小限制,要求文件尺寸小于5M,而我的手机照出来的照片基本都在6-7M左右,所以上传之前还得要压缩一下才行


本作品来源于本坛一位高手的创意,GPS授时部分直接采用了@fang3 老师的程序,在此表示感谢,如有侵权请联系我删除
fang3 老师的原帖在此http://bbs.mydigit.cn/read.php?tid=505033


先看看成品的效果吧,放在卧室的空调上,夜里睁眼就能看得到
P81020-072858(2048x1536).jpg

fang3 老师在原帖里写的非常详细,我只是在程序及硬件上简化了一些


这是电路,实际上采用了大字符数码管,电路有些改动,每段都采用了两个三极管驱动
GPSCLOCK.GIF

开始制作,过程不细说了,看图
P70331-213134(2048x1536).jpg

P70331-213219(2048x1536).jpg

P70331-213240(2048x1536).jpg

P70331-213256(2048x1536).jpg

P70331-213312(2048x1536).jpg

P70331-221229(2048x1536).jpg

连接显示板
P70422-210925(2048x1536).jpg

调试走时程序
P70422-210907(2048x1536).jpg

P70422-210936(2048x1536).jpg

关灯的效果
P70411-195839(2048x1536).jpg

白天正常显示
P70411-195854(2048x1536).jpg

晚上21:00-次日6:00为暗显示,降低显示亮度,以保证夜间不刺眼
P70422-210942(2048x1536).jpg

从领导那里要了个画状品盒子,装起来
P70427-210305(2048x1536).jpg

P70427-210239(2048x1536).jpg

关灯的效果
P70501-195941(2048x1536).jpg

P70501-195946(2048x1536).jpg

正常运行


左上角的灯亮起表示没有授时成功
P60409-114253(2048x1536).jpg

左上角的灯熄灭表示授时成功
P81020-072912(2048x1536).jpg

电源用的是12V1A的路由器电源
P81020-072931(2048x1536).jpg

GPS模块线缆由空调孔穿到室外
P81020-072944(2048x1536).jpg

将GPS模块做好防水处理后固定到空调穿墙孔处,以便接收GPS卫星信号
P81020-073019(2048x1536).jpg

位置还是很隐蔽的,外面看不出来
P81020-073027(2048x1536).jpg

下面是程序


  1. ;89C2051+GPS 1.8寸数码管四位电子钟
  2. ;11.0592M晶振;GPS模块接在P3.0 P3.1
  3. ;第一位小数点是GPS未收到信号标识
  4. ;P3.7是GPS模块供电控制端,58-00分输出高电平
  5. ;***************************************


  6. LEDR1 BIT P3.2;时十位
  7. LEDR2 BIT P3.3;时个位
  8. LEDR3 BIT P3.4;分十位
  9. LEDR4 BIT P3.5;分个位
  10. ;;;;;;;;;;;;;;;;;;;;;;;;

  11. HOU EQU 60H;时
  12. MIN EQU 61H;分
  13. SEC EQU 62H;秒

  14. ;;;;;;;;;;;;;;;;;;;;;;;;
  15. ORG 0H
  16. AJMP  START
  17. ORG 0BH
  18. AJMP INT_T0  ;T0中断
  19. ORG 23H;;串行中断
  20. LJMP GPS
  21. ;;;;;;;;;;;;;;;;;;;;;;;;
  22. ORG  30H              
  23. START:
  24. MOV P1,#0;;初始化P1口
  25. ORL P3,#0FFH;初始化P3口,不能用mov P3,#0
  26. MOV HOU,#0
  27. MOV MIN,#0
  28. MOV SEC,#0

  29. ;***************
  30. ;初始化串口波特率9600,允计接收
  31. MOV SCON,#50H;串行通讯控制SM1 REN
  32. MOV TMOD,#21H;定时/计数器M1  M0
  33. MOV TH1,#0FDH;定时时间设置高位
  34. MOV TL1,#0FDH;定时时间设置低位
  35. SETB TR1;定时/计数器(TCON)
  36. SETB ES;中断允许(IE)
  37. ;***************
  38. MOV TH0,#4CH;定时器0 50ms
  39. MOV TL0,#0
  40. SETB TR0;定时/计数器(TCON)
  41. SETB ET0;中断允许(IE)
  42. SETB EA;中断允许(IE)

  43. ;*******************
  44. MAIN:
  45. ;GPS模块供电控制
  46. JNB 24H.7,kkk;----------------------如果没有校时成功则一直打开P3.7

  47. mov a,min
  48. cjne a,#58,AAA
  49. ajmp kkk

  50. AAA:cjne a,#59,BBB
  51. ajmp kkk

  52. BBB:cjne a,#00,NNN
  53. ajmp kkk

  54. kkk:setb P3.7;GPS模块供电控端
  55. ajmp PPP

  56. NNN:clr P3.7

  57. PPP:mov a,hou;判断夜间21:00-6:00暗显示
  58. cjne a,#21,ten
  59. CALL display2

  60. ten:cjne a,#22,eleven
  61. CALL display2

  62. eleven:cjne a,#23,twelve
  63. CALL display2

  64. twelve:cjne a,#0,one
  65. CALL display2

  66. one:cjne a,#1,two
  67. CALL display2

  68. two:cjne a,#2,three
  69. CALL display2

  70. three:cjne a,#3,four
  71. CALL display2

  72. four:cjne a,#4,five
  73. CALL display2

  74. five:cjne a,#5,nor
  75. CALL display2

  76. nor:
  77. CALL DISPLAY;送显示
  78. AJMP MAIN

  79. ;**************************

  80. DISPLAY:;显示
  81. MOV  DPTR,#TAB
  82. MOV   A,HOU;时十位
  83. MOV B,#10
  84. DIV AB
  85. cjne a,#0,zero;消隐无效0
  86. mov a,#10
  87. zero:MOVC A,@A+DPTR
  88. JNB 24H.7,GGGG;判断GPS是否收到时间信号
  89. setb ACC.7;第一位小数点显示GPS状态
  90. GGGG:MOV P1,A  ;送显
  91. SETB LEDR1
  92. CALL DELAY1MS
  93. CLR LEDR1
  94. ;----------------
  95. MOV A,B
  96. MOVC A,@A+DPTR
  97. MOV C,0AH;秒点闪烁
  98. MOV ACC.7,C
  99. MOV P1,A  ;送显
  100. SETB LEDR2
  101. CALL DELAY1MS
  102. CLR LEDR2

  103. ;**************************
  104. MOV   A,MIN;分十位
  105. MOV B,#10
  106. DIV AB
  107. MOVC A,@A+DPTR
  108. MOV C,0AH;秒点闪烁
  109. MOV ACC.7,C
  110. MOV P1,A  ;送显
  111. SETB LEDR3
  112. CALL DELAY1MS
  113. CLR LEDR3
  114. ;----------------
  115. MOV  DPTR,#TAB
  116. MOV A,B
  117. MOVC A,@A+DPTR
  118. MOV P1,A  ;送显
  119. SETB LEDR4
  120. CALL DELAY1MS
  121. CLR LEDR4
  122. RET

  123. ;**************************

  124. DISPLAY2:;暗显示
  125. MOV  DPTR,#TAB
  126. MOV   A,HOU;时十位
  127. MOV B,#10
  128. DIV AB
  129. cjne a,#0,zero2
  130. mov a,#10
  131. zero2:MOVC A,@A+DPTR
  132. JNB 24H.7,GGGG2
  133. setb ACC.7
  134. GGGG2:MOV P1,A  ;送显
  135. SETB LEDR1
  136. CALL DELAY3
  137. CLR LEDR1
  138. call delay2;显示后关一段时间,以实现亮度降低
  139. ;----------------
  140. MOV A,B
  141. MOVC A,@A+DPTR
  142. MOV C,0AH;秒点闪烁
  143. MOV ACC.7,C
  144. MOV P1,A  ;送显
  145. SETB LEDR2
  146. CALL DELAY3
  147. CLR LEDR2
  148. call delay2
  149. ;**************************
  150. MOV   A,MIN;分十位
  151. MOV B,#10
  152. DIV AB
  153. MOVC A,@A+DPTR
  154. MOV C,0AH;秒点闪烁
  155. MOV ACC.7,C
  156. MOV P1,A  ;送显
  157. SETB LEDR3
  158. CALL DELAY3
  159. CLR LEDR3
  160. call delay2
  161. ;----------------
  162. MOV  DPTR,#TAB
  163. MOV A,B
  164. MOVC A,@A+DPTR
  165. MOV P1,A  ;送显
  166. SETB LEDR4
  167. CALL DELAY3
  168. CLR LEDR4
  169. call delay2
  170. RET
  171. ;****************;****************;****************

  172. INT_T0:
  173. PUSH  ACC ;定时器0中断计时
  174. PUSH  PSW
  175. MOV TH0,#4CH;50MS
  176. MOV TL0,#0

  177. INC 30H
  178. MOV A,30H
  179. CJNE A,#10,T0_OUT;
  180. MOV 30H,#0

  181. CPL   0AH;秒闪位

  182. INC 31H
  183. MOV A,31H
  184. CJNE A,#2,T0_OUT;500MS*2=1S
  185. MOV 31H,#0


  186. INC SEC;秒加一
  187. MOV A,SEC
  188. CJNE A,#60,T0_OUT
  189. MOV SEC,#0

  190. INC MIN;分加一
  191. MOV A,MIN
  192. CJNE A,#60,T0_OUT
  193. MOV MIN,#0

  194. SETB ES;每小时打开一次串行中断,进行GPS校时

  195. INC HOU;时加一
  196. MOV A,HOU
  197. CJNE A,#24,T0_OUT
  198. MOV HOU,#0

  199. T0_OUT:
  200. POP PSW
  201. POP ACC
  202. RETI
  203. ;****************;****************;****************

  204. DELAY1MS:   ;白天延时,亮2ms
  205.     MOV R6,#50H
  206. DL0:
  207.     MOV R5,#0AH
  208.     DJNZ R5,$
  209.     DJNZ R6,DL0
  210.     NOP
  211.     RET

  212. DELAY2:   ;夜间延时,灭3ms
  213.     MOV R6,#0FBH
  214. DL2:
  215.     MOV R5,#04H
  216.     DJNZ R5,$
  217.     DJNZ R6,DL2
  218.     NOP
  219.     RET

  220. DELAY3:   ;夜间延时,亮1ms
  221.     MOV R6,#66H
  222. DL3:
  223.     MOV R5,#03H
  224.     DJNZ R5,$
  225.     DJNZ R6,DL3
  226.     NOP
  227.     RET

  228. ;****************;****************;****************
  229. TABGPRMC: DB "$GPRMC," ;$GPRMC,数据

  230. TABGPGSV: DB "$GPGSV," ;$GPGSV,数据
  231. ;****************;****************;****************

  232. PD_GPG:;接收比较数据
  233. MOV R2,#7;
  234. PD_GPG1:
  235. JNB RI,$
  236. CLR RI
  237. MOV A,#0
  238. MOVC A,@A+DPTR
  239. CJNE A,SBUF,gOUT
  240. INC DPTR;下一个数据
  241. djnz R2,PD_GPG1;校对完7个数据
  242. clr c
  243. ret
  244. gOUT:setb c
  245. ret


  246. ;*******************************************
  247. GPGSV:;判断GPGSV,的后10位是否是0
  248. MOV DPTR,#TABGPGSV;$TABGPGSV的数据指针GPGSV
  249. acall PD_GPG;接收比较是否是收到“$GPGSV,”
  250. jnc sdsj;收到继续
  251. AJMP OUT

  252. sdsj:
  253. MOV R1,#10;跳过10个数
  254. GE10:
  255. JNB RI,$
  256. CLR RI
  257. DJNZ R1,GE10
  258. ;**********************
  259. JNB RI,$
  260. CLR RI
  261. MOV A,SBUF
  262. CJNE A,#'0',GPSOK;非0跳出读时间
  263. JNB RI,$
  264. CLR RI
  265. MOV A,SBUF
  266. CJNE A,#'0',GPSOK;非0跳出读时间
  267. SETB 24H.7;继续判断,开绿灯位
  268. AJMP OUT
  269. GPSOK:
  270. CLR 24H.7;关绿灯
  271. SETB 24H.0;置读时间位
  272. AJMP OUT

  273. ;****************;****************;************
  274. ;-------串行口中断

  275. ;接收到$GPRMC, 后面的是时分秒数据ANSI格式的

  276. ;*********************;****************
  277. GPS:;$GPRMC
  278. CLR ES;关串行中断,避免反复中断,下面接收用查询
  279. PUSH ACC;保护
  280. PUSH DPH
  281. PUSH DPL

  282. JNB 24H.0,GPGSV;因为室内收不定位,所以首先判断GPGSV,再往后10位否为0,如果是0的话时间是不对的,
  283. ;如果非0,即使收不到定位信号时间也是对的

  284. TGPRMC:
  285. MOV DPTR,#TABGPRMC;$GPRMC的数据指针
  286. acall PD_GPG;接收比较是否是收到“$GPRMC,”
  287. jnc sdsjq;收到继续
  288. OUT:
  289. POP DPL
  290. POP DPH
  291. POP ACC
  292. SETB  ES;打开串行中断
  293. RETI;退出

  294. sdsjq:
  295. ;**********************
  296. MOV R0,#40H;ANSI码时间的保存地址指针
  297. MOV R1,#6;时分秒6个ANSI码数据
  298. GET_GPS:
  299. JNB RI,$
  300. CLR RI
  301. MOV A,SBUF
  302. SUBB A,#30H;ANSI减30H是16进制数
  303. MOV @R0,A
  304. INC R0;下一内存
  305. DJNZ R1,GET_GPS
  306. ;**********************

  307. ;---------------
  308. ;处理数据,把6位数合成时分秒三位数
  309. MOV R0,#40H;ANSI码时间的保存地址指针
  310. MOV R1,#HOU;小时指针
  311. ZLGO:
  312. MOV A,@R0
  313. MOV B,#10
  314. MUL AB
  315. INC R0
  316. ADD A,@R0
  317. MOV @R1,A
  318. INC R0
  319. INC R1
  320. CJNE R0,#46H,ZLGO
  321. ;----------------
  322. ;收到的是伦敦时间,北京东8区 +8小时

  323. MOV A,HOU
  324. ADD A,#8;小时加8
  325. CJNE A,#24,JJ;是否大于24小时
  326. JJ:JC XY
  327. SUBB A,#24;大于24减24
  328. XY:
  329. MOV HOU,A;保存成北京时间
  330. CLR 24H.0;清读时间位
  331. POP DPL
  332. POP DPH
  333. POP ACC
  334. RETI
  335. ;****************;****************

  336. TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,00H
  337. ;0,1,2,3,4,5,6,7,8,9,灭


  338. END

复制代码

P60409-114241(2048x1536).jpg
P60409-114254(2048x1536).jpg

打赏

参与人数 6 +3 家元 +108 收起 理由
ztrdiy + 12 谢谢分享!
亲爱的混蛋 + 1 就剩下一个专家了,给你吧
snowrose2000 + 1
zzy_85569381 + 18 謝謝分享
whgf + 18 優秀文章,原創內容
家睦 + 1 + 60 以資鼓勵

查看全部打赏

本帖被以下淘专辑推荐:

发表于 2019-1-8 18:51:08 | 显示全部楼层
本帖最后由 zzy_85569381 于 2019-1-8 18:53 编辑

这个真不错,值得学习请问楼主有没有C语言程序,汇编我都忘光了
回复 支持 反对

使用道具 举报

发表于 2019-1-8 20:36:17 | 显示全部楼层
看来还是汇编语言精简
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-1-8 21:38:02 | 显示全部楼层
zzy_85569381 发表于 2019-1-8 18:51
这个真不错,值得学习请问楼主有没有C语言程序,汇编我都忘光了

fang3 老师的原帖http://bbs.mydigit.cn/read.php?tid=505033里面有C语言程序
回复 支持 反对

使用道具 举报

发表于 2019-1-8 21:59:54 | 显示全部楼层
真的很不错,还会汇编语言。
回复 支持 反对

使用道具 举报

发表于 2019-1-11 08:30:11 | 显示全部楼层
会汇编的都是大神
回复 支持 反对

使用道具 举报

发表于 2019-1-11 22:56:18 | 显示全部楼层
今天怎么没分了。。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-1-11 23:16:08 | 显示全部楼层
snowrose2000 发表于 2019-1-11 22:56
今天怎么没分了。。。

先欠着啊哈
回复 支持 反对

使用道具 举报

发表于 2019-1-13 01:16:27 | 显示全部楼层
用汇编写,非常精简。
回复 支持 反对

使用道具 举报

发表于 2019-1-13 09:36:06 来自手机浏览器 | 显示全部楼层
那个秒点怎么看着那么别扭呢?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-1-13 17:58:45 | 显示全部楼层
触景情伤 发表于 2019-1-13 09:36
那个秒点怎么看着那么别扭呢?

利用第二位和第三位的小数点组成的,所以看着别扭
回复 支持 反对

使用道具 举报

发表于 2019-1-13 21:49:11 来自手机浏览器 | 显示全部楼层
nnn2688 发表于 2019-1-13 17:58
利用第二位和第三位的小数点组成的,所以看着别扭

我说呢,尽量还是找专用的反正也比较便宜…
回复 支持 反对

使用道具 举报

发表于 2019-1-14 12:22:02 | 显示全部楼层
玩汇编的都是牛人
回复 支持 反对

使用道具 举报

发表于 2019-1-15 17:04:32 | 显示全部楼层
佩服会汇编的大牛。硬件上用IC作倒相会更简单
回复 支持 反对

使用道具 举报

发表于 2019-1-15 21:47:42 | 显示全部楼层
不错,用汇编的已经很少了
回复 支持 反对

使用道具 举报

发表于 2019-1-19 20:59:48 | 显示全部楼层
给个程序吧,发这里再复制出来粘贴会有乱码。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-1-19 22:18:05 | 显示全部楼层
gdszyrx 发表于 2019-1-19 20:59
给个程序吧,发这里再复制出来粘贴会有乱码。

点击程序最后一行的“复制代码”再粘就行了
回复 支持 反对

使用道具 举报

发表于 2019-1-20 09:40:57 | 显示全部楼层
nnn2688 发表于 2019-1-19 22:18
点击程序最后一行的“复制代码”再粘就行了

就是这么做的,提示有Unicode码,是否另存为
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-1-20 11:38:42 | 显示全部楼层
gdszyrx 发表于 2019-1-20 09:40
就是这么做的,提示有Unicode码,是否另存为

粘贴到记事本里,保存成TXT格式
回复 支持 反对

使用道具 举报

发表于 2019-1-21 08:42:05 | 显示全部楼层
楼主你好,你的GPS模块在哪儿买的?接收效果如何?方便的话私我个地址,谢谢
回复 支持 反对

使用道具 举报

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

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2024-4-19 06:41 , Processed in 0.483601 second(s), 25 queries , Redis On.

Powered by Discuz!

© 2006-2023 smzj.net

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