📄 ir_test.s
字号:
.dbline 82
xjmp L44
L48:
.dbline 83
; case 0x44: ir_num=2;break;//2
ldi R24,2
ldi R25,0
sts _ir_num+1,R25
sts _ir_num,R24
.dbline 83
xjmp L44
L49:
.dbline 84
; case 0xc4: ir_num=3;break;//3
ldi R24,3
ldi R25,0
sts _ir_num+1,R25
sts _ir_num,R24
.dbline 84
xjmp L44
L50:
.dbline 85
; case 0x24: ir_num=4;break;//4
ldi R24,4
ldi R25,0
sts _ir_num+1,R25
sts _ir_num,R24
.dbline 85
xjmp L44
L51:
.dbline 86
; case 0xa4: ir_num=5;break;//5
ldi R24,5
ldi R25,0
sts _ir_num+1,R25
sts _ir_num,R24
.dbline 86
xjmp L44
L52:
.dbline 87
; case 0x64: ir_num=6;break;//6
ldi R24,6
ldi R25,0
sts _ir_num+1,R25
sts _ir_num,R24
.dbline 87
xjmp L44
L53:
.dbline 88
; case 0xe4: ir_num=7;break;//7
ldi R24,7
ldi R25,0
sts _ir_num+1,R25
sts _ir_num,R24
.dbline 88
xjmp L44
L54:
.dbline 89
; case 0x14: ir_num=8;break;//8
ldi R24,8
ldi R25,0
sts _ir_num+1,R25
sts _ir_num,R24
.dbline 89
xjmp L44
L55:
.dbline 90
; case 0x94: ir_num=9;break;//9
ldi R24,9
ldi R25,0
sts _ir_num+1,R25
sts _ir_num,R24
.dbline 90
xjmp L44
L56:
.dbline 91
; case 0xe8: ir_num=10;break;//取消
ldi R24,10
ldi R25,0
sts _ir_num+1,R25
sts _ir_num,R24
.dbline 91
xjmp L44
L57:
.dbline 92
; case 0x49: ir_num=11;break;//确认
ldi R24,11
ldi R25,0
sts _ir_num+1,R25
sts _ir_num,R24
.dbline 92
xjmp L44
L58:
.dbline 93
; case 0x78: ir_num=12;break;//左
ldi R24,12
ldi R25,0
sts _ir_num+1,R25
sts _ir_num,R24
.dbline 93
xjmp L44
L59:
.dbline 94
; case 0x98: ir_num=13;break;//右
ldi R24,13
ldi R25,0
sts _ir_num+1,R25
sts _ir_num,R24
.dbline 94
xjmp L44
L60:
.dbline 95
; case 0xf8: ir_num=14;break;//前
ldi R24,14
ldi R25,0
sts _ir_num+1,R25
sts _ir_num,R24
.dbline 95
xjmp L44
L61:
.dbline 96
; case 0x18: ir_num=15;break;//后
ldi R24,15
ldi R25,0
sts _ir_num+1,R25
sts _ir_num,R24
.dbline 96
xjmp L44
L62:
.dbline 97
; case 0x2d: ir_num=16;break;
ldi R24,16
ldi R25,0
sts _ir_num+1,R25
sts _ir_num,R24
.dbline 97
xjmp L44
L63:
.dbline 98
; case 0xc8: ir_num=17;break;
ldi R24,17
ldi R25,0
sts _ir_num+1,R25
sts _ir_num,R24
.dbline 98
xjmp L44
L64:
.dbline 99
; case 0x20: ir_num=18;break;
ldi R24,18
ldi R25,0
sts _ir_num+1,R25
sts _ir_num,R24
.dbline 99
xjmp L44
L65:
.dbline 100
; case 0xc0: ir_num=19;break;
ldi R24,19
ldi R25,0
sts _ir_num+1,R25
sts _ir_num,R24
.dbline 100
xjmp L44
L66:
.dbline 101
; case 0x3e: ir_num=20;break;
ldi R24,20
ldi R25,0
sts _ir_num+1,R25
sts _ir_num,R24
.dbline 101
xjmp L44
L67:
.dbline 102
; case 0x89: ir_num=21;break;
ldi R24,21
ldi R25,0
sts _ir_num+1,R25
sts _ir_num,R24
.dbline 102
xjmp L44
L68:
.dbline 103
; case 0xda: ir_num=22;break;
ldi R24,22
ldi R25,0
sts _ir_num+1,R25
sts _ir_num,R24
.dbline 103
xjmp L44
L69:
.dbline 104
; case 0x5a: ir_num=23;break;
ldi R24,23
ldi R25,0
sts _ir_num+1,R25
sts _ir_num,R24
.dbline 104
xjmp L44
L70:
.dbline 105
; case 0xde: ir_num=24;break;
ldi R24,24
ldi R25,0
sts _ir_num+1,R25
sts _ir_num,R24
.dbline 105
xjmp L44
L71:
.dbline 106
; case 0x9e: ir_num=25;break;
ldi R24,25
ldi R25,0
sts _ir_num+1,R25
sts _ir_num,R24
.dbline 106
xjmp L44
L72:
.dbline 107
; case 0xb9: ir_num=26;break;
ldi R24,26
ldi R25,0
sts _ir_num+1,R25
sts _ir_num,R24
.dbline 107
xjmp L44
L73:
.dbline 108
; case 0x38: ir_num=27;break;
ldi R24,27
ldi R25,0
sts _ir_num+1,R25
sts _ir_num,R24
.dbline 108
.dbline 109
; default: break;
L44:
.dbline 111
; }
; LCD_write_data(10,0,operate_code);
lds R2,_operate_code
clr R3
std y+1,R3
std y+0,R2
clr R18
clr R19
ldi R16,10
ldi R17,0
xcall _LCD_write_data
.dbline 112
; if(ir_num<28)
lds R24,_ir_num
lds R25,_ir_num+1
cpi R24,28
ldi R30,0
cpc R25,R30
brsh L101
X65:
.dbline 113
; {
.dbline 114
; codebegin=0;
clr R2
sts _codebegin,R2
.dbline 115
; spk();
xcall _spk
.dbline 116
; }
L101:
.dbline 117
; ir_rx_complete_flag=0;
clr R2
sts _ir_rx_complete_flag,R2
.dbline 118
; bitcnt=0;
sts _bitcnt,R2
.dbline 119
; operate_code=0;
sts _operate_code,R2
.dbline 120
; user_code=0;
sts _user_code,R2
.dbline 121
; }
L41:
.dbline 122
; }
L39:
.dbline -2
L38:
.dbline 0 ; func end
adiw R28,2
ld R21,y+
ld R20,y+
ret
.dbend
.dbfile D:\mega16_32实验板资料\ICCAVR源程序\遥控器\lcd1602.h
.dbfunc e LCD_init _LCD_init fV
.even
_LCD_init::
.dbline -1
.dbline 34
; /*-------------------------------------------
; RS----------PC2
; RW----------GND
; EN----------PC3
; D4-D7-------PC4-PC7
; ---------------------------------------------*/
; //定义MCU与LCD的接口
; #define LCD_EN_PORT PORTC
; #define LCD_EN_DDR DDRC
; #define LCD_RS_PORT PORTC
; #define LCD_RS_DDR DDRC
; #define LCD_DATA_PORT PORTC
; #define LCD_DATA_DDR DDRC
; #define LCD_DATA_PIN PINC
; #define LCD_EN 0x08 //portc3 out
; #define LCD_RS 0x04 //portc2 out
; #define LCD_DATA 0xf0 //portc4/5/6/7 out
;
; /*----------------------------------------------------------
; Public function prototypes
; ----------------------------------------------------------*/
; void LCD_init(void);
; void LCD_en_write(void);
; void clear(void);
; void LCD_write_char(unsigned command,unsigned data);
; void LCD_set_xy(unsigned char x, unsigned char y);
; void LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s);
; void LCD_write_data(unsigned char X,unsigned char Y,int dat);
;
; /*------------------------------------------------------------
; 函数: lcd1602口线初始化和液晶初始化
; -------------------------------------------------------------*/
; void LCD_init(void) //液晶初始化
; {
.dbline 35
; LCD_DATA_DDR|=LCD_DATA;
in R24,0x14
ori R24,240
out 0x14,R24
.dbline 36
; LCD_EN_DDR|=LCD_EN;
sbi 0x14,3
.dbline 37
; LCD_RS_DDR|=LCD_RS;
sbi 0x14,2
.dbline 38
; delay_ms(15);
ldi R16,15
ldi R17,0
xcall _delay_ms
.dbline 39
; LCD_write_char(0x28,0); //4位显示
clr R18
clr R19
ldi R16,40
ldi R17,0
xcall _LCD_write_char
.dbline 40
; delay_ms(15);
ldi R16,15
ldi R17,0
xcall _delay_ms
.dbline 41
; LCD_write_char(0x0c,0); //显示开
clr R18
clr R19
ldi R16,12
ldi R17,0
xcall _LCD_write_char
.dbline 42
; delay_ms(15);
ldi R16,15
ldi R17,0
xcall _delay_ms
.dbline 43
; LCD_write_char(0x01,0); //清屏
clr R18
clr R19
ldi R16,1
ldi R17,0
xcall _LCD_write_char
.dbline 44
; clear();
xcall _clear
.dbline -2
L103:
.dbline 0 ; func end
ret
.dbend
.dbfunc e LCD_set_xy _LCD_set_xy fV
; address -> R20
; y -> R10
; x -> R22
.even
_LCD_set_xy::
xcall push_xgsetF00C
mov R10,R18
mov R22,R16
.dbline -1
.dbline 53
; }
;
; /*------------------------------------------------------------
; 函数: 设置显示地址
; para: x---the display address of a line limit: 0---15
; y---the display line limit 0 or 1
; --------------------------------------------------------------*/
; void LCD_set_xy(unsigned char x, unsigned char y) //写地址函数
; {
.dbline 55
; unsigned char address;
; if(y ==0)
tst R10
brne L105
X103:
.dbline 56
; address=0x80+x; //the first line
mov R20,R22
subi R20,128 ; addi 128
xjmp L106
L105:
.dbline 58
; else
; address=0xc0+x; //the second line
mov R20,R22
subi R20,64 ; addi 192
L106:
.dbline 59
; LCD_write_char(address,0);
clr R18
clr R19
mov R16,R20
clr R17
xcall _LCD_write_char
.dbline -2
L104:
.dbline 0 ; func end
xjmp pop_xgsetF00C
.dbsym r address 20 c
.dbsym r y 10 c
.dbsym r x 22 c
.dbend
.dbfunc e LCD_en_write _LCD_en_write fV
.even
_LCD_en_write::
.dbline -1
.dbline 65
; }
; /*-------------------------------------------------------------
; 函数: lcd1602使能
; *--------------------------------------------------------------*/
; void LCD_en_write(void) //液晶使能
; {
.dbline 66
; LCD_EN_PORT|=LCD_EN;
sbi 0x15,3
.dbline 67
; delay_us(5);
ldi R16,5
ldi R17,0
xcall _delay_us
.dbline 68
; LCD_EN_PORT&=~LCD_EN;
cbi 0x15,3
.dbline -2
L107:
.dbline 0 ; func end
ret
.dbend
.dbfunc e LCD_write_char _LCD_write_char fV
; data_temp -> R22,R23
; command_temp -> R20,R21
; data -> R12,R13
; command -> R10,R11
.even
_LCD_write_char::
xcall push_xgsetF03C
movw R12,R18
movw R10,R16
.dbline -1
.dbline 76
; }
; /*------------------------------------------------------------
; 函数: 写命令或数据到lcd1602
; 参数:command: 0---写数据, 1---写命令
; data: 所要写的命令或数据
; *-------------------------------------------------------------*/
; void LCD_write_char(unsigned command,unsigned data)
; {
.dbline 78
; unsigned command_temp,data_temp;
; command_temp=command;
movw R20,R10
.dbline 79
; data_temp=data;
movw R22,R12
.dbline 80
; delay_us(25);
ldi R16,25
ldi R17,0
xcall _delay_us
.dbline 81
; if(command==0)
cpi R20,0
cpc R20,R21
brne L109
X104:
.dbline 82
; {
.dbline 83
; LCD_RS_PORT|=LCD_RS; //RS=1
sbi 0x15,2
.dbline 84
; LCD_DATA_PORT&=0X0f;
in R24,0x15
andi R24,15
out 0x15,R24
.dbline 85
; LCD_DATA_PORT|=data_temp&0xf0; //写高四位
movw R24,R22
andi R24,240
andi R25,0
in R2,0x15
clr R3
or R2,R24
or R3,R25
out 0x15,R2
.dbline 86
; LCD_en_write();
xcall _LCD_en_write
.dbline 87
; data_temp=data_temp<<4;
lsl R22
rol R23
lsl R22
rol R23
lsl R22
rol R23
lsl R22
rol R23
.dbline 88
; LCD_DATA_PORT&=0X0f;
in R24,0x15
andi R24,15
out 0x15,R24
.dbline 89
; LCD_DATA_PORT|=data_temp&0xf0; //写低四位
movw R24,R22
andi R24,240
andi R25,0
in R2,0x15
clr R3
or R2,R24
or R3,R25
out 0x15,R2
.dbline 90
; LCD_en_write();
xcall _LCD_en_write
.dbline 91
; }
xjmp L110
L109:
.dbline 93
; else
; {
.dbline 94
; LCD_RS_PORT&=~LCD_RS; //RS=0
cbi 0x15,2
.dbline 95
; LCD_DATA_PORT&=0X0f;
in R24,0x15
andi R24,15
out 0x15,R24
.dbline 96
; LCD_DATA_PORT|=command_temp&0xf0; //写高四位
movw R24,R20
andi R24,240
andi R25,0
in R2,0x15
clr R3
or R2,R24
or R3,R25
out 0x15,R2
.dbline 97
; LCD_en_write();
xcall _LCD_en_write
.dbline 98
; command_temp=command_temp<<4;
lsl R20
rol R21
lsl R20
rol R21
lsl R20
rol R21
lsl R20
rol R21
.dbline 99
; LCD_DATA_PORT&=0x0f;
in R24,0x15
andi R24,15
out 0x15,R24
.dbline 100
; LCD_DATA_PORT|=command_temp&0xf0; //写低四位
movw R24,R20
andi R24,240
andi R25,0
in R2,0x15
clr R3
or R2,R24
or R3,R25
out 0x15,R2
.dbline 101
; LCD_en_write();
xcall _LCD_en_write
.dbline 102
; }
L110:
.dbline -2
L108:
.dbline 0 ; func end
xjmp pop_xgsetF03C
.dbsym r data_temp 22 i
.dbsym r command_temp 20 i
.dbsym r data 12 i
.dbsym r command 10 i
.dbend
.dbfunc e clear _clear fV
; i -> R20
.even
_clear::
st -y,R20
.dbline -1
.dbline 108
; }
; /*-------------------------------------------------------------
; 函数: 清屏lcd1602
; ---------------------------------------------------------------*/
; void clear(void)
; {
.dbline 110
; unsigned char i;
; LCD_set_xy(0,0);
clr R18
clr R16
xcall _LCD_set_xy
.dbline 111
; for(i=0;i<16;i++)
clr R20
xjmp L115
L112:
.dbline 112
; LCD_write_char(0,' ');
ldi R18,32
ldi R19,0
clr R16
clr R17
xcall _LCD_write_char
L113:
.dbline 111
inc R20
L115:
.dbline 111
cpi R20,16
brlo L112
X105:
.dbline 113
; LCD_set_xy(0,1);
ldi R18,1
clr R16
xcall _LCD_set_xy
.dbline 114
; for(i=0;i<16;i++)
clr R20
xjmp L119
L116:
.dbline 115
; LCD_write_char(0,' ');
ldi R18,32
ldi R19,0
clr R16
clr R17
xcall _LCD_write_char
L117:
.dbline 114
inc R20
L119:
.dbline 114
cpi R20,16
brlo L116
X106:
.dbline -2
L111:
.dbline 0 ; func end
ld R20,y+
ret
.dbsym r i 20 c
.dbend
.dbfunc e LCD_write_string _LCD_write_string fV
; s -> R20,R21
; Y -> R12
; X -> R10
.even
_LCD_write_string::
xcall push_xgset303C
mov R12,R18
mov R10,R16
ldd R20,y+6
ldd R21,y+7
.dbline -1
.dbline 123
; }
; /*-------------------------------------------------------------
; 函数: 写字符串
; 参数:列---X=0~15,行---Y=0~1 写地址
; s为所要写的字符串
; ---------------------------------------------------------------*/
; void LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s)
; {
.dbline 124
; LCD_set_xy(X,Y);
mov R18,R12
mov R16,R10
xcall _LCD_set_xy
xjmp L122
L121:
.dbline 126
; while(*s)
; {
.dbline 127
; LCD_write_char(0,*s);
movw R30,R20
ldd R18,z+0
clr R19
clr R16
clr R17
xcall _LCD_write_char
.dbline 128
; s++;
subi R20,255 ; offset = 1
sbci R21,255
.dbline 129
; }
L122:
.dbline 125
movw R30,R20
ldd R2,z+0
tst R2
brne L121
X107:
.dbline -2
L120:
.dbline 0 ; func end
xjmp pop_xgset303C
.dbsym r s 20 pc
.dbsym r Y 12 c
.dbsym r X 10 c
.dbend
.dbfunc e LCD_write_data _LCD_write_data fV
; data -> y+0
; i -> R20
; dat -> R14,R15
; Y -> R12
; X -> R10
.even
_LCD_write_data::
xcall push_xgset30FC
mov R12,R18
mov R10,R16
sbiw R28,4
ldd R14,y+12
ldd R15,y+13
.dbline -1
.dbline 138
; }
;
; /*-------------------------------------------------------------
; 函数: 写数字
; 参数:列---X=0~15,行---Y=0~1 写地址
; dat为所要写的数字
; ---------------------------------------------------------------*/
; void LCD_write_data(unsigned char X,unsigned char Y,int dat)
; {
.dbline 151
; //unsigned char fuhao;
; unsigned char data[4];
; unsigned char i;
;
; /*if(dat<0)
; {
; fuhao='-';
; dat=0-dat;
; }
; else
; fuhao=' ';
; data[0]=fuhao;*/
; data[0]=dat/1000+0x30; dat%=1000;
ldi R18,1000
ldi R19,3
movw R16,R14
xcall div16s
movw R24,R16
adiw R24,48
std y+0,R24
.dbline 151
ldi R18,1000
ldi R19,3
movw R16,R14
xcall mod16s
movw R14,R16
.dbline 152
; data[1]=dat/100+0x30; dat%=100;
ldi R18,100
ldi R19,0
xcall div16s
movw R24,R16
adiw R24,48
std y+1,R24
.dbline 152
ldi R18,100
ldi R19,0
movw R16,R14
xcall mod16s
movw R14,R16
.dbline 153
; data[2]=dat/10+0x30;
ldi R18,10
ldi R19,0
xcall div16s
movw R24,R16
adiw R24,48
std y+2,R24
.dbline 154
; data[3]=dat%10+0x30;
ldi R18,10
ldi R19,0
movw R16,R14
xcall mod16s
movw R24,R16
adiw R24,48
std y+3,R24
.dbline 156
;
; LCD_set_xy(X,Y);
mov R18,R12
mov R16,R10
xcall _LCD_set_xy
.dbline 157
; for(i=0;i<4;i++)
clr R20
xjmp L131
L128:
.dbline 158
; LCD_write_char(0,data[i]);
movw R24,R28
mov R30,R20
clr R31
add R30,R24
adc R31,R25
ldd R18,z+0
clr R19
clr R16
clr R17
xcall _LCD_write_char
L129:
.dbline 157
inc R20
L131:
.dbline 157
cpi R20,4
brlo L128
X108:
.dbline -2
L124:
.dbline 0 ; func end
adiw R28,4
xjmp pop_xgset30FC
.dbsym l data 0 A[4:4]c
.dbsym r i 20 c
.dbsym r dat 14 I
.dbsym r Y 12 c
.dbsym r X 10 c
.dbend
.dbfile D:\mega16_32实验板资料\ICCAVR源程序\遥控器\ir_test.c
.dbfunc e port_init _port_init fV
.even
_port_init::
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -