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

📄 jianpan.lst

📁 实现3*3 键盘的控制。从而实现用键盘来对单片机进行控制。
💻 LST
📖 第 1 页 / 共 4 页
字号:
    0106 91900062  LDS	R25,0x62
    0108 9601      ADIW	R24,1
    0109 93900062  STS	0x62,R25
    010B 93800061  STS	0x61,R24
    010D 91800063  LDS	R24,0x63
    010F 91900064  LDS	R25,0x64
    0111 9601      ADIW	R24,1
    0112 93900064  STS	0x64,R25
    0114 93800063  STS	0x63,R24
(0184) }
    0116 9189      LD	R24,Y+
    0117 BF8F      OUT	0x3F,R24
    0118 9199      LD	R25,Y+
    0119 9189      LD	R24,Y+
    011A 9518      RETI
(0185) //
(0186) 
(0187) 
(0188) //UART0 initialisation
(0189) // desired baud rate: 9600
(0190) // actual: baud rate:9615 (0.2%)
(0191) // char size: 8 bit
(0192) // parity: Disabled
(0193) void uart0_init(void)
(0194) {
(0195)  UCSRB = 0x00; //disable while setting baud rate
_uart0_init:
    011B 2422      CLR	R2
    011C B82A      OUT	0x0A,R2
(0196)  UCSRA = 0x00;
    011D B82B      OUT	0x0B,R2
(0197)  UCSRC = 0x86;
    011E E886      LDI	R24,0x86
    011F BD80      OUT	0x20,R24
(0198)  UBRRL = 51; //set baud rate lo
    0120 E383      LDI	R24,0x33
    0121 B989      OUT	0x09,R24
(0199)  UBRRH = 0x00; //set baud rate hi
    0122 BC20      OUT	0x20,R2
(0200)  UCSRB = 0x18;
    0123 E188      LDI	R24,0x18
    0124 B98A      OUT	0x0A,R24
(0201) }
    0125 9508      RET
(0202) 
(0203) //Watchdog initialisation
(0204) // prescale: 32K cycles
(0205) void watchdog_init(void)
(0206) {
(0207)  WDR(); //this prevents a timout on enabling
_watchdog_init:
    0126 95A8      WDR
(0208)  WDTCR = 0x0A; //WATCHDOG ENABLED - dont forget to issue WDRs
    0127 E08A      LDI	R24,0xA
    0128 BD81      OUT	0x21,R24
(0209) }
    0129 9508      RET
(0210) 
(0211) //call this routine to initialise all peripherals
(0212) void init_devices(void)
(0213) {
(0214)  //stop errant interrupts until set up
(0215)  CLI(); //disable all interrupts
_init_devices:
    012A 94F8      BCLR	7
(0216)  port_init();
    012B DFBA      RCALL	_port_init
(0217)  timer0_init(); 
    012C DFC8      RCALL	_timer0_init
(0218)  uart0_init();
    012D DFED      RCALL	_uart0_init
(0219)  //watchdog_init();
(0220)  
(0221)  MCUCR = 0x00;
    012E 2422      CLR	R2
    012F BE25      OUT	0x35,R2
(0222)  GICR  = 0x00;
    0130 BE2B      OUT	0x3B,R2
(0223)  TIMSK = 0x01; //timer interrupt sources
    0131 E081      LDI	R24,1
    0132 BF89      OUT	0x39,R24
(0224)  SEI(); //re-enable interrupts
    0133 9478      BSET	7
(0225)  //all peripherals are now initialised
(0226) }
    0134 9508      RET
_display:
  tmp                  --> R20
    0135 940E04D2  CALL	push_gset2
(0227) //显示
(0228) void display( void )
(0229) {
(0230) 	uint tmp;
(0231) 	send( 7, mode );
    0137 91200068  LDS	R18,0x68
    0139 E007      LDI	R16,7
    013A DF34      RCALL	_send
(0232) 	tmp=numL;
(0233) 	switch( NumBitL )
    013B 91400065  LDS	R20,0x65
    013D 91500066  LDS	R21,0x66
    013F 91600069  LDS	R22,0x69
    0141 2777      CLR	R23
    0142 3061      CPI	R22,1
    0143 E0E0      LDI	R30,0
    0144 077E      CPC	R23,R30
    0145 F409      BNE	0x0147
    0146 C0D1      RJMP	0x0218
    0147 3062      CPI	R22,2
    0148 E0E0      LDI	R30,0
    0149 077E      CPC	R23,R30
    014A F409      BNE	0x014C
    014B C0AE      RJMP	0x01FA
    014C 3063      CPI	R22,3
    014D E0E0      LDI	R30,0
    014E 077E      CPC	R23,R30
    014F F409      BNE	0x0151
    0150 C07D      RJMP	0x01CE
    0151 3064      CPI	R22,4
    0152 E0E0      LDI	R30,0
    0153 077E      CPC	R23,R30
    0154 F409      BNE	0x0156
    0155 C045      RJMP	0x019B
    0156 3065      CPI	R22,5
    0157 E0E0      LDI	R30,0
    0158 077E      CPC	R23,R30
    0159 F009      BEQ	0x015B
    015A C0CC      RJMP	0x0227
(0234) 	{
(0235) 		case 5: send( 0, tmp % 10 );
    015B E02A      LDI	R18,0xA
    015C E030      LDI	R19,0
    015D 018A      MOVW	R16,R20
    015E 940E0471  CALL	mod16u
    0160 2F20      MOV	R18,R16
    0161 2700      CLR	R16
    0162 DF0C      RCALL	_send
(0236) 			tmp=tmp/10;
(0237) 			send( 1, tmp% 10 );
    0163 E02A      LDI	R18,0xA
    0164 E030      LDI	R19,0
    0165 018A      MOVW	R16,R20
    0166 940E0473  CALL	div16u
    0168 01A8      MOVW	R20,R16
    0169 E02A      LDI	R18,0xA
    016A E030      LDI	R19,0
    016B 940E0471  CALL	mod16u
    016D 2F20      MOV	R18,R16
    016E E001      LDI	R16,1
    016F DEFF      RCALL	_send
(0238) 			tmp=tmp/10;
(0239)     			send( 2, tmp % 10 );
    0170 E02A      LDI	R18,0xA
    0171 E030      LDI	R19,0
    0172 018A      MOVW	R16,R20
    0173 940E0473  CALL	div16u
    0175 01A8      MOVW	R20,R16
    0176 E02A      LDI	R18,0xA
    0177 E030      LDI	R19,0
    0178 940E0471  CALL	mod16u
    017A 2F20      MOV	R18,R16
    017B E002      LDI	R16,2
    017C DEF2      RCALL	_send
(0240)     			tmp=tmp/10;
(0241)     			send( 3, tmp % 10 );
    017D E02A      LDI	R18,0xA
    017E E030      LDI	R19,0
    017F 018A      MOVW	R16,R20
    0180 940E0473  CALL	div16u
    0182 01A8      MOVW	R20,R16
    0183 E02A      LDI	R18,0xA
    0184 E030      LDI	R19,0
    0185 940E0471  CALL	mod16u
    0187 2F20      MOV	R18,R16
    0188 E003      LDI	R16,3
    0189 DEE5      RCALL	_send
(0242)     			tmp=tmp/10;
(0243)     			send( 4, tmp % 10 );
    018A E02A      LDI	R18,0xA
    018B E030      LDI	R19,0
    018C 018A      MOVW	R16,R20
    018D 940E0473  CALL	div16u
    018F 01A8      MOVW	R20,R16
    0190 E02A      LDI	R18,0xA
    0191 E030      LDI	R19,0
    0192 940E0471  CALL	mod16u
    0194 2F20      MOV	R18,R16
    0195 E004      LDI	R16,4
    0196 DED8      RCALL	_send
(0244)     			delay(1);
    0197 E001      LDI	R16,1
    0198 E010      LDI	R17,0
    0199 DEC5      RCALL	_delay
(0245)     			break;
    019A C08F      RJMP	0x022A
(0246) 		case 4:send( 0, tmp % 10 );
    019B E02A      LDI	R18,0xA
    019C E030      LDI	R19,0
    019D 018A      MOVW	R16,R20
    019E 940E0471  CALL	mod16u
    01A0 2F20      MOV	R18,R16
    01A1 2700      CLR	R16
    01A2 DECC      RCALL	_send
(0247) 			tmp=tmp/10;
(0248) 			send( 1, tmp% 10 );
    01A3 E02A      LDI	R18,0xA
    01A4 E030      LDI	R19,0
    01A5 018A      MOVW	R16,R20
    01A6 940E0473  CALL	div16u
    01A8 01A8      MOVW	R20,R16
    01A9 E02A      LDI	R18,0xA
    01AA E030      LDI	R19,0
    01AB 940E0471  CALL	mod16u
    01AD 2F20      MOV	R18,R16
    01AE E001      LDI	R16,1
    01AF DEBF      RCALL	_send
(0249) 			tmp/=10;
(0250)     			send( 2, tmp % 10 );
    01B0 E02A      LDI	R18,0xA
    01B1 E030      LDI	R19,0
    01B2 018A      MOVW	R16,R20
    01B3 940E0473  CALL	div16u
    01B5 01A8      MOVW	R20,R16
    01B6 E02A      LDI	R18,0xA
    01B7 E030      LDI	R19,0
    01B8 940E0471  CALL	mod16u
    01BA 2F20      MOV	R18,R16
    01BB E002      LDI	R16,2
    01BC DEB2      RCALL	_send
(0251)     			tmp/=10;
(0252)     			send( 3, tmp % 10 );
    01BD E02A      LDI	R18,0xA
    01BE E030      LDI	R19,0
    01BF 018A      MOVW	R16,R20
    01C0 940E0473  CALL	div16u
    01C2 01A8      MOVW	R20,R16
    01C3 E02A      LDI	R18,0xA
    01C4 E030      LDI	R19,0
    01C5 940E0471  CALL	mod16u
    01C7 2F20      MOV	R18,R16
    01C8 E003      LDI	R16,3
    01C9 DEA5      RCALL	_send
(0253)     			delay(1);
    01CA E001      LDI	R16,1
    01CB E010      LDI	R17,0
    01CC DE92      RCALL	_delay
(0254)     			break;
    01CD C05C      RJMP	0x022A
(0255) 		case 3: send( 0, numL % 10 );
    01CE E02A      LDI	R18,0xA
    01CF E030      LDI	R19,0
    01D0 91000065  LDS	R16,0x65
    01D2 91100066  LDS	R17,0x66
    01D4 940E0471  CALL	mod16u
    01D6 2F20      MOV	R18,R16
    01D7 2700      CLR	R16
    01D8 DE96      RCALL	_send
(0256) 			tmp=numL/10;
(0257) 			send( 1, tmp% 10 );
    01D9 E02A      LDI	R18,0xA
    01DA E030      LDI	R19,0
    01DB 91000065  LDS	R16,0x65
    01DD 91100066  LDS	R17,0x66
    01DF 940E0473  CALL	div16u
    01E1 01A8      MOVW	R20,R16
    01E2 E02A      LDI	R18,0xA
    01E3 E030      LDI	R19,0
    01E4 940E0471  CALL	mod16u
    01E6 2F20      MOV	R18,R16
    01E7 E001      LDI	R16,1
    01E8 DE86      RCALL	_send
(0258) 			tmp/=10;
(0259)     			send( 2, tmp % 10 );
    01E9 E02A      LDI	R18,0xA
    01EA E030      LDI	R19,0
    01EB 018A      MOVW	R16,R20
    01EC 940E0473  CALL	div16u
    01EE 01A8      MOVW	R20,R16
    01EF E02A      LDI	R18,0xA
    01F0 E030      LDI	R19,0
    01F1 940E0471  CALL	mod16u
    01F3 2F20      MOV	R18,R16
    01F4 E002      LDI	R16,2
    01F5 DE79      RCALL	_send
(0260)     			delay(1);
    01F6 E001      LDI	R16,1
    01F7 E010      LDI	R17,0
    01F8 DE66      RCALL	_delay
(0261)     			break;		
    01F9 C030      RJMP	0x022A
(0262) 		case 2: send( 0, numL% 10 );
    01FA E02A      LDI	R18,0xA
    01FB E030      LDI	R19,0
    01FC 91000065  LDS	R16,0x65
    01FE 91100066  LDS	R17,0x66
    0200 940E0471  CALL	mod16u
    0202 2F20      MOV	R18,R16
    0203 2700      CLR	R16
    0204 DE6A      RCALL	_send
(0263)     			send( 1, numL / 10 % 10 );
    0205 E02A      LDI	R18,0xA
    0206 E030      LDI	R19,0
    0207 91000065  LDS	R16,0x65
    0209 91100066  LDS	R17,0x66
    020B 940E0473  CALL	div16u
    020D E02A      LDI	R18,0xA
    020E E030      LDI	R19,0
    020F 940E0471  CALL	mod16u
    0211 2F20      MOV	R18,R16
    0212 E001      LDI	R16,1
    0213 DE5B      RCALL	_send
(0264)     			delay(2);
    0214 E002      LDI	R16,2
    0215 E010      LDI	R17,0
    0216 DE48      RCALL	_delay
(0265)     			break;
    0217 C012      RJMP	0x022A
(0266)     case 1: send( 0, numL % 10 );
    0218 E02A      LDI	R18,0xA
    0219 E030      LDI	R19,0
    021A 91000065  LDS	R16,0x65
    021C 91100066  LDS	R17,0x66
    021E 940E0471  CALL	mod16u
    0220 2F20      MOV	R18,R16
    0221 2700      CLR	R16
    0222 DE4C      RCALL	_send
(0267)     			delay(3);
    0223 E003      LDI	R16,3
    0224 E010      LDI	R17,0
    0225 DE39      RCALL	_delay
(0268)     			break;
    0226 C003      RJMP	0x022A
(0269)     default: delay(3); 
    0227 E003      LDI	R16,3
    0228 E010      LDI	R17,0
    0229 DE35      RCALL	_delay
(0270)     			break;
(0271) 	}
(0272) 	
(0273) 	switch(NumBitH)
    022A 9140006A  LDS	R20,0x6A
    022C 2755      CLR	R21
    022D 3041      CPI	R20,1
    022E E0E0      LDI	R30,0
    022F 075E      CPC	R21,R30
    0230 F0E1      BEQ	0x024D
    0231 3042      CPI	R20,2
    0232 E0E0      LDI	R30,0
    0233 075E      CPC	R21,R30
    0234 F009      BEQ	0x0236
    0235 C023      RJMP	0x0259
(0274) 	{
(0275) 			case 2: send( 5, numH% 10 );
    0236 E01A      LDI	R17,0xA
    0237 91000067  LDS	R16,0x67
    0239 940E048D  CALL	mod8u
    023B 2F20      MOV	R18,R16
    023C E005      LDI	R16,5
    023D DE31      RCALL	_send
(0276)     			send( 6, numH / 10 % 10 );
    023E E01A      LDI	R17,0xA
    023F 91000067  LDS	R16,0x67
    0241 940E048F  CALL	div8u
    0243 E01A      LDI	R17,0xA
    0244 940E048D  CALL	mod8u
    0246 2F20      MOV	R18,R16
    0247 E006      LDI	R16,6
    0248 DE26      RCALL	_send
(0277)     			delay(2);
    0249 E002      LDI	R16,2
    024A E010      LDI	R17,0
    024B DE13      RCALL	_delay
(0278)     			break;
    024C C00F      RJMP	0x025C
(0279)     	case 1: send(5,numH%10);
    024D E01A      LDI	R17,0xA
    024E 91000067  LDS	R16,0x67
    0250 940E048D  CALL	mod8u
    0252 2F20      MOV	R18,R16
    0253 E005      LDI	R16,5
    0254 DE1A      RCALL	_send
(0280)     			delay(2);
    0255 E002      LDI	R16,2
    0256 E010      LDI	R17,0
    0257 DE07      RCALL	_delay
(0281)     			break;
    0258 C003      RJMP	0x025C
(0282)     	default: delay(3); 
    0259 E003      LDI	R16,3

⌨️ 快捷键说明

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