📄 hc595.lis
字号:
.module hc595.c
.area lit(rom, con, rel)
0000 _Seg7_Data::
0000 3F06 .byte 63,6
0002 5B4F .byte 91,'O
0004 666D .byte 'f,'m
0006 7D07 .byte 125,7
0008 7F6F .byte 127,'o
000A 777C .byte 'w,124
000C 395E .byte 57,94
000E 7971 .byte 'y,'q
0010 00 .byte 0
0011 .dbfile D:\avrvi\AVRVi_m128_Starter_Kit\EEPROM_HC595\source\lib\hc595.c
0011 .dbsym e Seg7_Data _Seg7_Data A[17:17]kc
.area data(ram, con, rel)
0000 .dbfile D:\avrvi\AVRVi_m128_Starter_Kit\EEPROM_HC595\source\lib\hc595.c
0000 _point::
0000 .blkb 1
.area idata
0000 00 .byte 0
.area data(ram, con, rel)
0001 .dbfile D:\avrvi\AVRVi_m128_Starter_Kit\EEPROM_HC595\source\lib\hc595.c
0001 .dbsym e point _point c
0001 _point_pos::
0001 .blkb 1
.area idata
0001 00 .byte 0
.area data(ram, con, rel)
0002 .dbfile D:\avrvi\AVRVi_m128_Starter_Kit\EEPROM_HC595\source\lib\hc595.c
0002 .dbsym e point_pos _point_pos c
.area text(rom, con, rel)
0000 .dbfile D:\avrvi\AVRVi_m128_Starter_Kit\EEPROM_HC595\source\lib\hc595.c
0000 .dbfunc e HC_595_init _HC_595_init fV
.even
0000 _HC_595_init::
0000 .dbline -1
0000 .dbline 25
0000 ; /************************************************
0000 ; 文件:hc595.c
0000 ; 用途:
0000 ; 注意:内部8M晶振
0000 ; 创建:2008.4.1
0000 ; 修改:2008.4.1
0000 ; Copy Right (c) www.avrvi.com AVR与虚拟仪器
0000 ; ************************************************/
0000 ; #include "..\config.h"
0000 ; const unsigned char Seg7_Data[]={0x3F,0x06,0x5B,0x4F,0x66, //0,1,2,3,4
0000 ; 0x6D,0x7D,0x07,0x7F,0x6F, //5,6,7,8,9
0000 ; 0x77,0x7C,0x39,0x5E,0x79,0x71,0x00}; //a,b,c,d,e,f
0000 ; volatile unsigned char Seg7_Led_Buf[4],point=0,point_pos=0;//point是小数点标志1代表有小数点point_pos表示小数点位置
0000 ; /*************************************************************************
0000 ; ** 函数名称:HC595初始化
0000 ; ** 功能描述:
0000 ; ** 输 入:
0000 ; ** 输出 :
0000 ; ** 全局变量:
0000 ; ** 调用模块:
0000 ; ** 说明:
0000 ; ** 注意:
0000 ; **************************************************************************/
0000 ; void HC_595_init(void)
0000 ; {
0000 .dbline 26
0000 ; OE_DDR |= (1<<OE);
0000 A79A sbi 0x14,7
0002 .dbline 27
0002 ; OE_PORT &= (1<<OE);
0002 85B3 in R24,0x15
0004 8078 andi R24,128
0006 85BB out 0x15,R24
0008 .dbline 28
0008 ; PORTB = 0x0F;
0008 8FE0 ldi R24,15
000A 88BB out 0x18,R24
000C .dbline 29
000C ; spi_init();
000C 0E940000 xcall _spi_init
0010 .dbline 30
0010 ; Seg7_Led_Buf[0]=16;
0010 80E1 ldi R24,16
0012 80930000 sts _Seg7_Led_Buf,R24
0016 .dbline 31
0016 ; Seg7_Led_Buf[1]=16;
0016 80930100 sts _Seg7_Led_Buf+1,R24
001A .dbline 32
001A ; Seg7_Led_Buf[2]=16;
001A 80930200 sts _Seg7_Led_Buf+2,R24
001E .dbline 33
001E ; Seg7_Led_Buf[3]=16;
001E 80930300 sts _Seg7_Led_Buf+3,R24
0022 .dbline -2
0022 L1:
0022 .dbline 0 ; func end
0022 0895 ret
0024 .dbend
0024 .dbfunc e HC_595_OUT _HC_595_OUT fV
0024 ; data -> R20
.even
0024 _HC_595_OUT::
0024 0E940000 xcall push_gset1
0028 402F mov R20,R16
002A .dbline -1
002A .dbline 46
002A ; }
002A ; /*************************************************************************
002A ; ** 函数名称:HC595送数据
002A ; ** 功能描述:
002A ; ** 输 入:
002A ; ** 输出 :
002A ; ** 全局变量:
002A ; ** 调用模块:
002A ; ** 说明:
002A ; ** 注意:
002A ; **************************************************************************/
002A ; void HC_595_OUT(unsigned char data)
002A ; {
002A .dbline 47
002A ; SS_L();
002A C098 cbi 0x18,0
002C .dbline 48
002C ; SPI_MasterTransmit(data);
002C 042F mov R16,R20
002E 0E940000 xcall _SPI_MasterTransmit
0032 .dbline 49
0032 ; SS_H();
0032 C09A sbi 0x18,0
0034 .dbline -2
0034 L5:
0034 0E940000 xcall pop_gset1
0038 .dbline 0 ; func end
0038 0895 ret
003A .dbsym r data 20 c
003A .dbend
003A .dbfunc e Seg7_Led_Update _Seg7_Led_Update fV
.even
003A _Seg7_Led_Update::
003A .dbline -1
003A .dbline 62
003A ; }
003A ; /*************************************************************************
003A ; ** 函数名称:HC595刷新显示
003A ; ** 功能描述:
003A ; ** 输 入:
003A ; ** 输出 :
003A ; ** 全局变量:
003A ; ** 调用模块:
003A ; ** 说明:
003A ; ** 注意:
003A ; **************************************************************************/
003A ; void Seg7_Led_Update(void)
003A ; {
003A .dbline 63
003A ; HC_595_OUT(Seg7_Data[Seg7_Led_Buf[0]]);
003A 80E0 ldi R24,<_Seg7_Data
003C 90E0 ldi R25,>_Seg7_Data
003E E0910000 lds R30,_Seg7_Led_Buf
0042 FF27 clr R31
0044 E80F add R30,R24
0046 F91F adc R31,R25
0048 0491 lpm R16,Z
004A ECDF xcall _HC_595_OUT
004C .dbline 64
004C ; Seg7_Bit0_En();
004C .dbline 64
004C BC9A sbi 0x17,4
004E .dbline 64
004E C49A sbi 0x18,4
0050 .dbline 64
0050 .dbline 64
0050 .dbline 65
0050 ; delay_nus(60);
0050 0CE3 ldi R16,60
0052 10E0 ldi R17,0
0054 0E940000 xcall _delay_nus
0058 .dbline 66
0058 ; Seg7_Bit0_Dis();
0058 .dbline 66
0058 BC9A sbi 0x17,4
005A .dbline 66
005A C498 cbi 0x18,4
005C .dbline 66
005C .dbline 66
005C .dbline 68
005C ;
005C ; HC_595_OUT(Seg7_Data[Seg7_Led_Buf[1]]);
005C 80E0 ldi R24,<_Seg7_Data
005E 90E0 ldi R25,>_Seg7_Data
0060 E0910100 lds R30,_Seg7_Led_Buf+1
0064 FF27 clr R31
0066 E80F add R30,R24
0068 F91F adc R31,R25
006A 0491 lpm R16,Z
006C DBDF xcall _HC_595_OUT
006E .dbline 69
006E ; if((point==1)&&(point_pos==1))
006E 80910000 lds R24,_point
0072 8130 cpi R24,1
0074 71F4 brne L8
0076 80910100 lds R24,_point_pos
007A 8130 cpi R24,1
007C 51F4 brne L8
007E .dbline 70
007E ; HC_595_OUT((Seg7_Data[Seg7_Led_Buf[1]])|(1<<dp));
007E 80E0 ldi R24,<_Seg7_Data
0080 90E0 ldi R25,>_Seg7_Data
0082 E0910100 lds R30,_Seg7_Led_Buf+1
0086 FF27 clr R31
0088 E80F add R30,R24
008A F91F adc R31,R25
008C 0491 lpm R16,Z
008E 0068 ori R16,128
0090 C9DF xcall _HC_595_OUT
0092 L8:
0092 .dbline 71
0092 ; Seg7_Bit1_En();
0092 .dbline 71
0092 BD9A sbi 0x17,5
0094 .dbline 71
0094 C59A sbi 0x18,5
0096 .dbline 71
0096 .dbline 71
0096 .dbline 72
0096 ; delay_nus(60);
0096 0CE3 ldi R16,60
0098 10E0 ldi R17,0
009A 0E940000 xcall _delay_nus
009E .dbline 73
009E ; Seg7_Bit1_Dis();
009E .dbline 73
009E BD9A sbi 0x17,5
00A0 .dbline 73
00A0 C598 cbi 0x18,5
00A2 .dbline 73
00A2 .dbline 73
00A2 .dbline 75
00A2 ;
00A2 ; HC_595_OUT(Seg7_Data[Seg7_Led_Buf[2]]);
00A2 80E0 ldi R24,<_Seg7_Data
00A4 90E0 ldi R25,>_Seg7_Data
00A6 E0910200 lds R30,_Seg7_Led_Buf+2
00AA FF27 clr R31
00AC E80F add R30,R24
00AE F91F adc R31,R25
00B0 0491 lpm R16,Z
00B2 B8DF xcall _HC_595_OUT
00B4 .dbline 76
00B4 ; if((point==1)&&(point_pos==2))
00B4 80910000 lds R24,_point
00B8 8130 cpi R24,1
00BA 71F4 brne L12
00BC 80910100 lds R24,_point_pos
00C0 8230 cpi R24,2
00C2 51F4 brne L12
00C4 .dbline 77
00C4 ; HC_595_OUT((Seg7_Data[Seg7_Led_Buf[2]])|(1<<dp));
00C4 80E0 ldi R24,<_Seg7_Data
00C6 90E0 ldi R25,>_Seg7_Data
00C8 E0910200 lds R30,_Seg7_Led_Buf+2
00CC FF27 clr R31
00CE E80F add R30,R24
00D0 F91F adc R31,R25
00D2 0491 lpm R16,Z
00D4 0068 ori R16,128
00D6 A6DF xcall _HC_595_OUT
00D8 L12:
00D8 .dbline 78
00D8 ; Seg7_Bit2_En();
00D8 .dbline 78
00D8 BE9A sbi 0x17,6
00DA .dbline 78
00DA C69A sbi 0x18,6
00DC .dbline 78
00DC .dbline 78
00DC .dbline 79
00DC ; delay_nus(60);
00DC 0CE3 ldi R16,60
00DE 10E0 ldi R17,0
00E0 0E940000 xcall _delay_nus
00E4 .dbline 80
00E4 ; Seg7_Bit2_Dis();
00E4 .dbline 80
00E4 BE9A sbi 0x17,6
00E6 .dbline 80
00E6 C698 cbi 0x18,6
00E8 .dbline 80
00E8 .dbline 80
00E8 .dbline 82
00E8 ;
00E8 ; HC_595_OUT(Seg7_Data[Seg7_Led_Buf[3]]);
00E8 80E0 ldi R24,<_Seg7_Data
00EA 90E0 ldi R25,>_Seg7_Data
00EC E0910300 lds R30,_Seg7_Led_Buf+3
00F0 FF27 clr R31
00F2 E80F add R30,R24
00F4 F91F adc R31,R25
00F6 0491 lpm R16,Z
00F8 95DF xcall _HC_595_OUT
00FA .dbline 83
00FA ; if((point==1)&&(point_pos==3))
00FA 80910000 lds R24,_point
00FE 8130 cpi R24,1
0100 71F4 brne L16
0102 80910100 lds R24,_point_pos
0106 8330 cpi R24,3
0108 51F4 brne L16
010A .dbline 84
010A ; HC_595_OUT((Seg7_Data[Seg7_Led_Buf[3]])|(1<<dp));
010A 80E0 ldi R24,<_Seg7_Data
010C 90E0 ldi R25,>_Seg7_Data
010E E0910300 lds R30,_Seg7_Led_Buf+3
0112 FF27 clr R31
0114 E80F add R30,R24
0116 F91F adc R31,R25
0118 0491 lpm R16,Z
011A 0068 ori R16,128
011C 83DF xcall _HC_595_OUT
011E L16:
011E .dbline 85
011E ; Seg7_Bit3_En();
011E .dbline 85
011E BF9A sbi 0x17,7
0120 .dbline 85
0120 C79A sbi 0x18,7
0122 .dbline 85
0122 .dbline 85
0122 .dbline 86
0122 ; delay_nus(60);
0122 0CE3 ldi R16,60
0124 10E0 ldi R17,0
0126 0E940000 xcall _delay_nus
012A .dbline 87
012A ; Seg7_Bit3_Dis();
012A .dbline 87
012A BF9A sbi 0x17,7
012C .dbline 87
012C C798 cbi 0x18,7
012E .dbline 87
012E .dbline 87
012E .dbline -2
012E L6:
012E .dbline 0 ; func end
012E 0895 ret
0130 .dbend
0130 .dbfunc e Seg7_Led_display _Seg7_Led_display fV
0130 ; data -> R20,R21
.even
0130 _Seg7_Led_display::
0130 0E940000 xcall push_gset1
0134 A801 movw R20,R16
0136 .dbline -1
0136 .dbline 100
0136 ; }
0136 ; /*************************************************************************
0136 ; ** 函数名称:Hc595显示整形数据
0136 ; ** 功能描述:
0136 ; ** 输 入:0~9999
0136 ; ** 输出 :
0136 ; ** 全局变量:
0136 ; ** 调用模块:
0136 ; ** 说明:
0136 ; ** 注意:
0136 ; **************************************************************************/
0136 ; void Seg7_Led_display(unsigned int data)
0136 ; {
0136 .dbline 101
0136 ; if(data>9999) //错误处理,超出显示范围则全亮
0136 8FE0 ldi R24,9999
0138 97E2 ldi R25,39
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -