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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4824|回復: 26
收起左側

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

  [復制鏈接]
ID:61140 發表于 2022-5-5 16:41 | 顯示全部樓層 |閱讀模式
本帖最后由 xiaoyuxinke 于 2022-5-8 14:11 編輯

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

51hei圖片20220505164419.png

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


  1. ;******************************************************************************
  2. ;* 【LCD12864數據接口定義】
  3. ;******************************************************************************
  4.            RS       BIT    P2.7    //高電平數據低電平指令
  5.            RW       BIT    P2.6    //高電平讀低電平寫
  6.            E        BIT    P2.5    //LCD12864使能控制端
  7.            DATE     EQU    P0           //八位數據送P0口(八位數據總線)
  8.            COM      EQU    70H           //LCD12864指令暫存地址
  9.            COOD     EQU    91H           //LCD12864數據暫存地址
  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優先權第1
  37.            SETB  EX0                                                //下降沿觸發中斷
  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計數器清零
  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                                                //秒鐘數據送到累加器
  89.     CJNE  A,#60,FAG                                                //如果不等于60就退出,否則向下執行
  90.         MOV   MIAO,#00                                                //秒鐘數據清零
  91.         INC   FEN                                                        //分鐘數據加一

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

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

  102. HZXSCX:
  103.     MOV   COM,#9CH                                                 //從第四行第四個位置開始寫
  104.     LCALL WCOM                          //12864寫入指令
  105.     LCALL DEL10MS
  106. //*********************************     //時分秒分配,把時分秒分別算出高低位
  107.         MOV   A,SHI                                                    //小時數據送到累加器
  108.         MOV   B,#10                                                    //立既數10送到B
  109.         DIV   AB                                                        //小時數除以10
  110.         MOV   SHIH,A                                                //整數送到小時高位
  111.         MOV   SHIL,B                                                //余數送到小時低位
  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數據
  178.      SETB   RS                             ;選擇數據
  179.      LCALL  DEL1MS
  180.      CLR    RW                             ;寫模式
  181.      LCALL  DEL1MS
  182.      SETB   E                              ;使能允許
  183.      LCALL  DEL1MS
  184.      MOV    DATE,COOD                      ;數據寫入
  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
復制代碼


評分

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

查看全部評分

回復

使用道具 舉報

ID:61140 發表于 2023-2-12 12:36 | 顯示全部樓層
songxia8013 發表于 2023-2-10 15:49
請教一下,這個DJNZ R6,[        DISCUZ_CODE_1        ]nbsp; 是什么意思?

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

使用道具 舉報

ID:262 發表于 2022-5-6 16:13 | 顯示全部樓層
一般來說 是不可能達到一年幾秒誤差的精度的,樓主測試過嗎?
回復

使用道具 舉報

ID:61140 發表于 2022-5-6 16:21 | 顯示全部樓層
heicad 發表于 2022-5-6 16:13
一般來說 是不可能達到一年幾秒誤差的精度的,樓主測試過嗎?

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

使用道具 舉報

ID:61140 發表于 2022-5-6 16:26 | 顯示全部樓層
如果加上年累積誤差校正,一年走時誤差控制在1秒以內是做的到的(這里只計論走時誤差,晶振的熱穩定誤差不討論,那個是元件性能決定的)
回復

使用道具 舉報

ID:99987 發表于 2022-5-6 18:53 | 顯示全部樓層
厲害,匯編做的延時是很精確的,直擊底層,是C無法比擬的。
回復

使用道具 舉報

ID:744744 發表于 2022-5-6 20:03 來自手機 | 顯示全部樓層
看不懂匯編程序,失敗
回復

使用道具 舉報

ID:61140 發表于 2022-5-8 14:05 | 顯示全部樓層
本人不會C,所以只好匯編充大頭了,各位見笑/
回復

使用道具 舉報

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

使用道具 舉報

ID:61140 發表于 2022-5-25 22:37 | 顯示全部樓層
axiongzhang 發表于 2022-5-6 20:03
看不懂匯編程序,失敗

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

使用道具 舉報

ID:61140 發表于 2022-5-25 22:37 | 顯示全部樓層
madell 發表于 2022-5-6 18:53
厲害,匯編做的延時是很精確的,直擊底層,是C無法比擬的。

說的對,這是匯編的優點,C和匯編各有優缺點.
回復

使用道具 舉報

ID:61140 發表于 2022-5-25 22:38 | 顯示全部樓層
風云101 發表于 2022-5-9 23:53
就喜歡匯編的可操作性,就好比開車一樣,我自己握方向盤總比使喚別人握方向盤爽的多,當然使喚別人握方向盤 ...

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

使用道具 舉報

ID:829973 發表于 2022-5-26 14:58 | 顯示全部樓層
不錯,我也是喜歡匯編!!!
回復

使用道具 舉報

ID:78901 發表于 2022-5-26 17:40 | 顯示全部樓層
不管是c還是匯編,中斷操作肯定影響計時
回復

使用道具 舉報

ID:61140 發表于 2022-5-30 18:04 | 顯示全部樓層
fsj5098 發表于 2022-5-26 17:40
不管是c還是匯編,中斷操作肯定影響計時

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

使用道具 舉報

ID:102963 發表于 2023-2-10 15:49 | 顯示全部樓層
請教一下,這個DJNZ R6,[        DISCUZ_CODE_1        ]nbsp; 是什么意思?
回復

使用道具 舉報

ID:61140 發表于 2023-2-12 12:37 | 顯示全部樓層
songxia8013 發表于 2023-2-10 15:49
請教一下,這個DJNZ R6,[        DISCUZ_CODE_1        ]nbsp; 是什么意思?

看我前面發的圖片上面就知道了
回復

使用道具 舉報

ID:1072680 發表于 2023-4-25 16:55 | 顯示全部樓層
您好,我想問你點關于單片機匯編的問題可以嗎?我是個新手小白,在做設計遇到了一些問題不知道咋解決想找您幫個忙。如果不方便的話就算了,叨嘮您了,不好意思啊
回復

使用道具 舉報

ID:61140 發表于 2023-10-21 20:24 | 顯示全部樓層
Dream匯編男孩 發表于 2023-4-25 16:55
您好,我想問你點關于單片機匯編的問題可以嗎?我是個新手小白,在做設計遇到了一些問題不知道咋解決想找您 ...

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

使用道具 舉報

ID:78901 發表于 2023-10-21 22:49 | 顯示全部樓層
如果環境溫度不變更的情況下,時鐘可以做得很準(不管是匯編還是C)
回復

使用道具 舉報

ID:397054 發表于 2023-10-22 09:42 | 顯示全部樓層
xiaoyuxinke 發表于 2023-2-12 12:37
看我前面發的圖片上面就知道了

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

使用道具 舉報

ID:611626 發表于 2023-10-22 10:00 | 顯示全部樓層
xiaoyuxinke 發表于 2022-5-8 14:05
本人不會C,所以只好匯編充大頭了,各位見笑/

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

使用道具 舉報

ID:397054 發表于 2023-10-22 10:58 | 顯示全部樓層
剛試了下,可以編譯,結果是-2,這樣就省了個標號,這在Keil中行得通,在其他的匯編環境中不知怎樣,這不是個標準用法,第一次看到。
回復

使用道具 舉報

ID:61140 發表于 2023-10-22 22:51 | 顯示全部樓層
鵜鶘 發表于 2023-10-22 09:42
是啊,就是這個DJNZ R6,$是什么意思呢?
遍觀整個程序中并沒有這個標號,跳到哪里去呢?

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

使用道具 舉報

ID:61140 發表于 2023-10-22 22:54 | 顯示全部樓層
songxia8013 發表于 2023-2-10 15:49
請教一下,這個DJNZ R6,[        DISCUZ_CODE_1        ]nbsp; 是什么意思?

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

使用道具 舉報

ID:61140 發表于 2023-10-22 22:56 | 顯示全部樓層
宏達工控 發表于 2023-10-22 10:00
樓主既然對匯編熟系,對OD跟蹤 WINhex這些一定也不陌生吧,能不能出個教程,工業控制上經常用

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

使用道具 舉報

ID:61140 發表于 2023-10-22 22:57 | 顯示全部樓層
鵜鶘 發表于 2023-10-22 10:58
剛試了下,可以編譯,結果是-2,這樣就省了個標號,這在Keil中行得通,在其他的匯編環境中不知怎樣,這不是 ...

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: av资源在线看 | 国产精品日产欧美久久久久 | 老牛影视av一区二区在线观看 | 国产www成人| 青青草一区二区 | 亚洲成人激情在线观看 | 欧美日韩久久精品 | 激情五月综合 | 国产精品久久久久一区二区 | 欧美中文字幕 | 亚洲成网站 | 午夜久久久 | 爱爱爱av | 欧美精品日韩精品 | 欧美日韩高清一区 | 蜜桃视频一区二区三区 | 一级黄色片网址 | 免费一区二区 | аⅴ资源新版在线天堂 | 亚洲国产成人精品女人久久久野战 | 一区中文 | 亚洲免费一区 | 中文字幕日韩一区二区 | 国产成人福利在线观看 | 久久精品免费观看 | 亚洲精品99久久久久久 | 久久久国产一区二区三区四区小说 | 国产成人一区在线 | 欧美成人黄色小说 | 国产日韩欧美精品一区二区 | 国产成人叼嘿视频在线观看 | www.亚洲一区二区 | 精品国产欧美一区二区三区成人 | 久久久精品影院 | av在线免费观看网址 | 日韩精品一区二区三区免费观看 | 鸳鸯谱在线观看高清 | 午夜视频一区二区 | 中文字幕一二三 | 亚洲精品国产电影 | 91麻豆精品国产91久久久更新资源速度超快 |