📄 2.lis
字号:
0080 B801 movw R22,R16
0082 .dbline -1
0082 .dbline 71
0082 ; }
0082 ; /**********************************************/
0082 ; /* 写汉字初始化 */
0082 ; /**********************************************/
0082 ; void write_hazi(unsigned xx,unsigned yy,unsigned data1,unsigned data2)
0082 ; {
0082 .dbline 72
0082 ; ocmj_write(0xf0);
0082 00EF ldi R16,240
0084 DDDF xcall _ocmj_write
0086 .dbline 73
0086 ; ocmj_write(xx);
0086 062F mov R16,R22
0088 DBDF xcall _ocmj_write
008A .dbline 74
008A ; ocmj_write(yy);
008A 042F mov R16,R20
008C D9DF xcall _ocmj_write
008E .dbline 75
008E ; ocmj_write(data1);
008E 0C81 ldd R16,y+4
0090 1D81 ldd R17,y+5
0092 D6DF xcall _ocmj_write
0094 .dbline 76
0094 ; ocmj_write(data2);
0094 0E81 ldd R16,y+6
0096 1F81 ldd R17,y+7
0098 D3DF xcall _ocmj_write
009A .dbline -2
009A L15:
009A 0E940000 xcall pop_gset2
009E .dbline 0 ; func end
009E 0895 ret
00A0 .dbsym l data2 6 i
00A0 .dbsym l data1 4 i
00A0 .dbsym r yy 20 i
00A0 .dbsym r xx 22 i
00A0 .dbend
00A0 .dbfunc e scan_key _scan_key fc
00A0 ; i -> R22
00A0 ; temp -> R10
.even
00A0 _scan_key::
00A0 0E940000 xcall push_gset3
00A4 .dbline -1
00A4 .dbline 82
00A4 ; }
00A4 ; /**********************************************/
00A4 ; /* 键盘子程序 */
00A4 ; /**********************************************/
00A4 ; unsigned char scan_key(void)
00A4 ; {
00A4 .dbline 84
00A4 ; unsigned char i,temp;
00A4 ; DDRB=0x0f;
00A4 8FE0 ldi R24,15
00A6 87BB out 0x17,R24
00A8 .dbline 85
00A8 ; PORTB=0xff;
00A8 8FEF ldi R24,255
00AA 88BB out 0x18,R24
00AC .dbline 86
00AC ; for(i=0;i<4;i++)
00AC 6627 clr R22
00AE 5AC0 xjmp L20
00B0 L17:
00B0 .dbline 87
00B0 ; {
00B0 .dbline 88
00B0 ; PORTB=~(1<<i); //键盘线扫描
00B0 01E0 ldi R16,1
00B2 162F mov R17,R22
00B4 0E940000 xcall lsl8
00B8 202E mov R2,R16
00BA 2094 com R2
00BC 28BA out 0x18,R2
00BE .dbline 89
00BE ; delay(30); //等待低电平稳定
00BE 0EE1 ldi R16,30
00C0 10E0 ldi R17,0
00C2 9EDF xcall _delay
00C4 .dbline 90
00C4 ; temp=PINB&0xf0;//读取键盘扫描信号,屏蔽低四位
00C4 86B3 in R24,0x16
00C6 807F andi R24,240
00C8 A82E mov R10,R24
00CA .dbline 91
00CA ; if (temp!=0xf0)//如果有键按下,延时10ms消抖
00CA 803F cpi R24,240
00CC 09F4 brne X1
00CE 49C0 xjmp L21
00D0 X1:
00D0 .dbline 92
00D0 ; { //本程序用display代替10ms延时,
00D0 .dbline 93
00D0 ; delay(3000); //可消除显示抖动
00D0 08EB ldi R16,3000
00D2 1BE0 ldi R17,11
00D4 95DF xcall _delay
00D6 .dbline 94
00D6 ; temp=PINB&0xf0;//再读键盘
00D6 86B3 in R24,0x16
00D8 807F andi R24,240
00DA A82E mov R10,R24
00DC .dbline 95
00DC ; if (temp!=0xf0)
00DC 803F cpi R24,240
00DE 09F4 brne X2
00E0 40C0 xjmp L23
00E2 X2:
00E2 .dbline 96
00E2 ; {
00E2 .dbline 97
00E2 ; temp&=0xf0;
00E2 807F andi R24,240
00E4 A82E mov R10,R24
00E6 .dbline 98
00E6 ; switch(temp) //计算键值
00E6 482F mov R20,R24
00E8 5527 clr R21
00EA 403B cpi R20,176
00EC E0E0 ldi R30,0
00EE 5E07 cpc R21,R30
00F0 F9F0 breq L29
00F2 80EB ldi R24,176
00F4 90E0 ldi R25,0
00F6 8417 cp R24,R20
00F8 9507 cpc R25,R21
00FA 2CF0 brlt L33
00FC L32:
00FC 4037 cpi R20,112
00FE E0E0 ldi R30,0
0100 5E07 cpc R21,R30
0102 71F0 breq L28
0104 2CC0 xjmp L26
0106 L33:
0106 403D cpi R20,208
0108 E0E0 ldi R30,0
010A 5E07 cpc R21,R30
010C C9F0 breq L30
010E 403D cpi R20,208
0110 E0E0 ldi R30,0
0112 5E07 cpc R21,R30
0114 24F1 brlt L26
0116 L34:
0116 403E cpi R20,224
0118 E0E0 ldi R30,0
011A 5E07 cpc R21,R30
011C C9F0 breq L31
011E 1FC0 xjmp L26
0120 X0:
0120 .dbline 99
0120 ; {
0120 L28:
0120 .dbline 100
0120 ; case 0x70:temp=15-(3-i)*4;break;
0120 13E0 ldi R17,3
0122 161B sub R17,R22
0124 04E0 ldi R16,4
0126 0102 muls R16,R17
0128 8FE0 ldi R24,15
012A A82E mov R10,R24
012C A018 sub R10,R0
012E .dbline 100
012E 17C0 xjmp L26
0130 L29:
0130 .dbline 101
0130 ; case 0xb0:temp=14-(3-i)*4;break;
0130 13E0 ldi R17,3
0132 161B sub R17,R22
0134 04E0 ldi R16,4
0136 0102 muls R16,R17
0138 8EE0 ldi R24,14
013A A82E mov R10,R24
013C A018 sub R10,R0
013E .dbline 101
013E 0FC0 xjmp L26
0140 L30:
0140 .dbline 102
0140 ; case 0xd0:temp=13-(3-i)*4;break;
0140 13E0 ldi R17,3
0142 161B sub R17,R22
0144 04E0 ldi R16,4
0146 0102 muls R16,R17
0148 8DE0 ldi R24,13
014A A82E mov R10,R24
014C A018 sub R10,R0
014E .dbline 102
014E 07C0 xjmp L26
0150 L31:
0150 .dbline 103
0150 ; case 0xe0:temp=12-(3-i)*4;break;
0150 13E0 ldi R17,3
0152 161B sub R17,R22
0154 04E0 ldi R16,4
0156 0102 muls R16,R17
0158 8CE0 ldi R24,12
015A A82E mov R10,R24
015C A018 sub R10,R0
015E .dbline 103
015E .dbline 104
015E ; default:break;
015E L26:
015E .dbline 106
015E ; }
015E ; return temp;
015E 0A2D mov R16,R10
0160 05C0 xjmp L16
0162 L23:
0162 .dbline 108
0162 ; }
0162 ; }
0162 L21:
0162 .dbline 109
0162 L18:
0162 .dbline 86
0162 6395 inc R22
0164 L20:
0164 .dbline 86
0164 6430 cpi R22,4
0166 08F4 brsh X3
0168 A3CF xjmp L17
016A X3:
016A .dbline 110
016A ; }
016A ; return 0x00;//无键按下
016A 0027 clr R16
016C .dbline -2
016C L16:
016C 0E940000 xcall pop_gset3
0170 .dbline 0 ; func end
0170 0895 ret
0172 .dbsym r i 22 c
0172 .dbsym r temp 10 c
0172 .dbend
0172 .dbfunc e time_display _time_display fV
.even
0172 _time_display::
0172 2497 sbiw R28,4
0174 .dbline -1
0174 .dbline 116
0174 ; }
0174 ; /**********************************************/
0174 ; /* LCD显示小时分钟秒*/
0174 ; /**********************************************/
0174 ; void time_display(void)
0174 ; {
0174 .dbline 117
0174 ; write_ASCII(0xf9,4,0,table[hour/10]);//小时高位
0174 2AE0 ldi R18,10
0176 30E0 ldi R19,0
0178 00910200 lds R16,_hour
017C 1127 clr R17
017E 0E940000 xcall div16s
0182 F801 movw R30,R16
0184 80E0 ldi R24,<_table
0186 90E0 ldi R25,>_table
0188 E80F add R30,R24
018A F91F adc R31,R25
018C 2490 lpm R2,Z
018E 3324 clr R3
0190 3B82 std y+3,R3
0192 2A82 std y+2,R2
0194 2224 clr R2
0196 3982 std y+1,R3
0198 2882 std y+0,R2
019A 24E0 ldi R18,4
019C 30E0 ldi R19,0
019E 09EF ldi R16,249
01A0 10E0 ldi R17,0
01A2 5ADF xcall _write_ASCII
01A4 .dbline 118
01A4 ; write_ASCII(0xf9,5,0,table[hour%10]);//小时地位
01A4 2AE0 ldi R18,10
01A6 30E0 ldi R19,0
01A8 00910200 lds R16,_hour
01AC 1127 clr R17
01AE 0E940000 xcall mod16s
01B2 F801 movw R30,R16
01B4 80E0 ldi R24,<_table
01B6 90E0 ldi R25,>_table
01B8 E80F add R30,R24
01BA F91F adc R31,R25
01BC 2490 lpm R2,Z
01BE 3324 clr R3
01C0 3B82 std y+3,R3
01C2 2A82 std y+2,R2
01C4 2224 clr R2
01C6 3982 std y+1,R3
01C8 2882 std y+0,R2
01CA 25E0 ldi R18,5
01CC 30E0 ldi R19,0
01CE 09EF ldi R16,249
01D0 10E0 ldi R17,0
01D2 42DF xcall _write_ASCII
01D4 .dbline 119
01D4 ; write_ASCII(0xf9,6,0,58); //:
01D4 8AE3 ldi R24,58
01D6 90E0 ldi R25,0
01D8 9B83 std y+3,R25
01DA 8A83 std y+2,R24
01DC 2224 clr R2
01DE 3324 clr R3
01E0 3982 std y+1,R3
01E2 2882 std y+0,R2
01E4 26E0 ldi R18,6
01E6 30E0 ldi R19,0
01E8 09EF ldi R16,249
01EA 10E0 ldi R17,0
01EC 35DF xcall _write_ASCII
01EE .dbline 120
01EE ; write_ASCII(0xf9,7,0,table[minute/10]);//分钟高位
01EE 2AE0 ldi R18,10
01F0 30E0 ldi R19,0
01F2 00910100 lds R16,_minute
01F6 1127 clr R17
01F8 0E940000 xcall div16s
01FC F801 movw R30,R16
01FE 80E0 ldi R24,<_table
0200 90E0 ldi R25,>_table
0202 E80F add R30,R24
0204 F91F adc R31,R25
0206 2490 lpm R2,Z
0208 3324 clr R3
020A 3B82 std y+3,R3
020C 2A82 std y+2,R2
020E 2224 clr R2
0210 3982 std y+1,R3
0212 2882 std y+0,R2
0214 27E0 ldi R18,7
0216 30E0 ldi R19,0
0218 09EF ldi R16,249
021A 10E0 ldi R17,0
021C 1DDF xcall _write_ASCII
021E .dbline 121
021E ; write_ASCII(0xf9,8,0,table[minute%10]);//分钟地位
021E 2AE0 ldi R18,10
0220 30E0 ldi R19,0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -