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

📄 ch452ldriver.s

📁 ch452的数码管和键盘驱动程序
💻 S
📖 第 1 页 / 共 2 页
字号:
	rjmp L12
L18:
	.dbline 183
; 	    case(5):
; 		    Ch452l_Writecommand(0x05d0);//5位显示,BCD译码
	ldi R16,1488
	ldi R17,5
	rcall _Ch452l_Writecommand
	.dbline 184
; 			Delay_Nus(3);
	ldi R16,3
	ldi R17,0
	rcall _Delay_Nus
	.dbline 185
; 			break;
	rjmp L12
L19:
	.dbline 187
; 		case(6):
; 		    Ch452l_Writecommand(0x05e0);//6位显示,BCD译码
	ldi R16,1504
	ldi R17,5
	rcall _Ch452l_Writecommand
	.dbline 188
; 			Delay_Nus(3);
	ldi R16,3
	ldi R17,0
	rcall _Delay_Nus
	.dbline 189
; 			break;
	rjmp L12
L20:
	.dbline 191
; 		case(7):
; 		    Ch452l_Writecommand(0x05f0);//7位显示,BCD译码
	ldi R16,1520
	ldi R17,5
	rcall _Ch452l_Writecommand
	.dbline 192
; 			Delay_Nus(3);
	ldi R16,3
	ldi R17,0
	rcall _Delay_Nus
	.dbline 193
; 			break;
	rjmp L12
L21:
	.dbline 195
; 	    case(8):
; 		    Ch452l_Writecommand(0x0580);//8位显示,BCD译码
	ldi R16,1408
	ldi R17,5
	rcall _Ch452l_Writecommand
	.dbline 196
; 			Delay_Nus(3);
	ldi R16,3
	ldi R17,0
	rcall _Delay_Nus
	.dbline 197
; 			break;
	.dbline 199
; 		default:
; 		    break;
L12:
	.dbline 201
; 	}
; 	Ch452l_Writecommand(CH452L_DIG7 | p[7]);
	movw R30,R20
	ldd R16,z+7
	clr R17
	ori R17,15
	rcall _Ch452l_Writecommand
	.dbline 202
; 	Ch452l_Writecommand(CH452L_DIG6 | p[6]);
	movw R30,R20
	ldd R16,z+6
	clr R17
	ori R17,14
	rcall _Ch452l_Writecommand
	.dbline 203
; 	Ch452l_Writecommand(CH452L_DIG5 | p[5]);
	movw R30,R20
	ldd R16,z+5
	clr R17
	ori R17,13
	rcall _Ch452l_Writecommand
	.dbline 204
; 	Ch452l_Writecommand(CH452L_DIG4 | p[4]);
	movw R30,R20
	ldd R16,z+4
	clr R17
	ori R17,12
	rcall _Ch452l_Writecommand
	.dbline 205
; 	Ch452l_Writecommand(CH452L_DIG3 | p[3]);
	movw R30,R20
	ldd R16,z+3
	clr R17
	ori R17,11
	rcall _Ch452l_Writecommand
	.dbline 206
; 	Ch452l_Writecommand(CH452L_DIG2 | p[2]);
	movw R30,R20
	ldd R16,z+2
	clr R17
	ori R17,10
	rcall _Ch452l_Writecommand
	.dbline 207
; 	Ch452l_Writecommand(CH452L_DIG1 | p[1]);
	movw R30,R20
	ldd R16,z+1
	clr R17
	ori R17,9
	rcall _Ch452l_Writecommand
	.dbline 208
; 	Ch452l_Writecommand(CH452L_DIG0 | p[0]);
	movw R30,R20
	ldd R16,z+0
	clr R17
	ori R17,8
	rcall _Ch452l_Writecommand
	.dbline 209
; 	Ch452l_Writecommand(CH452L_DIG0 | p[0]);
	movw R30,R20
	ldd R16,z+0
	clr R17
	ori R17,8
	rcall _Ch452l_Writecommand
	.dbline -2
L10:
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym l i 1 c
	.dbsym r p 20 pc
	.dbsym r n 22 c
	.dbend
	.dbfunc e Read_Keycode _Read_Keycode fc
;           temp -> <dead>
;       keyvalue -> R22
;            cmd -> R10
;              i -> R20
	.even
_Read_Keycode::
	rcall push_gset3
	.dbline -1
	.dbline 221
; }
; 
; /***************************************************************************
; *函数名:
; *功能:读取CH452L按键代码
; *入口参数:无
; *出口参数:返回读取到的键值,参考手册上的键值表
; *说明:由于读取按键代码时B0~B7无效,只有B8~B11有效,可以使用简化的读取按键命
; 令,即输出命令0111。必须关中断,再开中断,否则读出的键值出错
; ****************************************************************************/
; unsigned char Read_Keycode(void)
; {
	.dbline 222
;     unsigned char keyvalue=0,temp,i;
	clr R22
	.dbline 223
; 	unsigned char cmd=0x07;//使用简化的读取按键命令,使用cmd的低四位
	ldi R24,7
	mov R10,R24
	.dbline 224
; 	GICR &= 0xbf;  //关中断INT0
	in R24,0x3b
	andi R24,191
	out 0x3b,R24
	.dbline 225
; 	Delay_Nus(5);
	ldi R16,5
	ldi R17,0
	rcall _Delay_Nus
	.dbline 226
; 	LOAD_OUT0;    //LOAD输出0
	cbi 0x15,0
	.dbline 227
; 	for(i=0;i<4;i++)
	clr R20
	rjmp L26
L23:
	.dbline 228
; 	{
	.dbline 229
; 	    DCLK_OUT0;
	cbi 0x15,1
	.dbline 230
; 		if(cmd & 1)
	sbrs R10,0
	rjmp L27
	.dbline 231
; 		{
	.dbline 232
; 		    DIN_OUT1;
	sbi 0x15,2
	.dbline 233
; 		}
	rjmp L28
L27:
	.dbline 235
; 		else
; 		{
	.dbline 236
; 		    DIN_OUT0;
	cbi 0x15,2
	.dbline 237
; 		}
L28:
	.dbline 238
	sbi 0x15,1
	.dbline 239
	lsr R10
	.dbline 240
L24:
	.dbline 227
	inc R20
L26:
	.dbline 227
	cpi R20,4
	brlo L23
	.dbline 241
; 		DCLK_OUT1;
; 		cmd=cmd>>1;
; 	}
; 	LOAD_OUT1;    //LOAD上升沿加载一帧数据
	sbi 0x15,0
	.dbline 242
; 	DIN_OUT1;
	sbi 0x15,2
	.dbline 243
; 	DCLK_OUT1;
	sbi 0x15,1
	.dbline 244
; 	keyvalue=0;
	clr R22
	.dbline 245
; 	for(i=0;i<7;i++)
	clr R20
	rjmp L32
L29:
	.dbline 246
; 	{
	.dbline 247
; 	    keyvalue<<=1;
	lsl R22
	.dbline 248
; 		if(DOUT_PIN)
	sbis 0x10,2
	rjmp L33
	.dbline 249
; 		{
	.dbline 250
; 		    keyvalue=keyvalue+1;
	inc R22
	.dbline 251
; 			Uart_Transmit(0x01);
	ldi R16,1
	ldi R17,0
	rcall _Uart_Transmit
	.dbline 252
; 		}
L33:
	.dbline 253
	cbi 0x15,1
	.dbline 254
	sbi 0x15,1
	.dbline 255
L30:
	.dbline 245
	inc R20
L32:
	.dbline 245
	cpi R20,7
	brlo L29
	.dbline 256
; 		DCLK_OUT0;
; 		DCLK_OUT1;
; 	}
; 	DCLK_OUT1;
	sbi 0x15,1
	.dbline 257
; 	DIN_OUT1;
	sbi 0x15,2
	.dbline 258
; 	GICR |= 0x40;    //开中断
	in R24,0x3b
	ori R24,64
	out 0x3b,R24
	.dbline 259
; 	GIFR = 0x40;   //清中断标志INT0
	ldi R24,64
	out 0x3a,R24
	.dbline 260
; 	Delay_Nus(5);
	ldi R16,5
	ldi R17,0
	rcall _Delay_Nus
	.dbline 261
; 	return keyvalue;
	mov R16,R22
	.dbline -2
L22:
	rcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym l temp 1 c
	.dbsym r keyvalue 22 c
	.dbsym r cmd 10 c
	.dbsym r i 20 c
	.dbend
	.dbfunc e Init_Int0 _Init_Int0 fV
	.even
_Init_Int0::
	.dbline -1
	.dbline 276
; }
; 
; /***************************************************************************
; *函数名:
; *功能:外部中断INT0的初始化,边缘触发
; *入口参数:无
; *出口参数:无
; *中断方式说明:     MCUCR         INT0中断方式
; *                   0x00          低电平中断
; *                   0x01          上升沿和下降沿都产生中断
; *                   0x02          下降沿产生中断
; *                   0x03          上升沿产生中断
; ****************************************************************************/
; void Init_Int0(void)
; {
	.dbline 277
;     CLI(); 
	cli
	.dbline 278
;     MCUCR = 0x00; //0x00为低电平触发INT0中断
	clr R2
	out 0x35,R2
	.dbline 279
;     GICR |= 0x40; //INT0使能
	in R24,0x3b
	ori R24,64
	out 0x3b,R24
	.dbline 280
;     TIMSK = 0x00; 
	out 0x39,R2
	.dbline 281
;     SEI(); 
	sei
	.dbline -2
L35:
	.dbline 0 ; func end
	ret
	.dbend
	.area vector(rom, abs)
	.org 2
	rjmp _int0_isr
	.area text(rom, con, rel)
	.dbfile G:\CH452L\ch452ldriver.c
	.dbfunc e int0_isr _int0_isr fV
	.even
_int0_isr::
	rcall push_lset
	.dbline -1
	.dbline 293
; }
; 
; /***************************************************************************
; *函数名:INT0中断服务函数
; *功能:
; *说明:低电平触发中断
; *入口参数:无
; *出口参数:无
; ****************************************************************************/
; #pragma interrupt_handler int0_isr:2
; void int0_isr(void)
; {
	.dbline 294
;     flag=1;
	ldi R24,1
	ldi R25,0
	sts _flag+1,R25
	sts _flag,R24
	.dbline 295
; 	Uart_Transmit(0xbb);
	ldi R16,187
	ldi R17,0
	rcall _Uart_Transmit
	.dbline 296
; 	GIFR = 0x40;   //清中断标志INT0
	ldi R24,64
	out 0x3a,R24
	.dbline -2
L36:
	rcall pop_lset
	.dbline 0 ; func end
	reti
	.dbend
	.area bss(ram, con, rel)
	.dbfile G:\CH452L\ch452ldriver.c
_flag::
	.blkb 2
	.dbsym e flag _flag i

⌨️ 快捷键说明

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