一乐电子

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

微信扫码登录

手机号码,快捷登录

手机号码,快捷登录

搜索
查看: 8757|回复: 6

[其他综合] bascom编写的天马四段数码1602显示DS1302时钟

[复制链接]
发表于 2012-9-17 19:19 | 显示全部楼层 |阅读模式
本帖最后由 keanu131 于 2012-9-17 20:26 编辑

中元节过去很久了,小鬼还是不少。刚才的问题已经解决了,把1302读写信号线像双绞线那样搅在一起就好了。。。我汗。。。。

版主大人:看您觉得如果有必要的话,可以移到单片机区去了。。。
-------------------------------------------------------------
更新分隔,原标题:
DS1302插上VCC2(5V)读出的数就乱了,拔下来好了。。。求教
RT,同时给出显示结果和代码。bascom 2.0
http://ww2.sinaimg.cn/large/9d382e6bjw1dwxkf37s7hj.jpg
  1. $regfile = "m128def.dat"
  2. $crystal = 8000000
  3. $hwstack = 32                                               ' 设置堆栈大小
  4. $swstack = 10
  5. $framesize = 40

  6. Config Lcdpin = Pin , Db4 = Porta.4 , Db5 = Porta.5 , Db6 = Porta.6 , Db7 = Porta.7 , E = Portc.7 , Rs = Portc.6
  7. Config Lcd = 16 * 2
  8. Cursor Off Noblink
  9. Cls



  10. Dim Secs As Byte

  11. Dim Mins As Byte

  12. Dim Hour As Byte

  13. Dim Dates As Byte

  14. Dim Month As Byte

  15. Dim Day As Byte

  16. Dim Year As Byte

  17. Dim Tri As Byte



  18. '----------------------- Define RTC I/O Port       --------------------------



  19. Config Portb.5 = Output

  20. Config Portb.4 = Output



  21. Ds_rst Alias Portb.5                                        'reset pin.

  22. Ds_dat Alias Portb.3                                        'IO(data pin).

  23. Ds_dati Alias Pinb.3                                        'IO(data pin). Used for reading

  24. Ds_clk Alias Portb.4                                        'Clock pin.





  25. '----------------------- Write Commands For DS1302 --------------------------



  26. Const Writesec = &H80                                       ' Write Seconds

  27. Const Writemin = &H82                                       ' Write Minutes

  28. Const Writehour = &H84                                      ' Write Hour

  29. Const Writedates = &H86                                     ' Write Date

  30. Const Writemonth = &H88                                     ' Write Month

  31. Const Writeday = &H8A                                       ' Write Day

  32. Const Writeyear = &H8C                                      ' Write Year

  33. Const Writectrl = &H8E                                      ' Write Protect

  34. 'Const Writectrl = &H90

  35. Const Protect = &H80

  36. Const Unprotect = &H00

  37. '------------------------- Read Commands For DS1302 -------------------------



  38. Const Readsec = &H81                                        ' Read seconds from DS1302

  39. Const Readmin = &H83                                        ' Read minutes from DS1302

  40. Const Readhour = &H85                                       ' Read hours from DS1302

  41. Const Readdates = &H87                                      ' Read date from DS1302

  42. Const Readmonth = &H89                                      ' Read month from DS1302

  43. Const Readday = &H8B                                        ' Read day from DS1302

  44. Const Readyear = &H8D                                       ' Read year from DS1302

  45. Const Readprotect = &H8F                                    ' Read Protect

  46. Const Readctrl = &H91







  47. Declare Sub Ds1302_w_byte(byval Wdata As Byte)

  48. Declare Sub Ds1302_r_byte(wdata As Byte )

  49. Declare Sub Write_ds1302(byval Cmd As Byte , Byval Wdata As Byte)

  50. Declare Function Read_ds1302(byval Cmd As Byte) As Byte

  51. Declare Sub Gettime

  52. Declare Sub Settime

  53. Declare Sub Ds1302_init





  54.    Call Ds1302_init





  55. Do



  56.    Call Gettime


  57.    Locate 1 , 1
  58.    Lcd "  " ; Hex(year) ; "/" ; Hex(month) ; "/" ; Hex(dates) ; " Week " ; Hex(day)
  59.    Locate 2 , 1
  60.    Lcd "  " ; Hex(hour) ; ":" ; Hex(mins) ; ":" ; Hex(secs)



  61.    Waitms 500



  62. Loop



  63. End



  64. Sub Ds1302_init







  65.   Tri = Read_ds1302(&Hc1)



  66.   If Tri <> &HF0 Then                                       'Clock is stopped
  67.   Call Write_ds1302(writectrl , Unprotect)
  68.   Call Write_ds1302(writesec , &H01)                        'Let it run
  69.   Call Write_ds1302(writemin , &H28)
  70.   Call Write_ds1302(writehour , &H18)
  71.   Call Write_ds1302(writedates , &H17)
  72.   Call Write_ds1302(writemonth , &H09)
  73.   Call Write_ds1302(writeyear , &H12)
  74.   Call Write_ds1302(writeday , &H01)
  75.   Call Write_ds1302(&H90 , &HAA)
  76.   Call Write_ds1302(&Hc0 , &HF0)
  77.   Call Write_ds1302(writectrl , Protect)

  78.   End If



  79. End Sub



  80. Sub Settime



  81.   Call Write_ds1302(writectrl , Unprotect)

  82.   Call Write_ds1302(writesec , Secs)

  83.   Call Write_ds1302(writemin , Mins)

  84.   Call Write_ds1302(writehour , Hour)

  85.   Call Write_ds1302(writeday , Day)

  86.   Call Write_ds1302(writedates , Dates)

  87.   Call Write_ds1302(writemonth , Month)

  88.   Call Write_ds1302(writeyear , Year)

  89.   Call Write_ds1302(writectrl , Protect)



  90. End Sub



  91. Sub Gettime



  92.    Secs = Read_ds1302(readsec)

  93.    Mins = Read_ds1302(readmin)

  94.    Hour = Read_ds1302(readhour)

  95.    Dates = Read_ds1302(readdates)

  96.    Month = Read_ds1302(readmonth)

  97.    Day = Read_ds1302(readday)

  98.    Year = Read_ds1302(readyear)



  99. End Sub



  100. Sub Ds1302_w_byte(wdata As Byte)

  101. Config Portb.3 = Output

  102.   Local I As Byte

  103.    Reset Ds_clk
  104.    Waitus 2

  105.    For I = 0 To 7



  106.       If Wdata.i = 1 Then

  107.         Set Ds_dat

  108.         Else

  109.         Reset Ds_dat

  110.       End If


  111.       Waitus 2
  112.       Set Ds_clk
  113.       Waitus 2
  114.       Reset Ds_clk



  115.    Next I



  116. End Sub



  117. Sub Ds1302_r_byte(wdata As Byte )

  118. Config Pinb.3 = Input
  119. Pinb.3 = 1


  120.   Local I As Byte
  121.   Waitus 2


  122.   For I = 0 To 7

  123.     Wdata.i = Ds_dati
  124.     Waitus 2
  125.     Set Ds_clk
  126.     Waitus 2
  127.     Reset Ds_clk

  128.   Next I





  129. End Sub



  130. Sub Write_ds1302(cmd As Byte , Wdata As Byte)


  131.    Reset Ds_rst
  132.    Reset Ds_clk
  133.    Set Ds_rst

  134.    Call Ds1302_w_byte(cmd)

  135.    Call Ds1302_w_byte(wdata)
  136.    Set Ds_clk
  137.    Reset Ds_rst





  138. End Sub



  139. Function Read_ds1302(cmd As Byte)



  140.    Local I As Byte

  141.    Local X As Byte

  142.    Reset Ds_rst
  143.    Reset Ds_clk

  144.    Set Ds_rst

  145.    Call Ds1302_w_byte(cmd)

  146.    Call Ds1302_r_byte(x)

  147.    Set Ds_clk
  148.    Reset Ds_rst

  149.    Read_ds1302 = X



  150. End Function
复制代码
发表于 2012-9-17 19:31 | 显示全部楼层
2002?漂亮
回复

使用道具 举报

 楼主| 发表于 2012-9-17 19:33 | 显示全部楼层
回复 1# keanu131

再上张有问题时候的图。上面单个插针就是vcc2,直接接到5v。拔下来后时间就正常了
   http://ww3.sinaimg.cn/large/9d382e6bjw1dwzquenf6gj.jpg
回复

使用道具 举报

 楼主| 发表于 2012-9-17 19:34 | 显示全部楼层
2002?漂亮
灰太狼8888 发表于 2012-9-17 19:31 https://www.yleee.com.cn/images/common/back.gif



   天马那个带四个数码管的1602
回复

使用道具 举报

发表于 2012-9-17 19:58 | 显示全部楼层
vcc2应该要低一点儿吧?3.7V锂电池或者3V纽扣电池试试……
回复

使用道具 举报

 楼主| 发表于 2012-9-17 20:16 | 显示全部楼层
vcc2应该要低一点儿吧?3.7V锂电池或者3V纽扣电池试试……
sdf15937 发表于 2012-9-17 19:58 https://www.yleee.com.cn/images/common/back.gif


我以前也是这么认为的,所以法拉电容接的位置不对,一直充不上电。后来看了pdf改好了,如图: 未命名.bmp
   
回复

使用道具 举报

发表于 2012-9-28 22:11 | 显示全部楼层
不错不错  bascom还是通俗易懂
回复

使用道具 举报

本版积分规则

QQ|一淘宝店|手机版|商店|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2025-11-3 17:24 , Processed in 0.035922 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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