欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5180|回復: 26
打印 上一主題 下一主題
收起左側(cè)

單片機匯編語言模擬時鐘程序(LCD12864顯示)精校時間(開源)

  [復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:61140 發(fā)表于 2022-5-5 16:41 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
本帖最后由 xiaoyuxinke 于 2022-5-8 14:11 編輯

本程序無需DS1302,無需定時器,另本程序使用匯編語言編寫,只要按所使用的晶振修改延時部分,可以做到一年誤差5秒以內(nèi).
視頻已上傳至優(yōu)酷,需要的可以看一下.https://v.youku.com/v_show/id_XN ... o_XNTg2ODI5MDQ3Mg==
需要精校時間的可調(diào)整此四個值,需要更精準可在延時部分加NOP修整(可做到年誤差3秒以內(nèi)),此程序雖然不使用DS1302,但可以做到比DS1302更為精準



下面是單片機匯編語言程序部分:


  1. ;******************************************************************************
  2. ;* 【LCD12864數(shù)據(jù)接口定義】
  3. ;******************************************************************************
  4.            RS       BIT    P2.7    //高電平數(shù)據(jù)低電平指令
  5.            RW       BIT    P2.6    //高電平讀低電平寫
  6.            E        BIT    P2.5    //LCD12864使能控制端
  7.            DATE     EQU    P0           //八位數(shù)據(jù)送P0口(八位數(shù)據(jù)總線)
  8.            COM      EQU    70H           //LCD12864指令暫存地址
  9.            COOD     EQU    91H           //LCD12864數(shù)據(jù)暫存地址
  10. ;******************************************************************************
  11. ;* 【時間顯示定義】
  12. ;******************************************************************************
  13.            SHI      EQU    40H
  14.            FEN      EQU    41H
  15.            MIAO     EQU    42H
  16.            SHIH     EQU    43H
  17.            SHIL     EQU    44H
  18.            FENH     EQU    45H
  19.            FENL     EQU    46H
  20.            MIAOH    EQU    47H
  21.            MIAOL    EQU    48H
  22. ;******************************************************************************
  23. ;* 【按鍵功能和標志位定義】
  24. ;******************************************************************************
  25.            KEY1     EQU    P1.1
  26.            KEY2     BIT    P1.4
  27.            KEY3     BIT    P1.5
  28.            KEY4     BIT    P1.6
  29.            BUZZ     BIT    P3.7

  30.            ORG   0000H
  31.            AJMP  SDATA
  32.            ORG   0030H
  33.            AJMP  INTT0
  34.            ORG   0060H

  35.            SDATA:
  36.            SETB  PX0                                                //外部中斷0優(yōu)先權(quán)第1
  37.            SETB  EX0                                                //下降沿觸發(fā)中斷
  38.            SETB  IT0                                                //外部中斷0被允許
  39.            SETB  EA                                                //總中斷位被允許
  40.         MOV   SHI,#17                                                //小時賦初值
  41.         MOV   FEN,#33                                                //分鐘賦初值
  42.         MOV   MIAO,#00                                                //秒鐘賦初值
  43.         MOV   SHIH,#0                                                //小時高位賦初值
  44.         MOV   SHIL,#0                                                //小時低位賦初值
  45.         MOV   FENH,#0                                                //分鐘高位賦初值
  46.         MOV   FENL,#0                                                //分鐘低位賦初值
  47.         MOV   MIAOH,#0                                                //秒鐘高位賦初值
  48.         MOV   MIAOL,#0                                                //秒鐘低位賦初值
  49.         LCALL LCDCSH                                                //LCD12864初始化
  50.         LCALL FMQ                                                //蜂鳴器響一聲
  51.         JMP   MAIN                                                //

  52. MAIN:
  53.         LCALL HZXSCX                                                //
  54.         JMP   MAIN
  55. INTT0:                                                                //
  56.         JNB   KEY1,DISP1                                        //
  57.         JNB   KEY2,DISP2
  58.         JNB   KEY3,DISP3                                        //
  59.         JNB   KEY4,DISP4
  60.         RETI                                                        //
  61. DISP1:
  62.         LCALL FMQ
  63.         CLR   P3.2                                                //
  64.         INC   SHI
  65. RET                                                                //
  66. DISP2:
  67. RET                                                                //
  68. DISP3:                                                                //
  69. RET
  70. DISP4:                                                                //
  71. RET
  72.                                                                 //
  73. LCDCSH:
  74.     MOV   COM,#01H                      //DDRAM寫入20H,DDRAM的AC計數(shù)器清零
  75.     LCALL WCOM                          //12864寫入指令
  76.     LCALL DEL10MS                       //延時4.6毫秒
  77.     MOV   COM,#02H                      // AC清零,游標到開頭位置
  78.     LCALL WCOM                          //12864寫入指令
  79.     LCALL DEL10MS                       //延時4.6毫秒
  80.     MOV   COM,#0CH                      //游標開,整體顯示開,游標位置開
  81.     LCALL WCOM                          //12864寫入指令
  82.     LCALL DEL10MS                       //延時4.6毫秒
  83.         RET
  84. ;******************************************************************************
  85. ;* 【時間計算部分】
  86. ;******************************************************************************
  87. SJJSBF:                                                                        //時間計算部分,秒到60分進一,分到60時進一,時到24全清零
  88.     MOV   A,MIAO                                                //秒鐘數(shù)據(jù)送到累加器
  89.     CJNE  A,#60,FAG                                                //如果不等于60就退出,否則向下執(zhí)行
  90.         MOV   MIAO,#00                                                //秒鐘數(shù)據(jù)清零
  91.         INC   FEN                                                        //分鐘數(shù)據(jù)加一

  92.         MOV   A,FEN                                                        //分鐘數(shù)據(jù)送到累加器
  93.         CJNE  A,#60,FAG                                                //如果不等于60就退出,否則向下熱行
  94.         MOV   FEN,#00                                                //分鐘數(shù)據(jù)清零
  95.         INC   SHI                                                        //小時數(shù)據(jù)加一

  96.         MOV   A,SHI                                                        //小時數(shù)據(jù)送到累加器
  97.         CJNE  A,#24,FAG                                                //如果不等于24就退出,否則向下執(zhí)行
  98.         MOV   SHI,#00                                                //小時數(shù)據(jù)清零
  99.         RET
  100. FAG:
  101.         RET

  102. HZXSCX:
  103.     MOV   COM,#9CH                                                 //從第四行第四個位置開始寫
  104.     LCALL WCOM                          //12864寫入指令
  105.     LCALL DEL10MS
  106. //*********************************     //時分秒分配,把時分秒分別算出高低位
  107.         MOV   A,SHI                                                    //小時數(shù)據(jù)送到累加器
  108.         MOV   B,#10                                                    //立既數(shù)10送到B
  109.         DIV   AB                                                        //小時數(shù)除以10
  110.         MOV   SHIH,A                                                //整數(shù)送到小時高位
  111.         MOV   SHIL,B                                                //余數(shù)送到小時低位
  112.         MOV   A,FEN
  113.         MOV   B,#10
  114.         DIV   AB
  115.         MOV   FENH,A
  116.         MOV   FENL,B
  117.         MOV   A,MIAO
  118.         MOV   B,#10
  119.         DIV   AB
  120.         MOV   MIAOH,A
  121.         MOV   MIAOL,B
  122. //*********************************
  123.         MOV   A,SHIH
  124.         MOV   DPTR,#TAB
  125.         MOVC  A,@A+DPTR
  126.     MOV   COOD,A
  127.     LCALL WCOD
  128.     LCALL DEL1MS
  129.         
  130.         MOV   A,SHIL
  131.         MOV   DPTR,#TAB
  132.         MOVC  A,@A+DPTR                        
  133.     MOV   COOD,A
  134.     LCALL WCOD                          
  135.     LCALL DEL1MS
  136.     //****************************
  137.         MOV   COOD,#":"
  138.     LCALL WCOD                          
  139.     LCALL DEL1MS
  140.         //****************************
  141.     MOV   A,FENH
  142.         MOV   DPTR,#TAB
  143.         MOVC  A,@A+DPTR
  144.     MOV   COOD,A
  145.     LCALL WCOD
  146.     LCALL DEL1MS
  147.         
  148.         MOV   A,FENL
  149.         MOV   DPTR,#TAB
  150.         MOVC  A,@A+DPTR                        
  151.     MOV   COOD,A
  152.     LCALL WCOD                          
  153.     LCALL DEL1MS
  154.         //****************************
  155.         MOV   COOD,#":"
  156.     LCALL WCOD                          
  157.     LCALL DEL1MS
  158.         //****************************
  159.     MOV   A,MIAOH
  160.         MOV   DPTR,#TAB
  161.         MOVC  A,@A+DPTR
  162.     MOV   COOD,A
  163.     LCALL WCOD
  164.     LCALL DEL1MS
  165.         
  166.         MOV   A,MIAOL
  167.         MOV   DPTR,#TAB
  168.         MOVC  A,@A+DPTR                        
  169.     MOV   COOD,A
  170.     LCALL WCOD                          
  171.     LCALL DEL1MS

  172.         INC   MIAO
  173.         LCALL DEL1S
  174.         LCALL SJJSBF
  175.         RET

  176.   
  177. WCOD:                                      ;寫12864數(shù)據(jù)
  178.      SETB   RS                             ;選擇數(shù)據(jù)
  179.      LCALL  DEL1MS
  180.      CLR    RW                             ;寫模式
  181.      LCALL  DEL1MS
  182.      SETB   E                              ;使能允許
  183.      LCALL  DEL1MS
  184.      MOV    DATE,COOD                      ;數(shù)據(jù)寫入
  185.      LCALL  DEL10MS
  186.      CLR E
  187.      LCALL  DEL10MS
  188.      RET
  189.       
  190. WCOM:                                      ;寫12864指令
  191.      CLR   RS                               ;選擇指令
  192.      LCALL DEL1MS
  193.      CLR   RW                                ;寫模式
  194.      LCALL DEL1MS
  195.      SETB  E                                ;使能允許
  196.      LCALL DEL1MS
  197.      MOV   DATE,COM                          ;指令寫入
  198.      LCALL DEL10MS
  199.      CLR   E
  200.      LCALL DEL10MS
  201.      RET

  202. FMQ:
  203.      CLR   BUZZ
  204.          LCALL DEL80MS
  205.          SETB  BUZZ
  206.          RET
  207. ;**************************************************************
  208. ;* 【延時程序】
  209. ;**************************************************************
  210. DEL1MS:                                                           //延時1毫秒子程序
  211. MOV R7,#01H                                                   //
  212. DL1:                                                           //
  213. MOV R6,#8EH                                                   //
  214. DL0:                                                           //
  215. MOV R5,#02H                                                   //
  216. DJNZ R5,[        DISCUZ_CODE_1        ]nbsp;                                                  //
  217. DJNZ R6,DL0                                                   //
  218. DJNZ R7,DL1                                                   //
  219. RET                                                                   //子程序退出

  220. DEL10MS:                                                   //延時10毫秒子程序
  221. MOV R3,#02H                                                   //
  222. DEL41:                                                           //
  223. MOV R4,#20                                                   //
  224. E11:                                                           //
  225. MOV R5,#25                                                   //
  226. DJNZ R5,[        DISCUZ_CODE_1        ]nbsp;                                                  //
  227. DJNZ R4,E11                                                   //
  228. DJNZ R3,DEL41                                                   //
  229. RET                                                           //子程序退出
  230.                                                                   
  231. DEL80MS:                                                   //延時80毫秒子程序
  232. MOV R3,#20                                                   //
  233. DEL40:                                                           //
  234. MOV R4,#250                                                   //
  235. E1:                                                           //
  236. MOV R5,#150                                                   //
  237. DJNZ R5,[        DISCUZ_CODE_1        ]nbsp;                                                  //
  238. DJNZ R4,E1                                                   //
  239. DJNZ R3,DEL40                                                   //
  240. RET                                                           //子程序退出


  241. DEL1S:                                                           //延時1秒子程序
  242. MOV R3,#05H                                                   //
  243. E21:                                                           //
  244. MOV R4,#255                                                   //
  245. E31:                                                           //
  246. MOV R5,#20                                                   //
  247. E41:                                                           //
  248. MOV R6,#248                                                   //
  249. DJNZ R6,[        DISCUZ_CODE_1        ]nbsp;                                                  //
  250. DJNZ R5,E41                                                   //
  251. DJNZ R4,E31                                                   //
  252. DJNZ R3,E21                                                   //
  253. RET                                                                   //子程序退出


  254. TAB:  
  255.     DB  "0","1","2","3","4","5","6","7","8","9",":"  
  256.     END
復制代碼


評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

來自 17#
ID:61140 發(fā)表于 2023-2-12 12:36 | 只看該作者
songxia8013 發(fā)表于 2023-2-10 15:49
請教一下,這個DJNZ R6,[        DISCUZ_CODE_1        ]nbsp; 是什么意思?

DJNZ R6,[        DISCUZ_CODE_1        ]nbsp;
這個原來是DJNZ R6,$
壇子里發(fā)不了$,所以自動轉(zhuǎn)成那樣了
回復

使用道具 舉報

沙發(fā)
ID:262 發(fā)表于 2022-5-6 16:13 | 只看該作者
一般來說 是不可能達到一年幾秒誤差的精度的,樓主測試過嗎?
回復

使用道具 舉報

板凳
ID:61140 發(fā)表于 2022-5-6 16:21 | 只看該作者
heicad 發(fā)表于 2022-5-6 16:13
一般來說 是不可能達到一年幾秒誤差的精度的,樓主測試過嗎?

去理解一下C和匯編的差別,你會懂,一個匯編NOP指令,最多2-3微秒的時間,一個24M的晶振,幾微秒,一年誤差不會超過5秒種.
在C語言中,延時只是個模糊概念,不管你寫延時多少都不一定,要看編譯器怎么去做,但匯編語言你寫延時多少就是多少,可以做到很精準.
回復

使用道具 舉報

地板
ID:61140 發(fā)表于 2022-5-6 16:26 | 只看該作者
如果加上年累積誤差校正,一年走時誤差控制在1秒以內(nèi)是做的到的(這里只計論走時誤差,晶振的熱穩(wěn)定誤差不討論,那個是元件性能決定的)
回復

使用道具 舉報

5#
ID:99987 發(fā)表于 2022-5-6 18:53 | 只看該作者
厲害,匯編做的延時是很精確的,直擊底層,是C無法比擬的。
回復

使用道具 舉報

6#
ID:744744 發(fā)表于 2022-5-6 20:03 來自觸屏版 | 只看該作者
看不懂匯編程序,失敗
回復

使用道具 舉報

7#
ID:61140 發(fā)表于 2022-5-8 14:05 | 只看該作者
本人不會C,所以只好匯編充大頭了,各位見笑/
回復

使用道具 舉報

8#
ID:864787 發(fā)表于 2022-5-9 23:53 | 只看該作者
就喜歡匯編的可操作性,就好比開車一樣,我自己握方向盤總比使喚別人握方向盤爽的多,當然使喚別人握方向盤肯定輕松多(類似C語言),但缺少那份激情,我喜歡匯編也是這原因,別跟我算法,我就編個時鐘或者一個手電筒控制程序,你跟我談算法
回復

使用道具 舉報

9#
ID:61140 發(fā)表于 2022-5-25 22:37 | 只看該作者
axiongzhang 發(fā)表于 2022-5-6 20:03
看不懂匯編程序,失敗

匯編并不是很難的,有人教就可以
回復

使用道具 舉報

10#
ID:61140 發(fā)表于 2022-5-25 22:37 | 只看該作者
madell 發(fā)表于 2022-5-6 18:53
厲害,匯編做的延時是很精確的,直擊底層,是C無法比擬的。

說的對,這是匯編的優(yōu)點,C和匯編各有優(yōu)缺點.
回復

使用道具 舉報

11#
ID:61140 發(fā)表于 2022-5-25 22:38 | 只看該作者
風云101 發(fā)表于 2022-5-9 23:53
就喜歡匯編的可操作性,就好比開車一樣,我自己握方向盤總比使喚別人握方向盤爽的多,當然使喚別人握方向盤 ...

喜歡就好,喜歡的才是適合自己的.
回復

使用道具 舉報

12#
ID:829973 發(fā)表于 2022-5-26 14:58 | 只看該作者
不錯,我也是喜歡匯編!!!
回復

使用道具 舉報

13#
ID:78901 發(fā)表于 2022-5-26 17:40 | 只看該作者
不管是c還是匯編,中斷操作肯定影響計時
回復

使用道具 舉報

14#
無效樓層,該帖已經(jīng)被刪除
15#
ID:61140 發(fā)表于 2022-5-30 18:04 | 只看該作者
fsj5098 發(fā)表于 2022-5-26 17:40
不管是c還是匯編,中斷操作肯定影響計時

整個程序沒用到中斷,為什么要用中斷呢
回復

使用道具 舉報

16#
ID:102963 發(fā)表于 2023-2-10 15:49 | 只看該作者
請教一下,這個DJNZ R6,[        DISCUZ_CODE_1        ]nbsp; 是什么意思?
回復

使用道具 舉報

18#
ID:61140 發(fā)表于 2023-2-12 12:37 | 只看該作者
songxia8013 發(fā)表于 2023-2-10 15:49
請教一下,這個DJNZ R6,[        DISCUZ_CODE_1        ]nbsp; 是什么意思?

看我前面發(fā)的圖片上面就知道了
回復

使用道具 舉報

19#
ID:1072680 發(fā)表于 2023-4-25 16:55 | 只看該作者
您好,我想問你點關(guān)于單片機匯編的問題可以嗎?我是個新手小白,在做設(shè)計遇到了一些問題不知道咋解決想找您幫個忙。如果不方便的話就算了,叨嘮您了,不好意思啊
回復

使用道具 舉報

20#
ID:61140 發(fā)表于 2023-10-21 20:24 | 只看該作者
Dream匯編男孩 發(fā)表于 2023-4-25 16:55
您好,我想問你點關(guān)于單片機匯編的問題可以嗎?我是個新手小白,在做設(shè)計遇到了一些問題不知道咋解決想找您 ...

什么問題,工只是業(yè)余來一下這里,平時工作較忙。
回復

使用道具 舉報

21#
ID:78901 發(fā)表于 2023-10-21 22:49 | 只看該作者
如果環(huán)境溫度不變更的情況下,時鐘可以做得很準(不管是匯編還是C)
回復

使用道具 舉報

22#
ID:397054 發(fā)表于 2023-10-22 09:42 | 只看該作者
xiaoyuxinke 發(fā)表于 2023-2-12 12:37
看我前面發(fā)的圖片上面就知道了

是啊,就是這個DJNZ R6,$是什么意思呢?
遍觀整個程序中并沒有這個標號,跳到哪里去呢?
回復

使用道具 舉報

23#
ID:611626 發(fā)表于 2023-10-22 10:00 | 只看該作者
xiaoyuxinke 發(fā)表于 2022-5-8 14:05
本人不會C,所以只好匯編充大頭了,各位見笑/

樓主既然對匯編熟系,對OD跟蹤 WINhex這些一定也不陌生吧,能不能出個教程,工業(yè)控制上經(jīng)常用
回復

使用道具 舉報

24#
ID:397054 發(fā)表于 2023-10-22 10:58 | 只看該作者
剛試了下,可以編譯,結(jié)果是-2,這樣就省了個標號,這在Keil中行得通,在其他的匯編環(huán)境中不知怎樣,這不是個標準用法,第一次看到。
回復

使用道具 舉報

25#
ID:61140 發(fā)表于 2023-10-22 22:51 | 只看該作者
鵜鶘 發(fā)表于 2023-10-22 09:42
是啊,就是這個DJNZ R6,$是什么意思呢?
遍觀整個程序中并沒有這個標號,跳到哪里去呢?

R6中的數(shù)減一,如果不為0原地執(zhí)行,
就是說R6中的數(shù)不為0就重復執(zhí)行這句,
直到R6等于0,才跳到下一句。
回復

使用道具 舉報

26#
ID:61140 發(fā)表于 2023-10-22 22:54 | 只看該作者
songxia8013 發(fā)表于 2023-2-10 15:49
請教一下,這個DJNZ R6,[        DISCUZ_CODE_1        ]nbsp; 是什么意思?

原程序中是:
DJNZ R6,$
但是壇子里不讓發(fā)$這個符號,所以變成這樣了
回復

使用道具 舉報

27#
ID:61140 發(fā)表于 2023-10-22 22:56 | 只看該作者
宏達工控 發(fā)表于 2023-10-22 10:00
樓主既然對匯編熟系,對OD跟蹤 WINhex這些一定也不陌生吧,能不能出個教程,工業(yè)控制上經(jīng)常用

我還要工作,沒太多時間來這里,只是偶然過來看看,所以實在報歉
回復

使用道具 舉報

28#
ID:61140 發(fā)表于 2023-10-22 22:57 | 只看該作者
鵜鶘 發(fā)表于 2023-10-22 10:58
剛試了下,可以編譯,結(jié)果是-2,這樣就省了個標號,這在Keil中行得通,在其他的匯編環(huán)境中不知怎樣,這不是 ...

匯編的移植性本來就不太友好,這是公認的缺點,所以這個我只能呵呵了
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表