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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2688|回復: 8
打印 上一主題 下一主題
收起左側

lcd顯示問號,應該是數字(設計單片機電子時鐘)匯編語言

[復制鏈接]
跳轉到指定樓層
樓主

單片機源程序如下:
  1. ;初始化      

  2.         P_Lcd equ P0            ;液晶lcd數據總線
  3.         pq equ p3              ;按鍵接口
  4.         pf bit p2.5             ;蜂鳴器接口
  5.         led bit p2.0            ;led燈指示接口
  6.         lcdrs bit p2.6         ;lcdrs=1選擇數據寄存器,lcdrs=0選擇指令寄存器
  7.         lcdrw bit p2.5                ;lcdrw=1進行讀操作,lcdrw=0進行寫操作
  8.         lcde bit p2.7                ;lcdep由1-->0 時,液晶模塊執行命令
  9.         sclk bit p3.6           ;時鐘芯片時鐘線引腳
  10.         io bit p3.4             ;時鐘芯片數據傳輸線引腳
  11.         rst bit p3.5            ;時鐘芯片復位線引腳
  12.         IsSheZhi bit 30h        ;設置狀態標示位
  13.         BJ bit 31h              ;比較標示位
  14.         QH bit 32h              ;切換標示位
  15.         bs bit 33h              ;報時功能標示位
  16.         cxbs bit 34h            ;執行報時標志位
  17.         sec equ 50h
  18.         min equ 51h
  19.         hour equ 52h
  20.         day equ 53h
  21.         week equ 54h
  22.         month equ 55h
  23.         year equ 56h
  24.         KeyCode equ 57h         ;按鍵1功能子程序序號存儲地址
  25.         jiepai equ 58h          ;存放報時聲音的節拍常數
  26.         chuzhi equ 59h          ;報時開始秒時間常數
  27.         shengshu equ 5ah        ;存放報時聲數
  28.         DspBuf equ 60h          ;當前時間拆字后存儲首地址
  29.         dspba  equ 70h          ;鬧鐘時間首地址
  30. org 0h
  31.         ljmp main
  32.         org 00bh
  33.         ljmp sub1
  34. org 01bh
  35.         ljmp sub2
  36.         org 30h

  37. ;主程序      

  38. main:
  39.         clr IsSheZhi
  40.         clr QH
  41.         setb BJ
  42.         setb bs
  43.         setb cxbs
  44.         mov  KeyCode,#00h
  45.         mov sp ,#30h
  46.         mov year,#16h            ;為當前時間賦初值
  47.         mov month,#06h
  48.         mov week,#4h
  49.         mov day,#30h
  50.         mov hour,#00h
  51.         mov min,#00h
  52.         mov sec,#00h
  53.         mov DspBuf-1,#0h
  54.         mov DspBuf-2,#02h
  55.         mov jiepai,#80h          ;設置節拍常數
  56.         mov chuzhi,#00h          ;設置1秒時開始報時
  57.         mov dspba+0,#00h         ;為鬧鐘時間賦初值
  58.         mov dspba+1,#09h
  59.         mov dspba+2,#0h
  60.         mov dspba+3,#0h
  61.         mov TH0,#0ffh
  62.         mov TL0,#0ffh
  63.         mov TH1,#0ffh
  64.         mov TL1,#0ffh
  65.         mov IE,#8aH
  66.         mov TMOD,#11h
  67.         setb pf
  68.         acall lcd_init          ;調LCM的初始化程序
  69.         lcall word              ;把自創字符寫入CGRAM的子程序
  70.         lcall set1302           ;DS1302初始化
  71. mainloop:
  72.         jb IsSheZhi, SheZhi     ;判斷是否處于設置狀態,處于設置狀態則跳轉
  73.         lcall get1302           ;調讀時間子程序
  74.         lcall chaizi
  75.         lcall display           ;調顯示子程序,顯示當前時間與溫度
  76. SheZhi:      
  77.         jb BJ,xq                ;判斷鬧鐘功能是否開啟,未開啟則跳轉
  78.         lcall bijiao            ;調比較子程序,比較當前時間與鬧鐘時間
  79. xq:  
  80.         lcall  anjian           ;按鍵掃描
  81.         jb bs,bs_1
  82.         lcall zhengshi          ;判斷當前時間是否是整時,即能否報時
  83. bs_1:   
  84.         jb cxbs,cx_1
  85.         lcall baoshi            ;執行報時功能
  86. cx_1:   
  87.         sjmp mainloop

  88. ;液晶顯示初始化設定            

  89. lcd_init:
  90.         mov a,#01h                ;清除LCD的顯示內容(清屏)
  91.         acall LcdWrCmd
  92.         mov a,#6                ;10ms延時
  93.         acall delay
  94.         mov a,#38h              ;顯示模式設置(使用8位數據,顯示兩行,使用5*7的字型)
  95.         acall LcdWrCmd
  96.         mov a,#6
  97.         acall delay
  98.         mov a,#0ch                ;顯示開及光標設置(顯示器開,光標關,字符不閃爍)
  99.         acall LcdWrCmd
  100.         mov a,#6
  101.         acall delay
  102.         mov a,#06h                ;顯示光標移動設置(字符不動,光標自動右移)
  103.         acall LcdWrCmd
  104.         mov a,#6
  105.         acall delay
  106.         ret

  107. ;LCM命令嵌入        

  108. LcdWrCmd:
  109.         ACALL CMBUSY
  110.         clr        LCDRW
  111.         clr        LCDRS
  112.         mov        P_Lcd, A
  113.         mov a,#6
  114.         acall delay
  115.         setb        LcdE
  116.         mov a,#6
  117.         acall delay
  118.         clr        LcdE
  119.         ret

  120. ;LCM數據輸入      

  121. LcdWrDat:
  122.         ACALL CMBUSY
  123.         setb        LCDRS
  124.         clr        LCDRW
  125.         mov        P_Lcd, A
  126.         mov a,#6
  127.         acall delay
  128.         setb        LcdE
  129.         mov a,#6
  130.         acall delay
  131.         clr        LcdE
  132.         ret

  133. ;延時子程序         

  134. delay:
  135.         mov r7,a           ;設置a為自定義變量,可省去其他延時程序的編寫
  136.         d2:        mov r6,#250           ;設置1ms延時
  137. d1:
  138.         nop
  139.         nop
  140.         djnz r6,d1
  141.         djnz r7,d2
  142.         ret
  143. CMBUSY:
  144.         PUSH ACC
  145.         MOV P0,#0FFH
  146.         CLR LCDRS
  147.         SETB LCDRW
  148.         SETB LcdE
  149. LOOP1:
  150.         NOP
  151.         JB P0.7,LOOP1
  152.         CLR LcdE
  153.         POP ACC
  154. RET







  155. ;ds1302初始化程序set1302        

  156. set1302:
  157.         mov a,#8eh               ;寫ds1302控制寄存器地址
  158.         mov b,#00h           ;允許寫操作,將WP位設置為低電平
  159.         lcall clockwr
  160.         mov a,#8ch           ;寫年初值
  161.         mov b,year
  162.         lcall clockwr
  163.         mov a,#88h           ;寫月初值
  164.         mov b,month
  165.         lcall clockwr
  166.         mov a,#8ah           ;寫星期初值
  167.         mov b,week
  168.         lcall clockwr
  169.         mov a,#86h           ;寫日期初值
  170.         mov b,day
  171.         lcall clockwr
  172.         mov a,#84h           ;寫時初值
  173.         mov b,hour
  174.         lcall clockwr
  175.         mov a,#82h           ;寫分初值      
  176.         mov b,min
  177.         lcall clockwr
  178.         mov a,#80h           ;寫秒初值
  179.         mov b,sec
  180.         lcall clockwr
  181.         ret

  182. ;讀時間子程序get1302     

  183.         get1302:mov a,#81h           ;讀秒
  184.         lcall clockrd
  185.         mov sec,a
  186.         mov a,#83h           ;讀分
  187.         lcall clockrd
  188.         mov min,a
  189.         mov a,#85h           ;讀時
  190.         lcall clockrd
  191.         mov hour,a
  192.         mov a,#87h           ;讀日
  193.         lcall clockrd
  194.         mov day,a
  195.         mov a,#8bh           ;讀星期
  196.         lcall clockrd
  197.         mov week,a
  198.         mov a,#89h           ;讀月
  199.         lcall clockrd
  200.         mov month,a
  201.         mov a,#8dh           ;讀年
  202.         lcall clockrd
  203.         mov year,a
  204.         ret

  205. ;ds1302讀子程序     
  206.         clockrd:clr rst    ;rst先設置低電平,再設置高電平,起到去亂碼作用
  207.         clr sclk           ;sclk置為低電平
  208.         setb rst           ;rst置為高電平,選通DS1302
  209.         mov r7,#8          ;串行移位傳送次數
  210. rds1:      
  211.         rrc a
  212.         mov io,c           ;輸出一位寄存器讀地址
  213.         setb sclk          ;發串行脈沖
  214.         nop
  215.         nop
  216.         clr sclk           ;sclk置為低電平
  217.         djnz r7,rds1
  218.         nop                ;延時,防后面串行讀數據丟失
  219.         nop
  220.         setb io            ;8位地址輸出完畢,IO設置為輸入端口
  221.         mov r7,#8
  222. rds2:  
  223.         mov c,io           ;讀入一位數據
  224.         rrc a
  225.         setb sclk          ;發串行脈沖
  226.         nop
  227.         nop
  228.         clr sclk
  229.         djnz r7,rds2
  230.         clr rst
  231.         setb sclk
  232.         ret

  233. ;ds1302寫數據子程序         

  234. clockwr:
  235.         push acc           ;設置堆棧,入棧
  236.         push b
  237.         clr rst
  238.         clr sclk
  239.         setb rst           ;選通DS1302
  240.         mov r7,#8
  241. wrs1:   
  242.         rrc a
  243.         mov io,c           ;輸出一位寄存器寫地址
  244.         clr sclk           ;發串行輸出脈沖
  245.         setb sclk
  246.         djnz r7,wrs1
  247.         nop
  248.         mov a,b            ;將待寫入數據送A
  249.         mov r7,#8
  250. wrs2:   
  251.         rrc a
  252.         mov io,c           ;經IO輸出一位數據
  253.         clr sclk
  254.         setb sclk
  255.         djnz r7,wrs2
  256.         pop b              ;出棧
  257.         pop acc
  258.         ret

  259. ;顯示設置—— 分配時間顯示空間   

  260. chaizi:
  261.         mov a,year          ;拆年
  262.         mov r0,#60h
  263.         acall hex2bcd
  264.         mov a,month            ;拆月
  265.         mov r0,#62h
  266.         acall hex2bcd
  267.         mov a,day            ;拆日期
  268.         mov r0,#64h
  269.         lcall  hex2bcd
  270.         mov a,week;
  271.         mov 66h,a
  272.         mov a,hour            ;拆時
  273.         mov r0,#67h
  274.         lcall  hex2bcd
  275.         mov a,min
  276.         mov r0,#69h            ;拆分
  277.         lcall  hex2bcd
  278.         mov a,sec
  279.         mov r0,#6bh            ;拆秒
  280.         acall hex2bcd
  281.         ret

  282. ;顯示設置—— 采用除法指令實現的拆字子程序

  283. hex2bcd:
  284.         mov b,a
  285.         anl a,#0f0h
  286.         swap a
  287.         mov @r0,a
  288.         mov a,b
  289.         anl a,#0fh
  290.         inc r0
  291.         mov @r0,a
  292.         ret

  293. ;顯示設置——連續顯示相鄰的兩字節

  294. LcdDspBuf:
  295.         mov A, @R0
  296.         orl a,#30h
  297.         acall LcdWrDat
  298.         mov a,6
  299.         lcall delay
  300.         inc R0
  301.         djnz R2, LcdDspBuf
  302.         ret

  303. ;顯示設置——自創字符寫入CGRAM的子程序

  304. word:         
  305.         mov a,#40h
  306.         lcall LcdWrCmd
  307.         mov r5,#40
  308.         mov dptr,#tab1
  309.         mov r4,#0
  310. nextt:        
  311.         mov a,r4
  312.         movc a,@a+dptr
  313.         lcall LcdWrDat
  314.         inc r4
  315.         djnz r5,nextt
  316.         ret
  317. tab1:      
  318.         db 08h,0fh,12h,0fh,0ah,1fh,02h,00h;年
  319.         db 0fh,09h,0fh,09h,0fh,09h,13h,00h;月
  320.         db 0fh,09h,09h,0fh,09h,09h,0fh,00h;日
  321.         db 06h,0fh,1fh,0fh,07h,1bh,19h,00h;顯示鬧鐘功能開啟標示符號
  322.         db 15h,15h,04h,11h,1bh,1fh,0eh,00h;顯示報時功能開啟標示符號

  323. ;進入鬧鐘功能設置顯示   

  324. display_nz:
  325.         mov a,#0c2h
  326.         acall LcdWrCmd     ;確定鬧鐘時間的首地址
  327.         mov R0, #dspba+0
  328.         mov R2, #2
  329.         acall LcdDspBuf           ;顯示時
  330.         mov a,#3ah         ;顯示分隔符號
  331.         acall        LcdWrDat
  332.         mov R0, #dspba+2
  333.         mov R2, #2
  334.         acall LcdDspBuf           ;顯示時
  335.         jb BJ,XT           ;判斷鬧鐘功能是否開啟
  336.         mov a,#0c0h
  337.         acall LcdWrCmd
  338.         mov  a,#03h           ;顯示鬧鐘功能開啟標示符號
  339.         acall        LcdWrDat
  340. XT:    ret

  341. ;正常顯示設置     

  342. display:
  343.         mov a,#80h
  344.         acall LcdWrCmd           ;指明顯示的首地址
  345.         mov R0, #DspBuf-2
  346.         mov R2, #2
  347.         acall LcdDspBuf           ;顯示年份前兩位
  348.         mov R0, #DspBuf+0
  349.         mov R2, #2
  350.         acall LcdDspBuf           ;顯示年后兩位
  351.         mov  a,#00h           ;顯示漢字年
  352.         acall        LcdWrDat
  353.         mov R0, #DspBuf+2
  354.         mov R2, #2
  355.         acall LcdDspBuf           ;顯示月份
  356.         mov  a,#01h           ;顯示漢月字年
  357.         acall        LcdWrDat
  358.         mov R0, #DspBuf+4
  359.         mov R2, #2
  360.         acall LcdDspBuf           ;顯示日期
  361.         mov  a,#02h           ;顯示漢日字年
  362.         acall        LcdWrDat
  363.         mov a,#8ch           ;w指明星期的首地址
  364.         acall LcdWrCmd
  365.         mov a,#57h
  366.         acall        LcdWrDat   ;顯示w
  367.         mov a,#3ah         ;顯示分隔符號
  368.         acall        LcdWrDat
  369.         mov  a,66h         ;顯示星期值
  370.         orl a,#30h
  371.         acall        LcdWrDat
  372.         jb bs,XtT           ;判斷報時功能是否開啟
  373.         mov  a,#04h           ;顯示報時功能開啟標示符號
  374.         acall        LcdWrDat
  375. XtT:      
  376.         mov a,#0c2h
  377.         acall LcdWrCmd           ;確定地址
  378.         mov R0, #DspBuf+7
  379.         mov R2, #2
  380.         acall LcdDspBuf           ;顯示時
  381.         mov a,#3ah         ;顯示分隔符號
  382.         acall        LcdWrDat
  383.         mov R0, #DspBuf+9
  384.         mov R2, #2
  385.         acall LcdDspBuf           ;顯示分
  386.         mov a,#3ah           ;顯示分隔符號
  387.         acall        LcdWrDat
  388.         mov R0, #DspBuf+11
  389.         mov R2, #2
  390.         acall LcdDspBuf    ;顯示秒
  391.         jb BJ,xyz           ;判斷鬧鐘功能是否開啟
  392.         mov a,#0c0h
  393.         acall LcdWrCmd
  394.         mov  a,#03h           ;顯示鬧鐘功能開啟標示符號
  395.         acall        LcdWrDat
  396. xyz:          ret
  397.         ret

  398. ;按鍵處理

  399. anjian:
  400.         mov a,pq
  401.         anl a,#0fh
  402.         cjne a,#0fh,kp1
  403.         ret
  404. kp1:         
  405.         mov a,#5                ;設置5ms延時,起到去抖掃描
  406.         acall delay
  407.         mov a,pq
  408.         anl a,#0fh
  409.         cjne a,#0fh,kp2
  410.         ret
  411. kp2:        
  412.         JB pq.0,KK1
  413.         jnb pq.0,$
  414.         lcall  anjian1
  415.         ret
  416. KK1:         
  417.         JB pq.1,KK2
  418.         jnb pq.1,$
  419.         lcall  anjian2
  420.         ret
  421. KK2:         
  422.         JB pq.2,KK3
  423.         jnb pq.2,$
  424.         lcall  anjian3
  425.         ret
  426. KK3:         
  427.         JB pq.3,KK4
  428.         jnb pq.3,$
  429.         lcall  anjian4
  430. KK4:        ret

  431. ;該子程序根據的KeyCode內容轉入各對應的操作程序中

  432. anjian1:
  433.         mov a,KeyCode
  434.         mov dptr,#tab5
  435.         add a,KeyCode
  436.         jnc nadd
  437.         inc dph                   ;KeyCode乘2進位加到DPH中
  438. nadd:      
  439.         mov r3,a           ;暫存
  440.         movc a,@a+dptr           ;取地址高八位
  441.         xch a,r3           ;保存轉移地址高8位
  442.         inc a
  443.         movc a,@a+dptr           ;取地址低八位
  444.         mov dpl,a           ;置轉移地址低8位
  445.         mov dph,r3
  446.         clr a
  447.         jmp @a+dptr
  448.         ret
  449. tab5:        dw  opr00,opr01,opr02 ,opr03 ;16位轉移地址表的首地址

  450. ;進入時間調整設置狀態

  451. opr00:
  452.         setb IsSheZhi
  453.         mov r1,#DspBuf+12   ;編輯時間從秒個位開始
  454.         mov a,#0fh
  455.         acall LcdWrCmd
  456.         mov a,#0c9h
  457.         acall LcdWrCmd
  458.         mov  KeyCode,#02h
  459.         ret

  460. ;進入設置鬧鐘時間狀態            

  461. opr01:
  462.         setb IsSheZhi
  463.         mov r1,#dspba+3     ;編輯時間從分個位開始
  464.         mov a,#0fh
  465.         acall LcdWrCmd
  466.         mov a,#0c6h
  467.         acall LcdWrCmd
  468.         mov  KeyCode,#03h
  469.         ret

  470. ;把所設置的時間作為當前時間        

  471. opr02:
  472.         mov a,DspBuf+11
  473.         swap  a
  474.         mov b,DspBuf+12
  475.         orl a,b
  476.         mov sec,a             ;存秒
  477.         mov a,DspBuf+9
  478.         swap  a
  479.         mov b,DspBuf+10
  480.         orl a,b
  481.         mov min,a             ;存分
  482.         mov a,DspBuf+7
  483.         swap  a
  484.         mov b,DspBuf+8
  485.         orl a,b
  486.         mov hour,a              ;存時
  487.         mov a,DspBuf+4
  488.         swap  a
  489.         mov b,DspBuf+5
  490.         orl a,b
  491.         mov day,a              ;存日期
  492.         mov week,DspBuf+4;    ;存星期值
  493.         mov a,DspBuf+2
  494.         swap  a
  495.         mov b,DspBuf+3
  496.         orl a,b
  497.         mov month,a              ;存月
  498.         mov a,DspBuf+0
  499.         swap  a
  500.         mov b,DspBuf+1
  501.         orl a,b
  502.         mov year,a              ;存年
  503.         lcall set1302              ;為當前時間
  504.         cpl IsSheZhi          ;退出設置狀態
  505.         mov a,#0ch            ;開啟 閃動
  506.         acall LcdWrCmd
  507.         mov  KeyCode,#00h
  508.         ret

  509. ;把所設置的時間作為鬧鐘時間      

  510. opr03:
  511.         mov a,#0c0h
  512.         acall LcdWrCmd
  513.         mov  a,#03h              ;顯示鬧鐘功能開啟標示符號
  514.         acall        LcdWrDat
  515.         mov a,#0ch              ;撤銷閃動
  516.         acall LcdWrCmd
  517.         clr IsSheZhi              ;退出設置狀態
  518.         mov  KeyCode,#00h
  519.         clr QH
  520.         clr BJ                      ;開啟鬧鐘功能
  521.         ret      
  522. anjian2:
  523.         mov a, KeyCode
  524.         clr c
  525.         subb a,#02h
  526.         jc ppr1              ;判斷鐘是否處于設置狀態,不是則跳
  527.         jb  QH, opr1a
  528.         mov a,r1
  529.         clr c
  530.         subb a,#5eh
  531.         mov dptr,#taba4
  532.         movc a,@a+dptr
  533.         mov b,a
  534.         inc @r1
  535.         mov a,@r1
  536.         cjne a,        b,ppra1
  537.         mov @r1,#0
  538. ppra1:
  539.         lcall www             ;掃描當前時間編輯位
  540.         ret
  541. taba4:        db 0ah,0ah,0ah,0ah,02h,0ah,04h,0ah,08h,03h,0ah,06h,0ah,06h,0ah;當前時間各編輯位極大值表
  542. opr1a:
  543.         mov a,r1
  544.         clr c
  545.         subb a,#70h
  546.         mov dptr,#taba6
  547.         movc a,@a+dptr
  548.         mov b,a
  549.         inc @r1
  550.         mov a,@r1
  551.         cjne a,b,ppra1k
  552.         mov @r1,#0
  553. ppra1k:
  554.         lcall wwwa          ;掃描鬧鐘時間編輯位
  555.         ret
  556. taba6 :        db 03h,0ah,06h,0ah  ;鬧鐘時間各編輯位極大值表
  557. ppr1:         cpl IsSheZhi
  558.         cpl QH              ;切換屏幕
  559.         jnb QH,TY
  560.         mov a,#01h          ;清屏幕
  561.         acall LcdWrCmd
  562.         mov  KeyCode,#01h   ;指明按鍵1下次執行的功能子程序
  563.         acall display_nz    ;顯示鬧鐘時間
  564.         ret
  565. TY:     mov  KeyCode,#00h   ;指明按鍵1下次執行的功能子程序
  566.         ret

  567. ;按鍵3處理設計      

  568. anjian3:
  569.         mov a, KeyCode
  570.         clr c
  571.         subb a,#02h
  572.         jc ajppr2           ;判斷鐘是否處于設置狀態,不是跳
  573.         jb  QH, opr2b       ;判斷鐘是否處于編輯鬧鐘時間狀態
  574.         dec r1                    ;移位
  575.         cjne r1,#DspBuf-3,ppr2a
  576.         mov r1,#DspBuf+12
  577. ppr2a:  
  578.         lcall www            ;掃描當前時間編輯位
  579.         ret
  580. opr2b:      
  581.         dec r1                    ;移位
  582.         cjne r1,#dspba-1,ppr2ak
  583.         mov r1,#dspba+3
  584. ppr2ak:
  585.         lcall wwwa            ;掃描鬧鐘時間編輯位
  586.         ret
  587. ajppr2:
  588.         mov a,#01h            ;清除屏幕
  589.         acall LcdWrCmd
  590.         cpl BJ
  591.         JB BJ,TY_1
  592.         ret
  593. TY_1:
  594.         clr tr0
  595.         setb pf
  596.         ret

  597. ;按鍵4處理設計      

  598. anjian4:
  599.         mov a, KeyCode
  600.         clr c
  601.         subb a,#02h
  602.         jc anjian4_1        ;判斷鐘是否處于設置狀態,否則跳
  603.         clr IsSheZhi
  604.         mov  KeyCode,#00h
  605.         mov a,#0ch            ;取消閃動
  606.         acall LcdWrCmd
  607.         ret
  608. anjian4_1:
  609.         mov a,#01h            ;清除屏幕
  610.         acall LcdWrCmd
  611.         cpl bs              ;控制報時功能
  612.         JB bs,TY_2
  613.         ret
  614. TY_2:
  615.         clr tr1
  616.         setb pf
  617.         ret

  618. ;掃描當前時間編輯位     

  619. www:
  620.         mov a,r1
  621.         clr c
  622.         subb a,#5eh
  623.         mov dptr,#tab4
  624.         movc a,@a+dptr
  625.         mov b,a                   ;暫存 閃動位置
  626.         acall LcdWrCmd      ;寫入編輯位的位置
  627.         mov a,#10                ;設置10ms延時
  628.         acall delay
  629.         mov a,@r1
  630.         orl a,#30h
  631.         acall LcdWrDat      ;寫入數據
  632.         mov a,b                    ;確定閃動位置
  633.         acall LcdWrCmd
  634.         ret

  635. ;掃描鬧鐘時間編輯位      

  636. wwwa:
  637.           mov a,r1
  638.         clr c
  639.         subb a,#70h
  640.         mov dptr,#tab6
  641.         movc a,@a+dptr
  642.         mov b,a             ;暫存 閃動位置
  643.         acall LcdWrCmd            ;寫入編輯位的位置
  644.         mov a,#10           ;設置10ms延時
  645.         acall delay
  646.         mov a,@r1
  647.         orl a,#30h
  648.         acall LcdWrDat      ;寫入數據
  649.         mov a,b                    ;確定閃動位置
  650.         acall LcdWrCmd
  651.         ret
  652. tab4:db 80h,81h,82h,83h,85h,86h,88h,89h,8eh,0c2h,0c3h,0c5h,0c6h,0c8h,0c9h
  653. ;當前時間各編輯位在LCD上的位置表
  654. tab6:db 0c2h,0c3h,0c5h,0c6h ;鬧鐘時間各編輯位在LCD上的位置表

  655. ;比較子程序            

  656. bijiao:
  657.         mov a, dspba+0
  658.         cjne a,DspBuf+7,bijiao_1 ;比較當前時間與鬧鐘時間的時十位
  659.         mov a, dspba+1
  660.         cjne a,DspBuf+8,bijiao_1 ;比較當前時間與鬧鐘時間的時個位
  661.         mov a, dspba+2
  662.         cjne a,DspBuf+9,bijiao_1 ;比較當前時間與鬧鐘時間的分鐘十位
  663.         mov a, dspba+3
  664.         cjne a,DspBuf+10,bijiao_1;比較當前時間與鬧鐘時間的分鐘個位
  665.         setb TR0
  666.         ret
  667. bijiao_1:
  668.         clr TR0
  669.         setb pf
  670.         clr  led
  671.         ret

  672. ; 整點報時子程序         

  673. zhengshi:
  674.         mov a,sec             ;判斷當前時間是否是整時,即能否報時
  675.         jnz js                 ;判斷是否位0秒
  676.         mov a,min
  677.         jnz js                  ;判斷是否位0分
  678.         mov a,DspBuf+7
  679.         mov b,#10
  680.         mul ab
  681.         add a,DspBuf+8         ;;BCD碼轉化位二進制
  682.         cjne a,#13,$+3         ;判斷時是否超過12小時
  683.         jc ss
  684.         clr c
  685.         subb a,#12
  686. ss:      
  687.         mov shengshu,a
  688.         cpl bs                 ;暫時關閉判斷整時
  689.         clr cxbs               ;開始報時
  690. js:        ret

  691. ;執行報時baoshi        

  692. baoshi:                 ;執行報時功能
  693.         mov a,chuzhi
  694.         cjne a,sec,ltt
  695.         setb tr1
  696.         mov a,chuzhi
  697.         add a,#01h      
  698.         da a
  699.         mov chuzhi,a
  700.         djnz shengshu,ltt
  701.         cpl bs
  702.         setb cxbs
  703.         mov chuzhi,#00h
  704. ltt:          ret

  705. ;蜂鳴器響功能設置     

  706. sub1:
  707.         cpl pf
  708.         reti
  709. sub2:
  710.         mov th1,#0f8h          ;設置報時聲的音色
  711.         cpl pf
  712.         djnz jiepai,sub2_1
  713.         mov jiepai,#80h    ;設置節拍常數
  714.         clr tr1
  715. sub2_1: reti
  716.         end


復制代碼


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

使用道具 舉報

沙發
ID:161164 發表于 2023-6-26 16:59 | 只看該作者
蜂鳴器和lcdrw共用了P2.5
而且蜂鳴器會在中斷里取反
于是有機會LCD在讀寫數據時
lcdrw被取反了

評分

參與人數 1黑幣 +8 收起 理由
木木老大 + 8 很給力!

查看全部評分

回復

使用道具 舉報

板凳
ID:123289 發表于 2023-6-26 17:17 | 只看該作者
1、弄清楚LCD顯示原理(點的位置,顯示命令)。
2、字庫與LCD中顯示點的對應關系。
3、走單步調試。
回復

使用道具 舉報

地板
ID:1085721 發表于 2023-6-26 22:47 | 只看該作者
lkc8210 發表于 2023-6-26 16:59
蜂鳴器和lcdrw共用了P2.5
而且蜂鳴器會在中斷里取反
于是有機會LCD在讀寫數據時

太有道理了!
可是我這個似乎還有問題,
我按照您這個把蜂鳴器的口改過之后(原來那個口我看的串了,確實是錯的。,還是有問號
想請問您還有沒有什么建議,求指導
回復

使用道具 舉報

5#
ID:384109 發表于 2023-6-26 22:53 | 只看該作者
1302沒有能正常運行,或者讀取1302錯誤
回復

使用道具 舉報

6#
ID:1085721 發表于 2023-6-27 09:54 | 只看該作者
人中狼 發表于 2023-6-26 22:53
1302沒有能正常運行,或者讀取1302錯誤

我后來用這個程序去仿真,發現它可以正常運行,和預期的一樣
回復

使用道具 舉報

7#
ID:1085721 發表于 2023-6-27 10:29 | 只看該作者
現在程序在每次讀字符的時候都加了nop,給1602加了檢測它是否繁忙的程序,任然是仿真沒有問題,硬件有問題
回復

使用道具 舉報

8#
ID:1085721 發表于 2023-6-27 10:30 | 只看該作者
yzwzfyz 發表于 2023-6-26 17:17
1、弄清楚LCD顯示原理(點的位置,顯示命令)。
2、字庫與LCD中顯示點的對應關系。
3、走單步調試。

我的仿真沒有問題,但是硬件顯示不來
回復

使用道具 舉報

9#
ID:1085721 發表于 2023-6-27 10:35 | 只看該作者
大家:現在我的程序把初始化的數字改成其他數字時,出現問號亂碼的位置也變了
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91素人 | 久久精品国产清自在天天线 | 亚洲网站在线观看 | 一区二区三区久久 | 中文在线观看视频 | 国产96色在线 | cao视频 | 久久91 | 久久99精品久久久97夜夜嗨 | 亚洲国产精品久久人人爱 | 久久久久久久国产精品 | 久久久久久久一区二区三区 | 国产精品伦一区二区三级视频 | 丁香综合 | 天天综合网天天综合色 | 久久成人综合 | 亚洲一区二区三区在线免费观看 | 日韩国产精品一区二区三区 | 波波电影院一区二区三区 | 亚洲成人免费观看 | 男女网站在线观看 | 免费一级黄色 | 亚洲精品久 | 中文字幕一区在线观看视频 | 国产97碰免费视频 | 亚洲欧洲日韩精品 中文字幕 | 亚洲欧美日韩在线不卡 | 欧美视频免费在线 | 午夜视频一区 | 日本精品视频 | 先锋资源吧 | 久久久久久九九九九九九 | 国产综合久久久久久鬼色 | 欧美精品在线播放 | 日本亚洲一区二区 | 国产成人精品999在线观看 | 国产超碰人人爽人人做人人爱 | 91在线色视频 | 亚洲一区二区三区免费观看 | 国产精品免费视频一区 | 成人在线视频网 |