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

📄 hc595.s

📁 ATMEGA128的PCF8536驱动程序
💻 S
📖 第 1 页 / 共 2 页
字号:
	.module hc595.c
	.area lit(rom, con, rel)
_Seg7_Data::
	.byte 63,6
	.byte 91,'O
	.byte 'f,'m
	.byte 125,7
	.byte 127,'o
	.byte 'w,124
	.byte 57,94
	.byte 'y,'q
	.byte 0
	.dbfile D:\avrvi\AVRVi_m128_Starter_Kit\PCF8563_seg7\source\lib\hc595.c
	.dbsym e Seg7_Data _Seg7_Data A[17:17]kc
	.area data(ram, con, rel)
	.dbfile D:\avrvi\AVRVi_m128_Starter_Kit\PCF8563_seg7\source\lib\hc595.c
_point::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile D:\avrvi\AVRVi_m128_Starter_Kit\PCF8563_seg7\source\lib\hc595.c
	.dbsym e point _point c
_point_pos::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile D:\avrvi\AVRVi_m128_Starter_Kit\PCF8563_seg7\source\lib\hc595.c
	.dbsym e point_pos _point_pos c
	.area text(rom, con, rel)
	.dbfile D:\avrvi\AVRVi_m128_Starter_Kit\PCF8563_seg7\source\lib\hc595.c
	.dbfunc e HC_595_init _HC_595_init fV
	.even
_HC_595_init::
	.dbline -1
	.dbline 25
; /************************************************
; 文件:spi.c
; 用途:SPI驱动
; 注意:
; 创建:2008.1.25
; 修改:2008.1.25
; Copy Right  (c)  www.avrvi.com  AVR与虚拟仪器
; ************************************************/
; #include "..\config.h"
; const unsigned char Seg7_Data[]={0x3F,0x06,0x5B,0x4F,0x66,             //0,1,2,3,4
;                                  0x6D,0x7D,0x07,0x7F,0x6F,             //5,6,7,8,9
; 						         0x77,0x7C,0x39,0x5E,0x79,0x71,0x00};  //a,b,c,d,e,f
; volatile unsigned char Seg7_Led_Buf[4],point=0,point_pos=0;//point是小数点标志1代表有小数点point_pos表示小数点位置
; /*************************************************************************
; ** 函数名称:HC595初始化
; ** 功能描述:
; ** 输 入:
; ** 输出	 :
; ** 全局变量:
; ** 调用模块:
; ** 说明:
; ** 注意:
; **************************************************************************/
; void HC_595_init(void)
; {
	.dbline 26
;  OE_DDR |= (1<<OE);
	sbi 0x14,7
	.dbline 27
;  OE_PORT &= (1<<OE);
	in R24,0x15
	andi R24,128
	out 0x15,R24
	.dbline 28
;  PORTB = 0x0F;
	ldi R24,15
	out 0x18,R24
	.dbline 29
;  spi_init();
	xcall _spi_init
	.dbline 30
;  Seg7_Led_Buf[0]=16;
	ldi R24,16
	sts _Seg7_Led_Buf,R24
	.dbline 31
;  Seg7_Led_Buf[1]=16;
	sts _Seg7_Led_Buf+1,R24
	.dbline 32
;  Seg7_Led_Buf[2]=16;
	sts _Seg7_Led_Buf+2,R24
	.dbline 33
;  Seg7_Led_Buf[3]=16;
	sts _Seg7_Led_Buf+3,R24
	.dbline -2
L1:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e HC_595_OUT _HC_595_OUT fV
;           data -> R20
	.even
_HC_595_OUT::
	xcall push_gset1
	mov R20,R16
	.dbline -1
	.dbline 46
; }
; /*************************************************************************
; ** 函数名称:HC595送数据
; ** 功能描述:
; ** 输 入:
; ** 输出	 :
; ** 全局变量:
; ** 调用模块: 
; ** 说明:
; ** 注意:
; **************************************************************************/
; void HC_595_OUT(unsigned char data)
; {
	.dbline 47
;  	 SS_L();
	cbi 0x18,0
	.dbline 48
; 	 SPI_MasterTransmit(data);
	mov R16,R20
	xcall _SPI_MasterTransmit
	.dbline 49
;  	 SS_H();
	sbi 0x18,0
	.dbline -2
L5:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r data 20 c
	.dbend
	.dbfunc e Seg7_Led_Update _Seg7_Led_Update fV
	.even
_Seg7_Led_Update::
	.dbline -1
	.dbline 62
; }
; /*************************************************************************
; ** 函数名称:HC595刷新显示
; ** 功能描述:
; ** 输 入:
; ** 输出	 :
; ** 全局变量:
; ** 调用模块: 
; ** 说明:
; ** 注意:
; **************************************************************************/
; void Seg7_Led_Update(void)
; {
	.dbline 63
;  HC_595_OUT(Seg7_Data[Seg7_Led_Buf[0]]); 
	ldi R24,<_Seg7_Data
	ldi R25,>_Seg7_Data
	lds R30,_Seg7_Led_Buf
	clr R31
	add R30,R24
	adc R31,R25
	lpm R16,Z
	xcall _HC_595_OUT
	.dbline 64
;  Seg7_Bit0_En(); 
	.dbline 64
	sbi 0x17,4
	.dbline 64
	sbi 0x18,4
	.dbline 64
	.dbline 64
	.dbline 65
;  delay_nus(60); 
	ldi R16,60
	ldi R17,0
	xcall _delay_nus
	.dbline 66
;  Seg7_Bit0_Dis();
	.dbline 66
	sbi 0x17,4
	.dbline 66
	cbi 0x18,4
	.dbline 66
	.dbline 66
	.dbline 68
;  
;  HC_595_OUT(Seg7_Data[Seg7_Led_Buf[1]]);
	ldi R24,<_Seg7_Data
	ldi R25,>_Seg7_Data
	lds R30,_Seg7_Led_Buf+1
	clr R31
	add R30,R24
	adc R31,R25
	lpm R16,Z
	xcall _HC_595_OUT
	.dbline 69
;  if((point==1)&&(point_pos==1))
	lds R24,_point
	cpi R24,1
	brne L8
	lds R24,_point_pos
	cpi R24,1
	brne L8
	.dbline 70
;  HC_595_OUT((Seg7_Data[Seg7_Led_Buf[1]])|(1<<dp));
	ldi R24,<_Seg7_Data
	ldi R25,>_Seg7_Data
	lds R30,_Seg7_Led_Buf+1
	clr R31
	add R30,R24
	adc R31,R25
	lpm R16,Z
	ori R16,128
	xcall _HC_595_OUT
L8:
	.dbline 71
;  Seg7_Bit1_En();
	.dbline 71
	sbi 0x17,5
	.dbline 71
	sbi 0x18,5
	.dbline 71
	.dbline 71
	.dbline 72
;  delay_nus(60);
	ldi R16,60
	ldi R17,0
	xcall _delay_nus
	.dbline 73
;  Seg7_Bit1_Dis();
	.dbline 73
	sbi 0x17,5
	.dbline 73
	cbi 0x18,5
	.dbline 73
	.dbline 73
	.dbline 75
;  
;  HC_595_OUT(Seg7_Data[Seg7_Led_Buf[2]]); 
	ldi R24,<_Seg7_Data
	ldi R25,>_Seg7_Data
	lds R30,_Seg7_Led_Buf+2
	clr R31
	add R30,R24
	adc R31,R25
	lpm R16,Z
	xcall _HC_595_OUT
	.dbline 76
;  if((point==1)&&(point_pos==2))
	lds R24,_point
	cpi R24,1
	brne L12
	lds R24,_point_pos
	cpi R24,2
	brne L12
	.dbline 77
;  HC_595_OUT((Seg7_Data[Seg7_Led_Buf[2]])|(1<<dp));
	ldi R24,<_Seg7_Data
	ldi R25,>_Seg7_Data
	lds R30,_Seg7_Led_Buf+2
	clr R31
	add R30,R24
	adc R31,R25
	lpm R16,Z
	ori R16,128
	xcall _HC_595_OUT
L12:
	.dbline 78
;  Seg7_Bit2_En();
	.dbline 78
	sbi 0x17,6
	.dbline 78
	sbi 0x18,6
	.dbline 78
	.dbline 78
	.dbline 79
;  delay_nus(60);
	ldi R16,60
	ldi R17,0
	xcall _delay_nus
	.dbline 80
;  Seg7_Bit2_Dis();
	.dbline 80
	sbi 0x17,6
	.dbline 80
	cbi 0x18,6
	.dbline 80
	.dbline 80
	.dbline 82
;  
;  HC_595_OUT(Seg7_Data[Seg7_Led_Buf[3]]);
	ldi R24,<_Seg7_Data
	ldi R25,>_Seg7_Data
	lds R30,_Seg7_Led_Buf+3
	clr R31
	add R30,R24
	adc R31,R25
	lpm R16,Z
	xcall _HC_595_OUT
	.dbline 83
;  if((point==1)&&(point_pos==3))
	lds R24,_point
	cpi R24,1
	brne L16
	lds R24,_point_pos
	cpi R24,3
	brne L16
	.dbline 84
;  HC_595_OUT((Seg7_Data[Seg7_Led_Buf[3]])|(1<<dp));
	ldi R24,<_Seg7_Data
	ldi R25,>_Seg7_Data
	lds R30,_Seg7_Led_Buf+3
	clr R31
	add R30,R24
	adc R31,R25
	lpm R16,Z
	ori R16,128
	xcall _HC_595_OUT
L16:
	.dbline 85
;  Seg7_Bit3_En();
	.dbline 85
	sbi 0x17,7
	.dbline 85
	sbi 0x18,7
	.dbline 85
	.dbline 85
	.dbline 86
;  delay_nus(60);
	ldi R16,60
	ldi R17,0
	xcall _delay_nus
	.dbline 87
;  Seg7_Bit3_Dis();
	.dbline 87
	sbi 0x17,7
	.dbline 87
	cbi 0x18,7
	.dbline 87
	.dbline 87
	.dbline -2
L6:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e Seg7_Led_display _Seg7_Led_display fV
;           data -> R20,R21
	.even
_Seg7_Led_display::
	xcall push_gset1
	movw R20,R16
	.dbline -1
	.dbline 100
; }
; /*************************************************************************
; ** 函数名称:Hc595显示整形数据
; ** 功能描述:
; ** 输 入:0~9999
; ** 输出	 :
; ** 全局变量:
; ** 调用模块: 
; ** 说明:
; ** 注意:
; **************************************************************************/
; void Seg7_Led_display(unsigned int data)
; {
	.dbline 101
;  if(data>9999) //错误处理,超出显示范围则全亮
	ldi R24,9999
	ldi R25,39
	cp R24,R20
	cpc R25,R21
	brsh L20
	.dbline 102
;  	{
	.dbline 103
; 	 HC_595_OUT(0xFF);
	ldi R16,255
	xcall _HC_595_OUT
	.dbline 104
; 	 Seg7_Bitselect_PORT|=((1<<Seg7_Bit0)|(1<<Seg7_Bit1)|(1<<Seg7_Bit2)|(1<<Seg7_Bit3));
	in R24,0x18
	ori R24,240
	out 0x18,R24
	.dbline 105
; 	}
	xjmp L21
L20:
	.dbline 106
;  else if(data>999)
	ldi R24,999
	ldi R25,3
	cp R24,R20
	cpc R25,R21
	brsh L22
	.dbline 107
;  	{
	.dbline 108
; 	 Seg7_Led_Buf[3]=data/1000;
	ldi R18,1000
	ldi R19,3
	movw R16,R20
	xcall div16u
	sts _Seg7_Led_Buf+3,R16
	.dbline 109
;  	 Seg7_Led_Buf[2]=(data%1000)/100;
	ldi R18,1000
	ldi R19,3
	movw R16,R20
	xcall mod16u
	ldi R18,100
	ldi R19,0
	xcall div16u
	sts _Seg7_Led_Buf+2,R16
	.dbline 110
;  	 Seg7_Led_Buf[1]=(data%100)/10;
	ldi R18,100
	ldi R19,0
	movw R16,R20
	xcall mod16u
	ldi R18,10
	ldi R19,0
	xcall div16u
	sts _Seg7_Led_Buf+1,R16
	.dbline 111
;  	 Seg7_Led_Buf[0]=data%10;
	ldi R18,10
	ldi R19,0
	movw R16,R20
	xcall mod16u
	sts _Seg7_Led_Buf,R16
	.dbline 112
; 	 Seg7_Led_Update();
	xcall _Seg7_Led_Update
	.dbline 113
; 	}
	xjmp L23
L22:
	.dbline 114
;  else if(data>99)
	ldi R24,99
	ldi R25,0
	cp R24,R20
	cpc R25,R21
	brsh L27
	.dbline 115
;  	{
	.dbline 116
; 	 Seg7_Led_Buf[3]=16;
	ldi R24,16
	sts _Seg7_Led_Buf+3,R24
	.dbline 117
;  	 Seg7_Led_Buf[2]=(data%1000)/100;
	ldi R18,1000
	ldi R19,3
	movw R16,R20
	xcall mod16u
	ldi R18,100
	ldi R19,0
	xcall div16u
	sts _Seg7_Led_Buf+2,R16
	.dbline 118
;  	 Seg7_Led_Buf[1]=(data%100)/10;
	ldi R18,100
	ldi R19,0
	movw R16,R20
	xcall mod16u
	ldi R18,10
	ldi R19,0
	xcall div16u
	sts _Seg7_Led_Buf+1,R16
	.dbline 119
;  	 Seg7_Led_Buf[0]=data%10;
	ldi R18,10
	ldi R19,0
	movw R16,R20
	xcall mod16u
	sts _Seg7_Led_Buf,R16
	.dbline 120
; 	 Seg7_Led_Update();
	xcall _Seg7_Led_Update
	.dbline 121
; 	}
	xjmp L28
L27:
	.dbline 122
;  else if(data>9)
	ldi R24,9
	ldi R25,0
	cp R24,R20
	cpc R25,R21
	brsh L32
	.dbline 123
;  	{
	.dbline 124
; 	 Seg7_Led_Buf[3]=16;
	ldi R24,16
	sts _Seg7_Led_Buf+3,R24
	.dbline 125
;  	 Seg7_Led_Buf[2]=16;
	sts _Seg7_Led_Buf+2,R24
	.dbline 126
;  	 Seg7_Led_Buf[1]=(data%100)/10;
	ldi R18,100
	ldi R19,0
	movw R16,R20
	xcall mod16u
	ldi R18,10
	ldi R19,0
	xcall div16u
	sts _Seg7_Led_Buf+1,R16
	.dbline 127
;  	 Seg7_Led_Buf[0]=data%10;
	ldi R18,10
	ldi R19,0
	movw R16,R20
	xcall mod16u
	sts _Seg7_Led_Buf,R16
	.dbline 128
; 	 Seg7_Led_Update();
	xcall _Seg7_Led_Update
	.dbline 129
; 	}
	xjmp L33
L32:
	.dbline 131
;  else
;  	{
	.dbline 132
; 	 Seg7_Led_Buf[3]=16;
	ldi R24,16
	sts _Seg7_Led_Buf+3,R24
	.dbline 133
;  	 Seg7_Led_Buf[2]=16;
	sts _Seg7_Led_Buf+2,R24
	.dbline 134
;  	 Seg7_Led_Buf[1]=16;
	sts _Seg7_Led_Buf+1,R24
	.dbline 135
;  	 Seg7_Led_Buf[0]=data%10;
	ldi R18,10
	ldi R19,0
	movw R16,R20
	xcall mod16u
	sts _Seg7_Led_Buf,R16
	.dbline 136
; 	 Seg7_Led_Update();
	xcall _Seg7_Led_Update
	.dbline 137
; 	}
L33:
L28:
L23:
L21:

⌨️ 快捷键说明

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