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