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

📄 ir.lst

📁 无线遥控器的源代码
💻 LST
📖 第 1 页 / 共 4 页
字号:
  data                 --> R12
  command              --> R10
     34D D262      RCALL	push_xgsetF03C
     34E 0169      MOVW	R12,R18
     34F 0158      MOVW	R10,R16
(0069) }
(0070) /*------------------------------------------------------------
(0071) 函数: 写命令或数据到lcd1602
(0072) 参数:command: 0---写数据, 1---写命令
(0073)       data: 所要写的命令或数据
(0074) *-------------------------------------------------------------*/
(0075) void LCD_write_char(unsigned command,unsigned data) 
(0076) {
(0077)  unsigned command_temp,data_temp;
(0078)  command_temp=command;
     350 01A5      MOVW	R20,R10
(0079)  data_temp=data;
     351 01B6      MOVW	R22,R12
(0080)  delay_us(25);
     352 E109      LDI	R16,0x19
     353 E010      LDI	R17,0
     354 DD75      RCALL	_delay_us
(0081)  if(command==0)
     355 3040      CPI	R20,0
     356 0745      CPC	R20,R21
     357 F4C1      BNE	0x0370
(0082)  {
(0083)   LCD_RS_PORT|=LCD_RS; //RS=1
     358 9AAA      SBI	0x15,2
(0084)   LCD_DATA_PORT&=0X0f;
     359 B385      IN	R24,0x15
     35A 708F      ANDI	R24,0xF
     35B BB85      OUT	0x15,R24
(0085)   LCD_DATA_PORT|=data_temp&0xf0; //写高四位
     35C 01CB      MOVW	R24,R22
     35D 940E 05CC CALL	0x05CC
(0086)   LCD_en_write();
     35F DFE7      RCALL	_LCD_en_write
(0087)   data_temp=data_temp<<4; 
     360 0F66      LSL	R22
     361 1F77      ROL	R23
     362 0F66      LSL	R22
     363 1F77      ROL	R23
     364 0F66      LSL	R22
     365 1F77      ROL	R23
     366 0F66      LSL	R22
     367 1F77      ROL	R23
(0088)   LCD_DATA_PORT&=0X0f;
     368 B385      IN	R24,0x15
     369 708F      ANDI	R24,0xF
     36A BB85      OUT	0x15,R24
(0089)   LCD_DATA_PORT|=data_temp&0xf0; //写低四位
     36B 01CB      MOVW	R24,R22
     36C 940E 05CC CALL	0x05CC
(0090)   LCD_en_write();
     36E DFD8      RCALL	_LCD_en_write
(0091)  }
     36F C013      RJMP	0x0383
(0092)  else
(0093)  {
(0094)   LCD_RS_PORT&=~LCD_RS; //RS=0
     370 98AA      CBI	0x15,2
(0095)   LCD_DATA_PORT&=0X0f;
     371 B385      IN	R24,0x15
     372 708F      ANDI	R24,0xF
     373 BB85      OUT	0x15,R24
(0096)   LCD_DATA_PORT|=command_temp&0xf0; //写高四位
     374 01CA      MOVW	R24,R20
     375 940E 05CC CALL	0x05CC
(0097)   LCD_en_write();
     377 DFCF      RCALL	_LCD_en_write
     378 940E 05E0 CALL	0x05E0
     37A 940E 05E0 CALL	0x05E0
(0098)   command_temp=command_temp<<4;
(0099)   LCD_DATA_PORT&=0x0f;
     37C B385      IN	R24,0x15
     37D 708F      ANDI	R24,0xF
     37E BB85      OUT	0x15,R24
(0100)   LCD_DATA_PORT|=command_temp&0xf0; //写低四位
     37F 01CA      MOVW	R24,R20
     380 940E 05CC CALL	0x05CC
(0101)   LCD_en_write();
     382 DFC4      RCALL	_LCD_en_write
(0102)  }
     383 C233      RJMP	pop_xgsetF03C
_clear:
  i                    --> R20
     384 934A      ST	R20,-Y
(0103) }
(0104) /*-------------------------------------------------------------
(0105) 函数: 清屏lcd1602
(0106) ---------------------------------------------------------------*/
(0107) void clear(void)
(0108) {
(0109)  unsigned char i;
(0110)  LCD_set_xy(0,0);
     385 2722      CLR	R18
     386 2700      CLR	R16
     387 DFAF      RCALL	_LCD_set_xy
(0111)  for(i=0;i<16;i++)
     388 2744      CLR	R20
     389 C004      RJMP	0x038E
(0112)  LCD_write_char(0,' ');
     38A 940E 0604 CALL	0x0604
     38C DFC0      RCALL	_LCD_write_char
     38D 9543      INC	R20
     38E 3140      CPI	R20,0x10
     38F F3D0      BCS	0x038A
(0113)  LCD_set_xy(0,1);
     390 E021      LDI	R18,1
     391 2700      CLR	R16
     392 DFA4      RCALL	_LCD_set_xy
(0114)  for(i=0;i<16;i++)
     393 2744      CLR	R20
     394 C004      RJMP	0x0399
(0115)  LCD_write_char(0,' ');
     395 940E 0604 CALL	0x0604
     397 DFB5      RCALL	_LCD_write_char
     398 9543      INC	R20
     399 3140      CPI	R20,0x10
     39A F3D0      BCS	0x0395
     39B 9149      LD	R20,Y+
     39C 9508      RET
_LCD_write_string:
  s                    --> R20
  Y                    --> R12
  X                    --> R10
     39D D208      RCALL	push_xgset303C
     39E 2EC2      MOV	R12,R18
     39F 2EA0      MOV	R10,R16
     3A0 814E      LDD	R20,Y+6
     3A1 815F      LDD	R21,Y+7
(0116) }
(0117) /*-------------------------------------------------------------
(0118) 函数: 写字符串
(0119) 参数:列---X=0~15,行---Y=0~1 写地址
(0120)       s为所要写的字符串
(0121) ---------------------------------------------------------------*/
(0122) void LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s) 
(0123) {
(0124)  LCD_set_xy(X,Y);   
     3A2 2D2C      MOV	R18,R12
     3A3 2D0A      MOV	R16,R10
     3A4 DF92      RCALL	_LCD_set_xy
     3A5 C006      RJMP	0x03AC
(0125)  while(*s)  
(0126)  {
(0127)   LCD_write_char(0,*s);
     3A6 01FA      MOVW	R30,R20
     3A7 940E 0609 CALL	0x0609
     3A9 DFA3      RCALL	_LCD_write_char
(0128)   s++;
     3AA 5F4F      SUBI	R20,0xFF
     3AB 4F5F      SBCI	R21,0xFF
     3AC 01FA      MOVW	R30,R20
     3AD 8020      LDD	R2,Z+0
     3AE 2022      TST	R2
     3AF F7B1      BNE	0x03A6
     3B0 C1FC      RJMP	pop_xgset303C
_LCD_write_data:
  data                 --> Y,+0
  i                    --> R20
  dat                  --> R14
  Y                    --> R12
  X                    --> R10
     3B1 D1DF      RCALL	push_xgset30FC
     3B2 2EC2      MOV	R12,R18
     3B3 2EA0      MOV	R10,R16
     3B4 9724      SBIW	R28,4
     3B5 84EC      LDD	R14,Y+12
     3B6 84FD      LDD	R15,Y+13
(0129)  }
(0130) }
(0131) 
(0132) /*-------------------------------------------------------------
(0133) 函数: 写数字
(0134) 参数:列---X=0~15,行---Y=0~1 写地址
(0135)       dat为所要写的数字
(0136) ---------------------------------------------------------------*/
(0137) void LCD_write_data(unsigned char X,unsigned char Y,int dat)
(0138) {
(0139)  //unsigned char fuhao;
(0140)  unsigned char data[4];
(0141)  unsigned char i;
(0142)   
(0143)  /*if(dat<0)
(0144)  {
(0145)   fuhao='-';
(0146)   dat=0-dat;
(0147)  }
(0148)  else
(0149)   fuhao=' ';
(0150)  data[0]=fuhao;*/
(0151)  data[0]=dat/1000+0x30; dat%=1000;
     3B7 EE28      LDI	R18,0xE8
     3B8 E033      LDI	R19,3
     3B9 0187      MOVW	R16,R14
     3BA D19A      RCALL	div16s
     3BB 01C8      MOVW	R24,R16
     3BC 96C0      ADIW	R24,0x30
     3BD 8388      STD	Y+0,R24
     3BE EE28      LDI	R18,0xE8
     3BF E033      LDI	R19,3
     3C0 0187      MOVW	R16,R14
     3C1 D18F      RCALL	mod16s
     3C2 0178      MOVW	R14,R16
(0152)  data[1]=dat/100+0x30;  dat%=100;
     3C3 E624      LDI	R18,0x64
     3C4 E030      LDI	R19,0
     3C5 D18F      RCALL	div16s
     3C6 01C8      MOVW	R24,R16
     3C7 96C0      ADIW	R24,0x30
     3C8 8389      STD	Y+1,R24
     3C9 E624      LDI	R18,0x64
     3CA E030      LDI	R19,0
     3CB 0187      MOVW	R16,R14
     3CC D184      RCALL	mod16s
     3CD 0178      MOVW	R14,R16
(0153)  data[2]=dat/10+0x30; 
     3CE E02A      LDI	R18,0xA
     3CF E030      LDI	R19,0
     3D0 D184      RCALL	div16s
     3D1 01C8      MOVW	R24,R16
     3D2 96C0      ADIW	R24,0x30
     3D3 838A      STD	Y+2,R24
(0154)  data[3]=dat%10+0x30; 
     3D4 E02A      LDI	R18,0xA
     3D5 E030      LDI	R19,0
     3D6 0187      MOVW	R16,R14
     3D7 D179      RCALL	mod16s
     3D8 01C8      MOVW	R24,R16
     3D9 96C0      ADIW	R24,0x30
     3DA 838B      STD	Y+3,R24
(0155)  
(0156)  LCD_set_xy(X,Y);
     3DB 2D2C      MOV	R18,R12
     3DC 2D0A      MOV	R16,R10
     3DD DF59      RCALL	_LCD_set_xy
(0157)  for(i=0;i<4;i++)
     3DE 2744      CLR	R20
     3DF C009      RJMP	0x03E9
(0158)   LCD_write_char(0,data[i]);
     3E0 01CE      MOVW	R24,R28
     3E1 2FE4      MOV	R30,R20
     3E2 27FF      CLR	R31
     3E3 0FE8      ADD	R30,R24
     3E4 1FF9      ADC	R31,R25
     3E5 940E 0609 CALL	0x0609
     3E7 DF65      RCALL	_LCD_write_char
     3E8 9543      INC	R20
     3E9 3044      CPI	R20,4
     3EA F3A8      BCS	0x03E0
     3EB 9624      ADIW	R28,4
     3EC C199      RJMP	pop_xgset30FC
FILE: D:\mega16_32实验板资料\ICCAVR源程序\遥控器\ir_test.c
(0001) //ICC-AVR application builder : 2008-11-12 11:41:28
(0002) // Target : M16
(0003) // Crystal: 8.0000Mhz
(0004) 
(0005) #include <iom16v.h>
(0006) #include <macros.h>
(0007) 
(0008) #include "delay.h"
(0009) #include "ir.h"
(0010) #include "lcd1602.h"
(0011) 
(0012) void port_init(void)
(0013) {
(0014)  PORTD = 0xC0;
_port_init:
     3ED EC80      LDI	R24,0xC0
     3EE BB82      OUT	0x12,R24
(0015)  DDRD  = 0x80;
     3EF E880      LDI	R24,0x80
     3F0 BB81      OUT	0x11,R24
     3F1 9508      RET
(0016) }
(0017) 
(0018) //TIMER1 initialize - prescale:8
(0019) // WGM: 0) Normal, TOP=0xFFFF
(0020) // desired value: 8uSec
(0021) // actual value:  8.000uSec (0.0%)
(0022) void timer1_init(void)
(0023) {
(0024)  TCCR1B = 0x00; //stop
_timer1_init:
     3F2 2422      CLR	R2
     3F3 BC2E      OUT	0x2E,R2
(0025)  ICR1H  = 0x00;
     3F4 BC27      OUT	0x27,R2
(0026)  ICR1L  = 0x08;
     3F5 E088      LDI	R24,0x8
     3F6 BD86      OUT	0x26,R24
(0027)  TCCR1A = 0x00;
     3F7 BC2F      OUT	0x2F,R2
(0028)  TCCR1B = 0x82; //start Timer
     3F8 E882      LDI	R24,0x82
     3F9 BD8E      OUT	0x2E,R24
     3FA 9508      RET
(0029) }
(0030) 
(0031) 
(0032) //call this routine to initialize all peripherals
(0033) void init_devices(void)
(0034) {
(0035)  //stop errant interrupts until set up
(0036)  CLI(); //disable all interrupts
_init_devices:
     3FB 94F8      BCLR	7
(0037)  port_init();
     3FC DFF0      RCALL	_port_init
(0038)  timer1_init();
     3FD DFF4      RCALL	_timer1_init
(0039)  LCD_init();
     3FE DF19      RCALL	_LCD_init
(0040) 
(0041)  MCUCR = 0x00;
     3FF 2422      CLR	R2
     400 BE25      OUT	0x35,R2
(0042)  GICR  = 0x00;
     401 BE2B      OUT	0x3B,R2
(0043)  TIMSK = 0x20; //timer interrupt sources
     402 E280      LDI	R24,0x20
     403 BF89      OUT	0x39,R24
(0044)  SEI(); //re-enable interrupts
     404 9478      BSET	7
     405 9508      RET
_main:
     406 9722      SBIW	R28,2
(0045)  //all peripherals are now initialized
(0046) }
(0047) 
(0048) //
(0049) void main(void)
(0050) {
(0051)  init_devices();
     407 DFF3      RCALL	_init_devices
(0052)  //insert your functional code here...
(0053)  LCD_write_string(0,0,"opr_code:");
     408 E48E      LDI	R24,0x4E
     409 E091      LDI	R25,1
     40A 8399      STD	Y+1,R25
     40B 8388      STD	Y+0,R24
     40C 2722      CLR	R18
     40D 2700      CLR	R16
     40E DF8E      RCALL	_LCD_write_string
(0054)  LCD_write_string(0,1,"key  dis:");
     40F E484      LDI	R24,0x44
     410 E091      LDI	R25,1
     411 8399      STD	Y+1,R25
     412 8388      STD	Y+0,R24
     413 E021      LDI	R18,1
     414 2700      CLR	R16
     415 DF87      RCALL	_LCD_write_string
     416 C137      RJMP	0x054E
(0055)  while(1)
(0056)  {
(0057)   get_ir_code();
     417 DD71      RCALL	_get_ir_code
(0058)   if(ir_num==0)
     418 9020 015A LDS	R2,ir_num
     41A 9030 015B LDS	R3,ir_num+1
     41C 2022      TST	R2
     41D F439      BNE	0x0425
     41E 2033      TST	R3
     41F F429      BNE	0x0425
(0059)    LCD_write_string(9,1," 0     ");
     420 E38C      LDI	R24,0x3C
     421 E091      LDI	R25,1
     422 940E 05C7 CALL	0x05C7
     424 DF78      RCALL	_LCD_write_string
(0060)   if(ir_num==1)
     425 940E 05C2 CALL	0x05C2
     427 3081      CPI	R24,1
     428 E0E0      LDI	R30,0
     429 079E      CPC	R25,R30
     42A F429      BNE	0x0430
(0061)    LCD_write_string(9,1," 1     ");
     42B E384      LDI	R24,0x34
     42C E091      LDI	R25,1
     42D 940E 05C7 CALL	0x05C7
     42F DF6D      RCALL	_LCD_write_string
(0062)   if(ir_num==2)
     430 940E 05C2 CALL	0x05C2
     432 3082      CPI	R24,2
     433 E0E0      LDI	R30,0
     434 079E      CPC	R25,R30
     435 F429      BNE	0x043B
(0063)    LCD_write_string(9,1," 2     ");
     436 E28C      LDI	R24,0x2C
     437 E091      LDI	R25,1
     438 940E 05C7 CALL	0x05C7
     43A DF62      RCALL	_LCD_write_string
(0064)   if(ir_num==3)
     43B 940E 05C2 CALL	0x05C2
     43D 3083      CPI	R24,3
     43E E0E0      LDI	R30,0
     43F 079E      CPC	R25,R30
     440 F429      BNE	0x0446
(0065)    LCD_write_string(9,1," 3     ");
     441 E284      LDI	R24,0x24
     442 E091      LDI	R25,1
     443 940E 05C7 CALL	0x05C7
     445 DF57      RCALL	_LCD_write_string
(0066)   if(ir_num==4)
     446 940E 05C2 CALL	0x05C2
     448 3084      CPI	R24,4
     449 E0E0      LDI	R30,0
     44A 079E      CPC	R25,R30
     44B F429      BNE	0x0451
(0067)    LCD_write_string(9,1," 4     ");
     44C E18C      LDI	R24,0x1C
     44D E091      LDI	R25,1
     44E 940E 05C7 CALL	0x05C7
     450 DF4C      RCALL	_LCD_write_string
(0068)   if(ir_num==5)
     451 940E 05C2 CALL	0x05C2
     453 3085      CPI	R24,5
     454 E0E0      LDI	R30,0
     455 079E      CPC	R25,R30
     456 F429      BNE	0x045C
(0069)    LCD_write_string(9,1," 5     ");
     457 E184      LDI	R24,0x14
     458 E091      LDI	R25,1
     459 940E 05C7 CALL	0x05C7
     45B DF41      RCALL	_LCD_write_string
(0070)   if(ir_num==6)
     45C 940E 05C2 CALL	0x05C2
     45E 3086      CPI	R24,6
     45F E0E0      LDI	R30,0
     460 079E      CPC	R25,R30

⌨️ 快捷键说明

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