📄 clock.lst
字号:
00FD E01A LDI R17,0xA
00FE 91000066 LDS R16,_time+2
0100 D1CB RCALL div8s
0101 2F10 MOV R17,R16
0102 E00A LDI R16,0xA
0103 D1BA RCALL mpy8s
0104 2E20 MOV R2,R16
0105 0E24 ADD R2,R20
0106 92200066 STS R2,_time+2
(0111) }
(0112) }
(0113) break;
0108 C05D RJMP 0x0166
(0114) }
(0115) case 4:{
(0116) if(key<6)
0109 3046 CPI R20,6
010A F008 BCS 0x010C
010B C05A RJMP 0x0166
(0117) {
(0118) write279(0xc8+i,key);
010C 2F24 MOV R18,R20
010D 2D0A MOV R16,R10
010E 5308 SUBI R16,0x38
010F DF61 RCALL _write279
(0119) i--;
0110 94AA DEC R10
(0120) write279(0x88,0xf7);
0111 EF27 LDI R18,0xF7
0112 E808 LDI R16,0x88
0113 DF5D RCALL _write279
(0121) time.minute=time.minute%10+key*10;
0114 E00A LDI R16,0xA
0115 2F14 MOV R17,R20
0116 D1A7 RCALL mpy8s
0117 2E20 MOV R2,R16
0118 E01A LDI R17,0xA
0119 91000065 LDS R16,_time+1
011B D1AE RCALL mod8s
011C 2E30 MOV R3,R16
011D 0C32 ADD R3,R2
011E 92300065 STS R3,_time+1
(0122) }
(0123) break;
0120 C045 RJMP 0x0166
(0124) }
(0125) case 3:{
(0126) if(key<10)
0121 304A CPI R20,0xA
0122 F008 BCS 0x0124
0123 C042 RJMP 0x0166
(0127) {
(0128) write279(0xc8+i,key);
0124 2F24 MOV R18,R20
0125 2D0A MOV R16,R10
0126 5308 SUBI R16,0x38
0127 DF49 RCALL _write279
(0129) i--;
0128 94AA DEC R10
(0130) i--;
0129 94AA DEC R10
(0131) write279(0x88,0xfd);
012A EF2D LDI R18,0xFD
012B E808 LDI R16,0x88
012C DF44 RCALL _write279
(0132) time.minute=(time.minute/10)*10+key;
012D E01A LDI R17,0xA
012E 91000065 LDS R16,_time+1
0130 D19B RCALL div8s
0131 2F10 MOV R17,R16
0132 E00A LDI R16,0xA
0133 D18A RCALL mpy8s
0134 2E20 MOV R2,R16
0135 0E24 ADD R2,R20
0136 92200065 STS R2,_time+1
(0133) }
(0134) break;
0138 C02D RJMP 0x0166
(0135) }
(0136) case 1:{
(0137) if(key<6)
0139 3046 CPI R20,6
013A F558 BCC 0x0166
(0138) {
(0139) write279(0xc8+i,key);
013B 2F24 MOV R18,R20
013C 2D0A MOV R16,R10
013D 5308 SUBI R16,0x38
013E DF32 RCALL _write279
(0140) i--;
013F 94AA DEC R10
(0141) write279(0x88,0xfe);
0140 EF2E LDI R18,0xFE
0141 E808 LDI R16,0x88
0142 DF2E RCALL _write279
(0142) time.second=time.second%10+key*10;
0143 E00A LDI R16,0xA
0144 2F14 MOV R17,R20
0145 D178 RCALL mpy8s
0146 2E20 MOV R2,R16
0147 E01A LDI R17,0xA
0148 91000064 LDS R16,_time
014A D17F RCALL mod8s
014B 2E30 MOV R3,R16
014C 0C32 ADD R3,R2
014D 92300064 STS R3,_time
(0143) }
(0144) break;
014F C016 RJMP 0x0166
(0145) }
(0146) case 0:{
(0147) if(key<10)
0150 304A CPI R20,0xA
0151 F4A0 BCC 0x0166
(0148) {
(0149) write279(0xc8+i,key);
0152 2F24 MOV R18,R20
0153 2D0A MOV R16,R10
0154 5308 SUBI R16,0x38
0155 DF1B RCALL _write279
(0150) i=7;
0156 E087 LDI R24,7
0157 2EA8 MOV R10,R24
(0151) write279(0x88,0x7f);
0158 E72F LDI R18,0x7F
0159 E808 LDI R16,0x88
015A DF16 RCALL _write279
(0152) time.second=(time.second/10)*10+key;
015B E01A LDI R17,0xA
015C 91000064 LDS R16,_time
015E D16D RCALL div8s
015F 2F10 MOV R17,R16
0160 E00A LDI R16,0xA
0161 D15C RCALL mpy8s
0162 2E20 MOV R2,R16
0163 0E24 ADD R2,R20
0164 92200064 STS R2,_time
(0153) }
(0154) break;
(0155) }
(0156) }
(0157) while((PINC&0x02)==0)//按键释放检查
(0158) ;
0166 9B99 SBIS P13,1
0167 CFFE RJMP 0x0166
(0159) }
(0160) while(key!=0x17);
0168 3147 CPI R20,0x17
0169 F009 BEQ 0x016B
016A CF2F RJMP 0x009A
(0161) write279(0x88,0xff);
016B EF2F LDI R18,0xFF
016C E808 LDI R16,0x88
016D DF03 RCALL _write279
(0162) }
016E D1A1 RCALL pop_gset5
016F 9508 RET
(0163) /* 设置定时器1及中断系统 */
(0164) void opentime()
(0165) {
(0166)
(0167) TCNT1=0x85ee;
_opentime:
0170 D1AF RCALL <created procedures>
(0168) TCCR1A=0;
0171 2422 CLR R2
0172 BC2F OUT P2F,R2
(0169) TCCR1B=0x04;
0173 E084 LDI R24,4
0174 BD8E OUT P2E,R24
(0170) TCNT0=0x83;
0175 E883 LDI R24,0x83
0176 BF82 OUT P32,R24
(0171) TCCR0=0x03;
0177 E083 LDI R24,3
0178 BF83 OUT P33,R24
(0172) TIMSK=0x80;
0179 E880 LDI R24,0x80
017A BF89 OUT P39,R24
(0173) SREG|=0x80;
017B 9478 BSET 7
(0174) }
017C 9508 RET
(0175) /* 显示刷新 */
(0176) void display(void)
(0177) {
(0178) write279(0xc8,time.second%10);
_display:
017D E01A LDI R17,0xA
017E 91000064 LDS R16,_time
0180 D149 RCALL mod8s
0181 2F20 MOV R18,R16
0182 EC08 LDI R16,0xC8
0183 DEED RCALL _write279
(0179) write279(0xc9,time.second/10);
0184 E01A LDI R17,0xA
0185 91000064 LDS R16,_time
0187 D144 RCALL div8s
0188 2F20 MOV R18,R16
0189 EC09 LDI R16,0xC9
018A DEE6 RCALL _write279
(0180) write279(0x92,1);
018B E021 LDI R18,1
018C E902 LDI R16,0x92
018D DEE3 RCALL _write279
(0181) write279(0xcb,time.minute%10);
018E E01A LDI R17,0xA
018F 91000065 LDS R16,_time+1
0191 D138 RCALL mod8s
0192 2F20 MOV R18,R16
0193 EC0B LDI R16,0xCB
0194 DEDC RCALL _write279
(0182) write279(0xcc,time.minute/10);
0195 E01A LDI R17,0xA
0196 91000065 LDS R16,_time+1
0198 D133 RCALL div8s
0199 2F20 MOV R18,R16
019A EC0C LDI R16,0xCC
019B DED5 RCALL _write279
(0183) write279(0x95,1);
019C E021 LDI R18,1
019D E905 LDI R16,0x95
019E DED2 RCALL _write279
(0184) write279(0xce,time.hour%10);
019F E01A LDI R17,0xA
01A0 91000066 LDS R16,_time+2
01A2 D127 RCALL mod8s
01A3 2F20 MOV R18,R16
01A4 EC0E LDI R16,0xCE
01A5 DECB RCALL _write279
(0185) write279(0xcf,time.hour/10);
01A6 E01A LDI R17,0xA
01A7 91000066 LDS R16,_time+2
01A9 D122 RCALL div8s
01AA 2F20 MOV R18,R16
01AB EC0F LDI R16,0xCF
01AC DEC4 RCALL _write279
(0186) }
01AD 9508 RET
(0187) /* 正计时 */
(0188) void inctime(void)
(0189) {
(0190) if(time.second<59)
_inctime:
01AE 91800064 LDS R24,_time
01B0 338B CPI R24,0x3B
01B1 F434 BGE 0x01B8
(0191) time.second++;
01B2 91800064 LDS R24,_time
01B4 5F8F SUBI R24,0xFF
01B5 93800064 STS R24,_time
01B7 C01D RJMP 0x01D5
(0192) else
(0193) {
(0194) time.second=0;
01B8 2422 CLR R2
01B9 92200064 STS R2,_time
(0195) if(time.minute<59)
01BB 91800065 LDS R24,_time+1
01BD 338B CPI R24,0x3B
01BE F434 BGE 0x01C5
(0196) time.minute++;
01BF 91800065 LDS R24,_time+1
01C1 5F8F SUBI R24,0xFF
01C2 93800065 STS R24,_time+1
01C4 C010 RJMP 0x01D5
(0197) else
(0198) {
(0199) time.minute=0;
01C5 2422 CLR R2
01C6 92200065 STS R2,_time+1
(0200) if(time.hour<23)
01C8 91800066 LDS R24,_time+2
01CA 3187 CPI R24,0x17
01CB F434 BGE 0x01D2
(0201) time.hour++;
01CC 91800066 LDS R24,_time+2
01CE 5F8F SUBI R24,0xFF
01CF 93800066 STS R24,_time+2
01D1 C003 RJMP 0x01D5
(0202) else
(0203) time.hour=0;
01D2 2422 CLR R2
01D3 92200066 STS R2,_time+2
(0204) }
(0205) }
(0206) }
01D5 9508 RET
(0207) /* 倒计时 */
(0208) void dectime(void)
(0209) {
(0210) if(time.second>0)
_dectime:
01D6 2422 CLR R2
01D7 90300064 LDS R3,_time
01D9 1423 CP R2,R3
01DA F434 BGE 0x01E1
(0211) time.second--;
01DB 91800064 LDS R24,_time
01DD 5081 SUBI R24,1
01DE 93800064 STS R24,_time
01E0 C01F RJMP 0x0200
(0212) else
(0213) {
(0214) time.second=59;
01E1 E38B LDI R24,0x3B
01E2 93800064 STS R24,_time
(0215) if(time.minute>0)
01E4 2422 CLR R2
01E5 90300065 LDS R3,_time+1
01E7 1423 CP R2,R3
01E8 F434 BGE 0x01EF
(0216) time.minute--;
01E9 91800065 LDS R24,_time+1
01EB 5081 SUBI R24,1
01EC 93800065 STS R24,_time+1
01EE C011 RJMP 0x0200
(0217) else
(0218) {
(0219) time.minute=59;
01EF E38B LDI R24,0x3B
01F0 93800065 STS R24,_time+1
(0220) if(time.hour>0)
01F2 2422 CLR R2
01F3 90300066 LDS R3,_time+2
01F5 1423 CP R2,R3
01F6 F434 BGE 0x01FD
(0221) time.hour--;
01F7 91800066 LDS R24,_time+2
01F9 5081 SUBI R24,1
01FA 93800066 STS R24,_time+2
01FC C003 RJMP 0x0200
(0222) else
(0223) time.hour=23;
01FD E187 LDI R24,0x17
01FE 93800066 STS R24,_time+2
(0224) }
(0225) }
(0226) }
0200 9508 RET
(0227) /*启动时为正计时,按shift键进行正计时和倒计时切换 */
(0228) /*启动时允许整点报时,按0~F中任意键一次关闭,二次打开*/
(0229) void main(void)
(0230) {
(0231) unsigned char temp,bpflag=0;
_main:
temp --> R22
bpflag --> R20
0201 2744 CLR R20
(0232) MCUCR=0x00;
0202 2422 CLR R2
0203 BE25 OUT P35,R2
(0233) DDRC=0b00011101;
0204 E18D LDI R24,0x1D
0205 BB84 OUT P14,R24
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -