📄 led.lst
字号:
(0142) KZT=2; YYK=0;
0199 E082 LDI R24,2
019A 93800069 STS KZT,R24
019C 2422 CLR R2
019D 9220006A STS YYK,R2
(0143) if(CHW==0) BIT_80|=0x80;//a.BEEP1=1;
019F 9020006F LDS R2,CHW
01A1 2022 TST R2
01A2 F429 BNE 0x01A8
01A3 9180006E LDS R24,BIT_80
01A5 6880 ORI R24,0x80
01A6 9380006E STS BIT_80,R24
(0144) return(1);
01A8 E001 LDI R16,1
01A9 C02A RJMP 0x01D4
(0145) }
(0146) return(0);
01AA 2700 CLR R16
01AB C028 RJMP 0x01D4
(0147) case 2: if(YYK!=20 && (PPK==ADD || PPK==SUB ))
01AC 9180006A LDS R24,YYK
01AE 3184 CPI R24,0x14
01AF F041 BEQ 0x01B8
01B0 91800061 LDS R24,PPK
01B2 3083 CPI R24,3
01B3 F011 BEQ 0x01B6
01B4 3084 CPI R24,4
01B5 F411 BNE 0x01B8
(0148) return(0);
01B6 2700 CLR R16
01B7 C01C RJMP 0x01D4
(0149) YYK=0;
01B8 2422 CLR R2
01B9 9220006A STS YYK,R2
(0150) KEY=PPK;
01BB 90200061 LDS R2,PPK
01BD 92200070 STS KEY,R2
(0151) KZT=3;
01BF E083 LDI R24,3
01C0 93800069 STS KZT,R24
(0152) return(1);
01C2 E001 LDI R16,1
01C3 C010 RJMP 0x01D4
(0153) case 3: if (YYK!=10) return(0);
01C4 9180006A LDS R24,YYK
01C6 308A CPI R24,0xA
01C7 F011 BEQ 0x01CA
01C8 2700 CLR R16
01C9 C00A RJMP 0x01D4
(0154) YYK=0;
01CA 2422 CLR R2
01CB 9220006A STS YYK,R2
(0155) KEY=PPK;
01CD 90200061 LDS R2,PPK
01CF 92200070 STS KEY,R2
(0156) return(1);
01D1 E001 LDI R16,1
01D2 C001 RJMP 0x01D4
(0157) }
(0158) return 255;
01D3 EF0F LDI R16,0xFF
01D4 D122 RCALL pop_gset2
01D5 9508 RET
FILE: C:\avr3\main.c
(0001) #include"main.h"
(0002) extern void keysy(void);
(0003)
(0004)
(0005) /*===============主函数部分===================*/
(0006) void main(void)
(0007) {
(0008) // unsigned int i;
(0009) unsigned char x ;
(0010) /*===============初始化函数============*/
(0011) // init_1622();
(0012) /*
(0013) ======================================
(0014) 采用定时器管理
(0015) 定时器0预分频系数为1024,定时时间为1.25MS
(0016) 初值为=256-1.25*14.7456*1000000/1024/1000=238
(0017) 首先要开启定时器0,
(0018) =========================================
(0019) */
(0020) for(x=0;x<23;x++) LCD[x]=0XFF;
_main:
x --> R20
01D6 2744 CLR R20
01D7 C009 RJMP 0x01E1
01D8 E78F LDI R24,0x7F
01D9 E090 LDI R25,0
01DA 2FE4 MOV R30,R20
01DB 27FF CLR R31
01DC 0FE8 ADD R30,R24
01DD 1FF9 ADC R31,R25
01DE EF8F LDI R24,0xFF
01DF 8380 STD Z+0,R24
01E0 9543 INC R20
01E1 3147 CPI R20,0x17
01E2 F3A8 BCS 0x01D8
(0021)
(0022) TCCR0=0X05; //预分频系数为1024 0000 0101
01E3 E085 LDI R24,5
01E4 BF83 OUT 0x33,R24
(0023) TCNT0=0XEE; //238
01E5 EE8E LDI R24,0xEE
01E6 BF82 OUT 0x32,R24
(0024) TIMSK|=0X01; //使能T/C0中断,允许中断
01E7 B789 IN R24,0x39
01E8 6081 ORI R24,1
01E9 BF89 OUT 0x39,R24
(0025)
(0026) DDRD&=0XF3; //PIND2 PIND3设为输入
01EA B381 IN R24,0x11
01EB 7F83 ANDI R24,0xF3
01EC BB81 OUT 0x11,R24
(0027) MCUCR=0X08; //00001000下降沿触发中断、GICR
01ED E088 LDI R24,0x8
01EE BF85 OUT 0x35,R24
(0028) //ISC11,ISC10 INT1下降沿
(0029)
(0030) /*========PB2输出PWM信号WGM[3;0]=1011
(0031) ========加一计数中比较匹配时清零OC1B
(0032) ========减一计数中比较匹配时置位
(0033) ========CS12,CS11,CS10=010,表示8预分频计时器
(0034) */
(0035) DDRB|=0X3e;//PB2为输出端,(pb3,pb4,pb5为液晶驱动脚设为输出)
01EF B387 IN R24,0x17
01F0 638E ORI R24,0x3E
01F1 BB87 OUT 0x17,R24
(0036) TCCR1A=0X63; //0110 0011
01F2 E683 LDI R24,0x63
01F3 BD8F OUT 0x2F,R24
(0037) TCCR1B=0X12; //0001 0010
01F4 E182 LDI R24,0x12
01F5 BD8E OUT 0x2E,R24
(0038) OCR1A=0x61A7; //设置TOP值为1249
01F6 EA87 LDI R24,0xA7
01F7 E691 LDI R25,0x61
01F8 BD9B OUT 0x2B,R25
01F9 BD8A OUT 0x2A,R24
(0039) OCR1B=2500; //比较匹配值
01FA EC84 LDI R24,0xC4
01FB E099 LDI R25,0x9
01FC BD99 OUT 0x29,R25
01FD BD88 OUT 0x28,R24
(0040)
(0041) SREG =0X80; //使能总中断
01FE E880 LDI R24,0x80
01FF BF8F OUT 0x3F,R24
(0042) MBZ=0;
0200 2422 CLR R2
0201 92200097 STS MBZ,R2
0203 C012 RJMP 0x0216
(0043) while(1)
(0044) {
(0045) keysy();
0204 D0AF RCALL _keysy
(0046) DDRD|=BIT(PD7); //PD7设为输出
0205 9A8F SBI 0x11,7
(0047) DDRD|=BIT(PD6);
0206 9A8E SBI 0x11,6
(0048) if(MBZ==0)
0207 90200097 LDS R2,MBZ
0209 2022 TST R2
020A F409 BNE 0x020C
(0049) {
(0050) LED_LIANG; //PD7为1,点亮LED指示灯
020B 9A97 SBI 0x12,7
(0051) }
(0052) if(MBZ==1)
020C 91800097 LDS R24,MBZ
020E 3081 CPI R24,1
020F F431 BNE 0x0216
(0053) {
(0054) LED_MIE;
0210 9897 CBI 0x12,7
(0055) BIT_80|=0x80;//a.BEEP1=1;
0211 9180006E LDS R24,BIT_80
0213 6880 ORI R24,0x80
0214 9380006E STS BIT_80,R24
0216 CFED RJMP 0x0204
0217 9508 RET
_timet0_ovf:
0218 922A ST R2,-Y
0219 923A ST R3,-Y
021A 938A ST R24,-Y
021B 939A ST R25,-Y
021C 93EA ST R30,-Y
021D B62F IN R2,0x3F
021E 922A ST R2,-Y
FILE: C:\avr3\time0.c
(0001) #include"sga.h"
(0002) /*=============定时器0中断函数==============*/
(0003) #pragma interrupt_handler timet0_ovf:10
(0004) void timet0_ovf(void)
(0005) {
(0006) static unsigned int
(0007) BEEP1_CONT=110,
(0008) BEEP2_CONT=190,
(0009) M05_CONT=800;
(0010) SREG =0X80; //重新开放中断
021F E880 LDI R24,0x80
0220 BF8F OUT 0x3F,R24
(0011) TCNT0=0XEE; //重装1.25MS的定时初值
0221 EE8E LDI R24,0xEE
0222 BF82 OUT 0x32,R24
(0012) DDRB|=BIT(PB0);
0223 9AB8 SBI 0x17,0
(0013) PORTB|=BIT(PB0);
0224 9AC0 SBI 0x18,0
(0014) M05_CONT--;
0225 91800067 LDS R24,M05_CONT
0227 91900068 LDS R25,M05_CONT+1
0229 9701 SBIW R24,1
022A 93900068 STS M05_CONT+1,R25
022C 93800067 STS M05_CONT,R24
(0015) if(M05_CONT==0)
022E 3080 CPI R24,0
022F 0789 CPC R24,R25
0230 F489 BNE 0x0242
(0016) {
(0017) M05_CONT=800;
0231 E280 LDI R24,0x20
0232 E093 LDI R25,3
0233 93900068 STS M05_CONT+1,R25
0235 93800067 STS M05_CONT,R24
(0018) if(MBZ==0) { MBZ=1; }
0237 90200097 LDS R2,MBZ
0239 2022 TST R2
023A F421 BNE 0x023F
023B E081 LDI R24,1
023C 93800097 STS MBZ,R24
023E C003 RJMP 0x0242
(0019) else { MBZ=0; }
023F 2422 CLR R2
0240 92200097 STS MBZ,R2
(0020) }
(0021) if(BIT_80&0x80==0x80)
0242 9020006E LDS R2,BIT_80
0244 FE20 SBRS R2,0
0245 C01C RJMP 0x0262
(0022) {
(0023) BUZZ_NO;
0246 9896 CBI 0x12,6
(0024) if((BEEP1_CONT--)==1)
0247 90200063 LDS R2,BEEP1_CONT
0249 90300064 LDS R3,BEEP1_CONT+1
024B 01C1 MOVW R24,R2
024C 9701 SBIW R24,1
024D 93900064 STS BEEP1_CONT+1,R25
024F 93800063 STS BEEP1_CONT,R24
0251 01C1 MOVW R24,R2
0252 3081 CPI R24,1
0253 E0E0 LDI R30,0
0254 079E CPC R25,R30
0255 F461 BNE 0x0262
(0025) {
(0026) BEEP1_CONT=110;
0256 E68E LDI R24,0x6E
0257 E090 LDI R25,0
0258 93900064 STS BEEP1_CONT+1,R25
025A 93800063 STS BEEP1_CONT,R24
(0027) BUZZ_YE;
025C 9A96 SBI 0x12,6
(0028) BIT_80&=0x7f;//a.BEEP1=0;
025D 9180006E LDS R24,BIT_80
025F 778F ANDI R24,0x7F
0260 9380006E STS BIT_80,R24
(0029) }
(0030) }
(0031) /*==========响铃2次函数设置============*/
(0032) if(BIT_80&0x40==0x40) //响铃2次beep2
0262 9020006E LDS R2,BIT_80
0264 FE20 SBRS R2,0
0265 C03D RJMP 0x02A3
(0033) {
(0034) --BEEP2_CONT;
0266 91800065 LDS R24,BEEP2_CONT
0268 91900066 LDS R25,BEEP2_CONT+1
026A 9701 SBIW R24,1
026B 93900066 STS BEEP2_CONT+1,R25
026D 93800065 STS BEEP2_CONT,R24
(0035) if(BEEP2_CONT>113)
026F E781 LDI R24,0x71
0270 E090 LDI R25,0
0271 90200065 LDS R2,BEEP2_CONT
0273 90300066 LDS R3,BEEP2_CONT+1
0275 1582 CP R24,R2
0276 0593 CPC R25,R3
0277 F410 BCC 0x027A
(0036) {
(0037) BUZZ_NO;
0278 9896 CBI 0x12,6
(0038) }else
0279 C029 RJMP 0x02A3
(0039) if(BEEP2_CONT>75)
027A E48B LDI R24,0x4B
027B E090 LDI R25,0
027C 90200065 LDS R2,BEEP2_CONT
027E 90300066 LDS R3,BEEP2_CONT+1
0280 1582 CP R24,R2
0281 0593 CPC R25,R3
0282 F410 BCC 0x0285
(0040) {
(0041) BUZZ_YE;
0283 9A96 SBI 0x12,6
(0042) }else
0284 C01E RJMP 0x02A3
(0043) if(BEEP2_CONT>0)
0285 90200065 LDS R2,BEEP2_CONT
0287 90300066 LDS R3,BEEP2_CONT+1
0289 2022 TST R2
028A F411 BNE 0x028D
028B 2033 TST R3
028C F011 BEQ 0x028F
(0044) {
(0045) BUZZ_NO;
028D 9896 CBI 0x12,6
(0046) }else
028E C014 RJMP 0x02A3
(0047) if(BEEP2_CONT==0)
028F 90200065 LDS R2,BEEP2_CONT
0291 90300066 LDS R3,BEEP2_CONT+1
0293 2022 TST R2
0294 F471 BNE 0x02A3
0295 2033 TST R3
0296 F461 BNE 0x02A3
(0048) {
(0049) BUZZ_YE;
0297 9A96 SBI 0x12,6
(0050) BIT_80&=0xbf;
0298 9180006E LDS R24,BIT_80
029A 7B8F ANDI R24,0xBF
029B 9380006E STS BIT_80,R24
(0051) BEEP2_CONT=190;
029D EB8E LDI R24,0xBE
029E E090 LDI R25,0
029F 93900066 STS BEEP2_CONT+1,R25
02A1 93800065 STS BEEP2_CONT,R24
(0052) }
(0053) }
(0054) /*==========响铃2次函数结束============*/
(0055) ++TMS;
02A3 9180006C LDS R24,TMS
02A5 9190006D LDS R25,TMS+1
02A7 9601 ADIW R24,1
02A8 9390006D STS TMS+1,R25
02AA 9380006C STS TMS,R24
02AC 9029 LD R2,Y+
02AD BE2F OUT 0x3F,R2
02AE 91E9 LD R30,Y+
02AF 9199 LD R25,Y+
02B0 9189 LD R24,Y+
02B1 9039 LD R3,Y+
02B2 9029 LD R2,Y+
02B3 9518 RETI
_keysy:
x --> R20
02B4 D04C RCALL push_gset1
FILE: C:\avr3\lcd.c
(0001) #include"sga.h"
(0002) unsigned char key_t2(void);
(0003) void keysy(void)
(0004) {
(0005) unsigned char x;
(0006) x=key_t2();
02B5 DD82 RCALL _key_t2
02B6 2F40 MOV R20,R16
(0007) if(x==1)
02B7 3001 CPI R16,1
02B8 F559 BNE 0x02E4
(0008) switch(KEY)
02B9 91400070 LDS R20,KEY
02BB 2755 CLR R21
02BC 3041 CPI R20,1
02BD E0E0 LDI R30,0
02BE 075E CPC R21,R30
02BF F0C9 BEQ 0x02D9
02C0 3042 CPI R20,2
02C1 E0E0 LDI R30,0
02C2 075E CPC R21,R30
02C3 F0D9 BEQ 0x02DF
02C4 3043 CPI R20,3
02C5 E0E0 LDI R30,0
02C6 075E CPC R21,R30
02C7 F029 BEQ 0x02CD
02C8 3044 CPI R20,4
02C9 E0E0 LDI R30,0
02CA 075E CPC R21,R30
02CB F039 BEQ 0x02D3
02CC C017 RJMP 0x02E4
(0009) {
(0010) case ADD:BIT_80|=0X80;
02CD 9180006E LDS R24,BIT_80
02CF 6880 ORI R24,0x80
02D0 9380006E STS BIT_80,R24
(0011) break;
02D2 C011 RJMP 0x02E4
(0012) case SUB:BIT_80|=0X80;
02D3 9180006E LDS R24,BIT_80
02D5 6880 ORI R24,0x80
02D6 9380006E STS BIT_80,R24
(0013) break;
02D8 C00B RJMP 0x02E4
(0014) case BEGIN:BIT_80|=0X80;
02D9 9180006E LDS R24,BIT_80
02DB 6880 ORI R24,0x80
02DC 9380006E STS BIT_80,R24
(0015) break;
02DE C005 RJMP 0x02E4
(0016) case END:BIT_80|=0X80;
02DF 9180006E LDS R24,BIT_80
02E1 6880 ORI R24,0x80
02E2 9380006E STS BIT_80,R24
(0017) break;
02E4 D01F RCALL pop_gset1
02E5 9508 RET
_int0_ovf:
02E6 922A ST R2,-Y
02E7 923A ST R3,-Y
02E8 B62F IN R2,0x3F
02E9 922A ST R2,-Y
FILE: C:\avr3\INT_ONE.C
(0001) #include"sga.h"
(0002) /*=============外部中断一 函数==============*/
(0003) #pragma interrupt_handler int0_ovf:3
(0004) void int0_ovf(void)
(0005) {
(0006) static unsigned int tms;
(0007) tms=TMS;
FILE: <library>
02EA 9020006C LDS R2,TMS
02EC 9030006D LDS R3,TMS+1
02EE 92300099 STS tms+1,R3
02F0 92200098 STS tms,R2
02F2 9029 LD R2,Y+
02F3 BE2F OUT 0x3F,R2
02F4 9039 LD R3,Y+
02F5 9029 LD R2,Y+
02F6 9518 RETI
pop_gset2:
02F7 E0E2 LDI R30,2
02F8 C00C RJMP pop
push_gset5:
02F9 92FA ST R15,-Y
02FA 92EA ST R14,-Y
push_gset4:
02FB 92DA ST R13,-Y
02FC 92CA ST R12,-Y
push_gset3:
02FD 92BA ST R11,-Y
02FE 92AA ST R10,-Y
push_gset2:
02FF 937A ST R23,-Y
0300 936A ST R22,-Y
push_gset1:
0301 935A ST R21,-Y
0302 934A ST R20,-Y
0303 9508 RET
pop_gset1:
0304 E0E1 LDI R30,1
pop:
0305 9149 LD R20,Y+
0306 9159 LD R21,Y+
0307 FDE0 SBRC R30,0
0308 9508 RET
0309 9169 LD R22,Y+
030A 9179 LD R23,Y+
030B FDE1 SBRC R30,1
030C 9508 RET
030D 90A9 LD R10,Y+
030E 90B9 LD R11,Y+
030F FDE2 SBRC R30,2
0310 9508 RET
0311 90C9 LD R12,Y+
0312 90D9 LD R13,Y+
0313 FDE3 SBRC R30,3
0314 9508 RET
0315 90E9 LD R14,Y+
0316 90F9 LD R15,Y+
0317 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -