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

📄 display_led.s

📁 AVR开发板例子源代码
💻 S
📖 第 1 页 / 共 2 页
字号:
; 	for (;i!=0;i--)
	rjmp L5
L2:
	.dbline 103
; 	{
	.dbline 104
	ldi R20,30
	rjmp L9
L6:
	.dbline 104
L7:
	.dbline 104
	dec R20
L9:
	.dbline 104
	tst R20
	brne L6
	.dbline 105
L3:
	.dbline 102
	subi R16,1
	sbci R17,0
L5:
	.dbline 102
	cpi R16,0
	cpc R16,R17
	brne L2
X0:
	.dbline -2
L1:
	rcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r j 20 c
	.dbsym r i 16 i
	.dbend
	.dbfunc e Init_Port _Init_Port fV
	.even
_Init_Port::
	.dbline -1
	.dbline 115
; 	    for (j=30;j!=0;j--);
; 	}
; }
; /************************************************
; 函 数 名:    Init_port()
; 功    能:    单片机初始化函数
; 输入参数:     /
; 输出参数:    /
; 描    述:    相关口方向的设置等
; ***********************************************/
; void Init_Port(void)
; {
	.dbline 116
; 	DDRD = 0xff;                      //PD口为推挽1输出
	ldi R24,255
	out 0x11,R24
	.dbline 117
; 	PORTD = 0x00;                     //PD口初始值为0
	clr R2
	out 0x12,R2
	.dbline -2
L10:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e InputByte _InputByte fV
;            mid -> R20
;              i -> R22
;        hang_no -> R18
;      lie_qishi -> R16,R17
	.even
_InputByte::
	rcall push_gset2
	.dbline -1
	.dbline 127
; }
; /************************************************
; 函 数 名:    InputByte()
; 功    能:    串行写入32bit数据(一行)的函数
; 输入参数:     lie_qishi(起始的列) ,hang_no(需要送第几行)
; 输出参数:    /
; 描    述:    DATA=PD4为数据端,SRCLK=PD6为时钟端,bit7在先,时钟上升沿写入。
; ***********************************************/
; void InputByte (uint lie_qishi,uchar hang_no) 
; {
	.dbline 129
;     uchar i,mid;
; 	for(i=32;i>0;i--)
	ldi R22,32
	rjmp L15
L12:
	.dbline 130
; 	{
	.dbline 131
; 	   mid = buf[lie_qishi +i+i] & hang_no;  //操作的是hang_no位。
	mov R2,R22
	clr R3
	movw R30,R16
	add R30,R2
	adc R31,R3
	add R30,R2
	adc R31,R3
	ldi R24,<_buf
	ldi R25,>_buf
	add R30,R24
	adc R31,R25
	lpm R20,Z
	and R20,R18
	.dbline 132
; 	   if(mid==0)
	brne L16
	.dbline 133
; 	   PORTD |= (1<<PD4);             //数据端输出0,共阳LED,所以取反码
	sbi 0x12,4
	rjmp L17
L16:
	.dbline 135
; 	   else 
; 	   PORTD &= ~(1<<PD4);            //否则输出1
	cbi 0x12,4
L17:
	.dbline 136
	sbi 0x12,6
	.dbline 137
	nop
	.dbline 138
	cbi 0x12,6
	.dbline 139
L13:
	.dbline 129
	dec R22
L15:
	.dbline 129
	clr R2
	cp R2,R22
	brlo L12
	.dbline -2
L11:
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r mid 20 c
	.dbsym r i 22 c
	.dbsym r hang_no 18 c
	.dbsym r lie_qishi 16 i
	.dbend
	.dbfunc e switch_hang _switch_hang fV
;         byTemp -> R20
;           hang -> R16
	.even
_switch_hang::
	rcall push_gset1
	.dbline -1
	.dbline 149
; 	   PORTD |= (1<<PD6);             //时钟置高,产生下降沿。
; 	   NOP();
; 	   PORTD &= ~(1<<PD6);            //时钟置低
; 	 }
; }
; /************************************************
; 函 数 名:    switch_hang ()
; 功    能:    选行操作,控制138的输入
; 输入参数:     /
; 输出参数:    /
; 描    述:    /
; ***********************************************/
; void switch_hang (uchar hang)   //选行操作
; {
	.dbline 151
;    uchar byTemp; 
;    byTemp = PORTD & 0xF0;
	in R20,0x12
	andi R20,240
	.dbline 152
;    if (hang < 8)
	cpi R16,8
	brsh L19
	.dbline 153
;    {
	.dbline 154
;    	  PORTD = byTemp + 0x08 + hang;  //D=1
	mov R24,R20
	subi R24,248    ; addi 8
	add R24,R16
	out 0x12,R24
	.dbline 155
;    }
	rjmp L20
L19:
	.dbline 157
	.dbline 158
	mov R24,R20
	add R24,R16
	subi R24,8
	out 0x12,R24
	.dbline 159
L20:
	.dbline -2
L18:
	rcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r byTemp 20 c
	.dbsym r hang 16 c
	.dbend
	.dbfunc e Display _Display fV
;              i -> R20
;         mov_no -> R22,R23
	.even
_Display::
	rcall push_gset2
	movw R22,R16
	.dbline -1
	.dbline 169
;    else
;    {
;       PORTD = byTemp + hang - 0x08;  //D=0
;    }
; }
; /************************************************
; 函 数 名:    Display()
; 功    能:    动态扫描LED显示函数
; 输入参数:     /
; 输出参数:    /
; 描    述:    共16行,每行连续送4个字节的数据,两个字节为第2个汉字,后两个为第1个汉字。
; ***********************************************/
; void Display (uint mov_no)               //动态显示函数
; {
	.dbline 171
;     uchar i;
; 	for(i=0;i<8;i++)    //上面8行
	clr R20
	rjmp L25
L22:
	.dbline 172
	.dbline 173
	sbi 0x12,7
	.dbline 174
	mov R16,R20
	rcall _switch_hang
	.dbline 176
	mov R18,R20
	clr R19
	ldi R16,128
	ldi R17,0
	rcall asr16
	mov R18,R16
	movw R16,R22
	add R16,R22
	adc R17,R23
	rcall _InputByte
	.dbline 178
	sbi 0x12,5
	.dbline 179
	nop
	.dbline 180
	cbi 0x12,5
	.dbline 182
	cbi 0x12,7
	.dbline 183
	ldi R16,2
	ldi R17,0
	rcall _DelaymS
	.dbline 184
L23:
	.dbline 171
	inc R20
L25:
	.dbline 171
	cpi R20,8
	brlo L22
	.dbline 185
; 	{
; 	   PORTD |= (1<<PD7);      //OE=1,关闭输出,消隐
; 	   switch_hang (i);        //选行操作
; 	   
; 	   InputByte ((mov_no+mov_no),(0b10000000>>i));  //起始列和需要送显示的行
; 	   
; 	   PORTD |= (1<<PD5);             //RCLK=1,并行输出锁存器
; 	   NOP();
; 	   PORTD &= ~(1<<PD5);            //RCLK=0
; 	   //DelaymS(1);	         //消隐的时间,调节亮度用
; 	   PORTD &= ~(1<<PD7);      //OE=0,数据输出
; 	   DelaymS(2);	            //行显示的时间
; 	}
; 	for(i=0;i<8;i++)    //下面8行
	clr R20
	rjmp L29
L26:
	.dbline 186
	.dbline 187
	sbi 0x12,7
	.dbline 188
	mov R16,R20
	subi R16,249    ; addi 7
	rcall _switch_hang
	.dbline 190
	mov R18,R20
	clr R19
	ldi R16,128
	ldi R17,0
	rcall asr16
	mov R18,R16
	movw R16,R22
	add R16,R22
	adc R17,R23
	subi R16,255  ; offset = 1
	sbci R17,255
	rcall _InputByte
	.dbline 192
	sbi 0x12,5
	.dbline 193
	nop
	.dbline 194
	cbi 0x12,5
	.dbline 196
	cbi 0x12,7
	.dbline 197
	ldi R16,2
	ldi R17,0
	rcall _DelaymS
	.dbline 198
L27:
	.dbline 185
	inc R20
L29:
	.dbline 185
	cpi R20,8
	brlo L26
	.dbline -2
L21:
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbsym r mov_no 22 i
	.dbend
	.dbfunc e main _main fV
;              i -> R20,R21
;              j -> R22
	.even
_main::
	.dbline -1
	.dbline 202
; 	{
; 	   PORTD |= (1<<PD7);      //OE=1,关闭输出,消隐
; 	   switch_hang (i+7);        //选行操作
; 	   
; 	   InputByte ((mov_no+mov_no+1),(0b10000000>>i));  //起始列和需要送显示的行
; 	   
; 	   PORTD |= (1<<PD5);             //RCLK=1,并行输出锁存器
; 	   NOP();
; 	   PORTD &= ~(1<<PD5);            //RCLK=0
; 	   //DelaymS(1);	         //消隐的时间,调节亮度用
; 	   PORTD &= ~(1<<PD7);      //OE=0,数据输出
; 	   DelaymS(2);	            //行显示的时间
; 	}
; }
; //*****************主程序**********************************
; void main (void)
; {
	.dbline 205
;      uint i;
; 	 uchar j;
; 	 DelaymS(100);	 
	ldi R16,100
	ldi R17,0
	rcall _DelaymS
	.dbline 206
;      Init_Port();      //初始化
	rcall _Init_Port
	rjmp L32
L31:
	.dbline 210
; 	 
; 	 while (1)
; 	 
; 	 for (i=0;i<272;i++)
	clr R20
	clr R21
	rjmp L37
L34:
	.dbline 211
; 	 {
	.dbline 212
; 		  for (j=0;j<7;j++)         //移动的速度
	clr R22
	rjmp L41
L38:
	.dbline 213
	movw R16,R20
	rcall _Display
L39:
	.dbline 212
	inc R22
L41:
	.dbline 212
	cpi R22,7
	brlo L38
	.dbline 214
L35:
	.dbline 210
	subi R20,255  ; offset = 1
	sbci R21,255
L37:
	.dbline 210
	cpi R20,16
	ldi R30,1
	cpc R21,R30
	brlo L34
L32:
	.dbline 208
	rjmp L31
X1:
	.dbline -2
L30:
	.dbline 0 ; func end
	ret
	.dbsym r i 20 i
	.dbsym r j 22 c
	.dbend

⌨️ 快捷键说明

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