⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 text2.lst

📁 1602液晶时钟显示,51单片机和三个键盘扩展电路
💻 LST
📖 第 1 页 / 共 2 页
字号:
                     145     ;时,分,秒的初始化
                     146     ;==========================================================================================
                             ==========
00FB 753300          147     INTT:   MOV SEC,#0;  变量初始化
00FE 753200          148             MOV MIN,#0
0101 75310C          149             MOV HOUR,#12
0104 22              150             RET
                     151     ;==========================================================================================
                             ==========
                     152     ;K2小时加一,K3分钟加一,K4为正常走时
                     153     ;===================================================================================
0105                 154     SET_TIME:      ;     设置时间;K1键设置时间
0105 C28C            155             CLR TR0
0107 753300          156             MOV SEC,#0
010A 20A521          157     S0:     JB K2,S1 ;   K2键加时
010D 30A5FD          158             JNB K2,$
0110 0531            159             INC HOUR
0112 E531            160             MOV A,HOUR
0114 B41803          161             CJNE A,#24,S11
0117 753100          162             MOV HOUR,#0
011A 120246          163     S11:    LCALL BUSY  ;检查忙
011D 758001          164             mov p0,#01h ;清除屏幕,这条指令是能否显示的关键
0120 120080          165             lcall ENABLE;写入指令
0123 315F            166             CALL CONV  ;时钟显示
0125 7D19            167             MOV R5,#25  
0127 1200B6          168     S111:   LCALL DELAY
012A DDFB            169             DJNZ R5,S111 
012C 80DC            170             JMP S0
A51 MACRO ASSEMBLER  TEXT2                                                                12/26/2008 21:32:05 PAGE     4

012E 20A622          171     S1:     JB K3,S2 ;   K3键加分
0131 30A6FD          172             JNB K3,$
0134 0532            173             INC MIN
0136 E532            174             MOV A,MIN
0138 B43C03          175             CJNE A,#60,S21
013B 753200          176             MOV MIN,#0
013E 120246          177     S21:    LCALL BUSY
0141 758001          178             mov p0,#01h ;清除屏幕,这条指令是能否显示的关键
0144 120080          179             lcall ENABLE;写入指令
0147 12015F          180             LCALL CONV
014A 7D14            181             MOV R5,#20
014C 1200B6          182     S211:   LCALL DELAY
014F DDFB            183             DJNZ R5,S211 
0151 80B7            184             JMP S0
0153 20A7B4          185     S2:     JB K4,S0;   K4恢复走时
0156 30A7FD          186             JNB K4,$
0159 1200ED          187             LCALL LED_BL
015C D28C            188             SETB TR0
015E 22              189             RET
                     190     ;=======================================================================================
                     191     ;时钟的液晶显示
                     192     ;=========================================================================================
015F E531            193     CONV:   MOV A,HOUR ; 时钟显示
0161 753505          194             MOV X,#5
0164 12018A          195             LCALL SHOW_DIG2; 转化为字符并显示
0167 0535            196             INC X
0169 743A            197             MOV A,#":"
016B 8535F0          198             MOV B,X
016E 1201A7          199             LCALL LCDP2   ;显示地址程序
0171 E532            200             MOV A,MIN
0173 0535            201             INC X
0175 12018A          202             LCALL SHOW_DIG2
                     203             ;INC X
                     204             ;LCALL SHOW_DIG2
0178 0535            205             INC X
017A 743A            206             MOV A,#":"
017C 8535F0          207             MOV B,X
017F 1201A7          208             LCALL LCDP2
0182 E533            209             MOV A,SEC
0184 0535            210             INC X
0186 12018A          211             LCALL SHOW_DIG2
0189 22              212             RET
018A 75F00A          213     SHOW_DIG2:MOV B,#10 
018D 84              214              DIV AB     ;A为时位,B为个位
018E 2430            215              ADD A,#30H;  转换为字符
0190 C0F0            216              PUSH B  ;   保护B的数据
0192 8535F0          217              MOV B,X
0195 1201A7          218              LCALL LCDP2;  确定A的显示地址
0198 D0F0            219              POP B
019A E5F0            220              MOV A,B
019C 2430            221              ADD A,#30H
019E 0535            222              INC X
01A0 8535F0          223              MOV B,X
01A3 1201A7          224              LCALL LCDP2
01A6 22              225              RET
                     226     ;===================================================================================
                     227     ;ADD A,#0C0H 应该在液晶的第二行首地址,可显示时却在第一行??????????
                     228     ;========================================================================================
01A7 C0E0            229     LCDP2:   PUSH ACC; 保护A的数据
01A9 E5F0            230              MOV A,B 
01AB 24C0            231              ADD A,#0C0H ;第二行的首地址
01AD 1201B6          232              LCALL WCOM; 写入指令
01B0 D0E0            233              POP ACC 
01B2 1201C1          234              LCALL WDATA ;写入数据
01B5 22              235              RET
01B6 C2A0            236      WCOM:   CLR RS ;送命令 写入指令
A51 MACRO ASSEMBLER  TEXT2                                                                12/26/2008 21:32:05 PAGE     5

01B8 C2A1            237              CLR RW ;写入数据
01BA C2A2            238              CLR E ;写入数据
01BC 11B6            239              CALL DELAY;2.5MS
01BE D2A2            240              SETB E ;写入地址
01C0 22              241              RET
01C1 F580            242     WDATA:  MOV p0,A ;显示 写入数据显示
01C3 D2A0            243             SETB RS ;写入数据
01C5 C2A1            244             CLR RW  ;写入数据
01C7 C2A2            245             CLR E   ;写入数据
                     246             ;rlc A
01C9 33              247              RLC A
01CA 33              248              RLC A
01CB 33              249              RLC A
01CC 33              250              RLC A
01CD F580            251              MOV P0,A
01CF D2A0            252              SETB RS ;写入数据
01D1 11B6            253              CALL DELAY ;短延时;2.5MS
01D3 C2A2            254              CLR E  ;写入数据
01D5 22              255              RET
                     256     ;==========================================================================================
                             ==========  
01D6 7E05            257     DE:     MOV R6,#5
01D8 DEFE            258             DJNZ R6,$
01DA 22              259             RET
01DB D2A2            260     EN1:    SETB E
01DD 1201D6          261             LCALL DE
01E0 C2A2            262             CLR E
01E2 1201D6          263             LCALL DE
01E5 22              264             RET
                     265     ;==========================================================================================
                             ============ 
                     266     ;TO工作方式0 ,10MS定时 便于键盘扫描
                     267     ;==========================================================================================
                             =
01E6 758901          268     INTT_TIME:MOV TMOD,#01H ; TO的定时方式一
01E9 75A882          269               MOV IE,#10000010B
01EC 758CD8          270               MOV TH0,#0D8H;延时10MS;10MS便于键盘扫描
01EF 758AF0          271               MOV TL0,#0F0H
01F2 D28C            272               SETB TR0
01F4 22              273               RET
                     274      ;=========================================================================================
                             ===========
                     275     ;如何定时来解决液晶闪烁的问题呢?????
                     276     ;======================================================================================= 
01F5 C0E0            277     INTT0:    PUSH ACC
01F7 758CD8          278               MOV TH0,#0D8H
01FA 758AF0          279               MOV TL0,#0F0H
01FD 0540            280               INC 40H
01FF E540            281               MOV A,40H
0201 B40A29          282               CJNE A,#10,TT;定时100MS;CJNE A,#100,TT;这里的1S又该怎么设置?????
0204 754000          283               MOV 40H,#0
0207 B2B7            284               CPL WLED
0209 0533            285               INC SEC
020B E533            286               MOV A,SEC
020D B43C1D          287               CJNE A,#60,TT
0210 0532            288               INC MIN
0212 753300          289               MOV SEC,#0
0215 E532            290               MOV A,MIN
0217 B43C13          291               CJNE A,#60,TT
021A 0531            292               INC HOUR 
021C 753200          293               MOV MIN,#0
021F E531            294               MOV A,HOUR
0221 B41809          295               CJNE A,#24,TT
0224 753300          296               MOV SEC,#0
0227 753200          297               MOV MIN,#0
022A 753100          298               MOV HOUR,#0
A51 MACRO ASSEMBLER  TEXT2                                                                12/26/2008 21:32:05 PAGE     6

022D                 299     TT:       ;MOV P0,#01H;
                     300               ;LCALL ENABLE;
                     301               ;MOV p0,#06H ;+1;AC地址计数器自动加一
                     302               ;CALL ENABLE
022D 120056          303               LCALL LOP  ;键盘扫描;当无键按下时
0230 120246          304               LCALL BUSY ; 检查忙
0233 758001          305               mov p0,#01h;清除屏幕,这条指令是能否显示的关键
0236 120080          306               lcall ENABLE;写入指令
0239 12015F          307               LCALL CONV; 显示输出;5MS;这里的5MS是否为影响1S定时的呢 与 键盘的扫描时间????

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -