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

📄 ir_test.s

📁 无线遥控器的源代码
💻 S
📖 第 1 页 / 共 3 页
字号:
	.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 + -