📄 ir_test.lis
字号:
04CE 90930300 sts _ir_num+1,R25
04D2 80930200 sts _ir_num,R24
04D6 .dbline 101
04D6 30C0 xjmp L44
04D8 L67:
04D8 .dbline 102
04D8 ; case 0x89: ir_num=21;break;
04D8 85E1 ldi R24,21
04DA 90E0 ldi R25,0
04DC 90930300 sts _ir_num+1,R25
04E0 80930200 sts _ir_num,R24
04E4 .dbline 102
04E4 29C0 xjmp L44
04E6 L68:
04E6 .dbline 103
04E6 ; case 0xda: ir_num=22;break;
04E6 86E1 ldi R24,22
04E8 90E0 ldi R25,0
04EA 90930300 sts _ir_num+1,R25
04EE 80930200 sts _ir_num,R24
04F2 .dbline 103
04F2 22C0 xjmp L44
04F4 L69:
04F4 .dbline 104
04F4 ; case 0x5a: ir_num=23;break;
04F4 87E1 ldi R24,23
04F6 90E0 ldi R25,0
04F8 90930300 sts _ir_num+1,R25
04FC 80930200 sts _ir_num,R24
0500 .dbline 104
0500 1BC0 xjmp L44
0502 L70:
0502 .dbline 105
0502 ; case 0xde: ir_num=24;break;
0502 88E1 ldi R24,24
0504 90E0 ldi R25,0
0506 90930300 sts _ir_num+1,R25
050A 80930200 sts _ir_num,R24
050E .dbline 105
050E 14C0 xjmp L44
0510 L71:
0510 .dbline 106
0510 ; case 0x9e: ir_num=25;break;
0510 89E1 ldi R24,25
0512 90E0 ldi R25,0
0514 90930300 sts _ir_num+1,R25
0518 80930200 sts _ir_num,R24
051C .dbline 106
051C 0DC0 xjmp L44
051E L72:
051E .dbline 107
051E ; case 0xb9: ir_num=26;break;
051E 8AE1 ldi R24,26
0520 90E0 ldi R25,0
0522 90930300 sts _ir_num+1,R25
0526 80930200 sts _ir_num,R24
052A .dbline 107
052A 06C0 xjmp L44
052C L73:
052C .dbline 108
052C ; case 0x38: ir_num=27;break;
052C 8BE1 ldi R24,27
052E 90E0 ldi R25,0
0530 90930300 sts _ir_num+1,R25
0534 80930200 sts _ir_num,R24
0538 .dbline 108
0538 .dbline 109
0538 ; default: break;
0538 L44:
0538 .dbline 111
0538 ; }
0538 ; LCD_write_data(10,0,operate_code);
0538 20900300 lds R2,_operate_code
053C 3324 clr R3
053E 3982 std y+1,R3
0540 2882 std y+0,R2
0542 2227 clr R18
0544 3327 clr R19
0546 0AE0 ldi R16,10
0548 10E0 ldi R17,0
054A D6D0 xcall _LCD_write_data
054C .dbline 112
054C ; if(ir_num<28)
054C 80910200 lds R24,_ir_num
0550 90910300 lds R25,_ir_num+1
0554 8C31 cpi R24,28
0556 E0E0 ldi R30,0
0558 9E07 cpc R25,R30
055A 20F4 brsh L101
055C X65:
055C .dbline 113
055C ; {
055C .dbline 114
055C ; codebegin=0;
055C 2224 clr R2
055E 20920400 sts _codebegin,R2
0562 .dbline 115
0562 ; spk();
0562 78DD xcall _spk
0564 .dbline 116
0564 ; }
0564 L101:
0564 .dbline 117
0564 ; ir_rx_complete_flag=0;
0564 2224 clr R2
0566 20920000 sts _ir_rx_complete_flag,R2
056A .dbline 118
056A ; bitcnt=0;
056A 20920100 sts _bitcnt,R2
056E .dbline 119
056E ; operate_code=0;
056E 20920300 sts _operate_code,R2
0572 .dbline 120
0572 ; user_code=0;
0572 20920200 sts _user_code,R2
0576 .dbline 121
0576 ; }
0576 L41:
0576 .dbline 122
0576 ; }
0576 L39:
0576 .dbline -2
0576 L38:
0576 .dbline 0 ; func end
0576 2296 adiw R28,2
0578 5991 ld R21,y+
057A 4991 ld R20,y+
057C 0895 ret
057E .dbend
057E .dbfile D:\mega16_32实验板资料\ICCAVR源程序\遥控器\lcd1602.h
057E .dbfunc e LCD_init _LCD_init fV
.even
057E _LCD_init::
057E .dbline -1
057E .dbline 34
057E ; /*-------------------------------------------
057E ; RS----------PC2
057E ; RW----------GND
057E ; EN----------PC3
057E ; D4-D7-------PC4-PC7
057E ; ---------------------------------------------*/
057E ; //定义MCU与LCD的接口
057E ; #define LCD_EN_PORT PORTC
057E ; #define LCD_EN_DDR DDRC
057E ; #define LCD_RS_PORT PORTC
057E ; #define LCD_RS_DDR DDRC
057E ; #define LCD_DATA_PORT PORTC
057E ; #define LCD_DATA_DDR DDRC
057E ; #define LCD_DATA_PIN PINC
057E ; #define LCD_EN 0x08 //portc3 out
057E ; #define LCD_RS 0x04 //portc2 out
057E ; #define LCD_DATA 0xf0 //portc4/5/6/7 out
057E ;
057E ; /*----------------------------------------------------------
057E ; Public function prototypes
057E ; ----------------------------------------------------------*/
057E ; void LCD_init(void);
057E ; void LCD_en_write(void);
057E ; void clear(void);
057E ; void LCD_write_char(unsigned command,unsigned data);
057E ; void LCD_set_xy(unsigned char x, unsigned char y);
057E ; void LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s);
057E ; void LCD_write_data(unsigned char X,unsigned char Y,int dat);
057E ;
057E ; /*------------------------------------------------------------
057E ; 函数: lcd1602口线初始化和液晶初始化
057E ; -------------------------------------------------------------*/
057E ; void LCD_init(void) //液晶初始化
057E ; {
057E .dbline 35
057E ; LCD_DATA_DDR|=LCD_DATA;
057E 84B3 in R24,0x14
0580 806F ori R24,240
0582 84BB out 0x14,R24
0584 .dbline 36
0584 ; LCD_EN_DDR|=LCD_EN;
0584 A39A sbi 0x14,3
0586 .dbline 37
0586 ; LCD_RS_DDR|=LCD_RS;
0586 A29A sbi 0x14,2
0588 .dbline 38
0588 ; delay_ms(15);
0588 0FE0 ldi R16,15
058A 10E0 ldi R17,0
058C 54DD xcall _delay_ms
058E .dbline 39
058E ; LCD_write_char(0x28,0); //4位显示
058E 2227 clr R18
0590 3327 clr R19
0592 08E2 ldi R16,40
0594 10E0 ldi R17,0
0596 2AD0 xcall _LCD_write_char
0598 .dbline 40
0598 ; delay_ms(15);
0598 0FE0 ldi R16,15
059A 10E0 ldi R17,0
059C 4CDD xcall _delay_ms
059E .dbline 41
059E ; LCD_write_char(0x0c,0); //显示开
059E 2227 clr R18
05A0 3327 clr R19
05A2 0CE0 ldi R16,12
05A4 10E0 ldi R17,0
05A6 22D0 xcall _LCD_write_char
05A8 .dbline 42
05A8 ; delay_ms(15);
05A8 0FE0 ldi R16,15
05AA 10E0 ldi R17,0
05AC 44DD xcall _delay_ms
05AE .dbline 43
05AE ; LCD_write_char(0x01,0); //清屏
05AE 2227 clr R18
05B0 3327 clr R19
05B2 01E0 ldi R16,1
05B4 10E0 ldi R17,0
05B6 1AD0 xcall _LCD_write_char
05B8 .dbline 44
05B8 ; clear();
05B8 6AD0 xcall _clear
05BA .dbline -2
05BA L103:
05BA .dbline 0 ; func end
05BA 0895 ret
05BC .dbend
05BC .dbfunc e LCD_set_xy _LCD_set_xy fV
05BC ; address -> R20
05BC ; y -> R10
05BC ; x -> R22
.even
05BC _LCD_set_xy::
05BC 0E940000 xcall push_xgsetF00C
05C0 A22E mov R10,R18
05C2 602F mov R22,R16
05C4 .dbline -1
05C4 .dbline 53
05C4 ; }
05C4 ;
05C4 ; /*------------------------------------------------------------
05C4 ; 函数: 设置显示地址
05C4 ; para: x---the display address of a line limit: 0---15
05C4 ; y---the display line limit 0 or 1
05C4 ; --------------------------------------------------------------*/
05C4 ; void LCD_set_xy(unsigned char x, unsigned char y) //写地址函数
05C4 ; {
05C4 .dbline 55
05C4 ; unsigned char address;
05C4 ; if(y ==0)
05C4 AA20 tst R10
05C6 19F4 brne L105
05C8 X103:
05C8 .dbline 56
05C8 ; address=0x80+x; //the first line
05C8 462F mov R20,R22
05CA 4058 subi R20,128 ; addi 128
05CC 02C0 xjmp L106
05CE L105:
05CE .dbline 58
05CE ; else
05CE ; address=0xc0+x; //the second line
05CE 462F mov R20,R22
05D0 4054 subi R20,64 ; addi 192
05D2 L106:
05D2 .dbline 59
05D2 ; LCD_write_char(address,0);
05D2 2227 clr R18
05D4 3327 clr R19
05D6 042F mov R16,R20
05D8 1127 clr R17
05DA 08D0 xcall _LCD_write_char
05DC .dbline -2
05DC L104:
05DC .dbline 0 ; func end
05DC 0C940000 xjmp pop_xgsetF00C
05E0 .dbsym r address 20 c
05E0 .dbsym r y 10 c
05E0 .dbsym r x 22 c
05E0 .dbend
05E0 .dbfunc e LCD_en_write _LCD_en_write fV
.even
05E0 _LCD_en_write::
05E0 .dbline -1
05E0 .dbline 65
05E0 ; }
05E0 ; /*-------------------------------------------------------------
05E0 ; 函数: lcd1602使能
05E0 ; *--------------------------------------------------------------*/
05E0 ; void LCD_en_write(void) //液晶使能
05E0 ; {
05E0 .dbline 66
05E0 ; LCD_EN_PORT|=LCD_EN;
05E0 AB9A sbi 0x15,3
05E2 .dbline 67
05E2 ; delay_us(5);
05E2 05E0 ldi R16,5
05E4 10E0 ldi R17,0
05E6 0EDD xcall _delay_us
05E8 .dbline 68
05E8 ; LCD_EN_PORT&=~LCD_EN;
05E8 AB98 cbi 0x15,3
05EA .dbline -2
05EA L107:
05EA .dbline 0 ; func end
05EA 0895 ret
05EC .dbend
05EC .dbfunc e LCD_write_char _LCD_write_char fV
05EC ; data_temp -> R22,R23
05EC ; command_temp -> R20,R21
05EC ; data -> R12,R13
05EC ; command -> R10,R11
.even
05EC _LCD_write_char::
05EC 0E940000 xcall push_xgsetF03C
05F0 6901 movw R12,R18
05F2 5801 movw R10,R16
05F4 .dbline -1
05F4 .dbline 76
05F4 ; }
05F4 ; /*------------------------------------------------------------
05F4 ; 函数: 写命令或数据到lcd1602
05F4 ; 参数:command: 0---写数据, 1---写命令
05F4 ; data: 所要写的命令或数据
05F4 ; *-------------------------------------------------------------*/
05F4 ; void LCD_write_char(unsigned command,unsigned data)
05F4 ; {
05F4 .dbline 78
05F4 ; unsigned command_temp,data_temp;
05F4 ; command_temp=command;
05F4 A501 movw R20,R10
05F6 .dbline 79
05F6 ; data_temp=data;
05F6 B601 movw R22,R12
05F8 .dbline 80
05F8 ; delay_us(25);
05F8 09E1 ldi R16,25
05FA 10E0 ldi R17,0
05FC 03DD xcall _delay_us
05FE .dbline 81
05FE ; if(command==0)
05FE 4030 cpi R20,0
0600 4507 cpc R20,R21
0602 11F5 brne L109
0604 X104:
0604 .dbline 82
0604 ; {
0604 .dbline 83
0604 ; LCD_RS_PORT|=LCD_RS; //RS=1
0604 AA9A sbi 0x15,2
0606 .dbline 84
0606 ; LCD_DATA_PORT&=0X0f;
0606 85B3 in R24,0x15
0608 8F70 andi R24,15
060A 85BB out 0x15,R24
060C .dbline 85
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -