📄 vfd.s
字号:
.module vfd.c
.area lit(rom, con, rel)
_num_xlate:
.word 12579
.word 258
.word 12483
.word 8643
.word 482
.word 8673
.word 12769
.word 259
.word 12771
.word 8675
.dbfile D:\avrmcu\AT980\AT980\vfd.c
.dbsym s num_xlate _num_xlate A[20:10]i
_num_xlate_left:
.word 15232
.word 2304
.word 13696
.word 11648
.word 3840
.word 11904
.word 16000
.word 2432
.word 16256
.word 12160
.dbsym s num_xlate_left _num_xlate_left A[20:10]i
_num_xlate_right:
.word 119
.word 18
.word 107
.word 91
.word 30
.word 93
.word 125
.word 19
.word 127
.word 95
.dbsym s num_xlate_right _num_xlate_right A[20:10]i
_vfd_alpha:
.word 4579
.word 12768
.word 12321
.word 12738
.word 12513
.word 4321
.word 12705
.word 4578
.word 1032
.word 0
.word 1560
.word 12320
.word 4406
.word 4902
.word 12579
.word 4323
.word 0
.word 4835
.word 8673
.word 1033
.word 12578
.word 6192
.word 6946
.word 2580
.word 1044
.word 10257
.dbsym s vfd_alpha _vfd_alpha A[52:26]i
.area text(rom, con, rel)
.dbfile D:\avrmcu\AT980\AT980\vfd.c
.dbfunc s num_trans _num_trans fI
; num -> R16
.even
_num_trans::
.dbline -1
.dbline 246
; #include "..\main.h"
; #include "..\io.h"
; #include <iom163.h>
; #ifdef SGJM_RDS
; #include "..\bu1923\bu1923.h"
; #endif
; #define VFD_BUFFER_SIZE 12
; unsigned int g_vfd_grid_buffer[VFD_BUFFER_SIZE];
; #ifdef MORE_THAN_16SEGMENT
; unsigned char g_vfd_grid_ext_buffer[VFD_BUFFER_SIZE];
; #endif
; extern unsigned char display_type,work_mode,led_val;
; extern unsigned int key_buff;
; unsigned int g_ui_timing_cnt;
;
; #define VFD_LED_MIN 0x0001
; #define VFD_LED_M 0x0002
; #define VFD_LED_SEC 0x0004
; #define VFD_LED_CH 0x0008
; #define VFD_LED_DB 0x0010
; #define VFD_LED_AUTO 0x0020
; #define VFD_LED_CINEMA 0x4000 //cinema dsp
; #define VFD_LED_SLEEP 0x8000
;
; #define VFD_LED_PLUS 0x4000
; #define VFD_LED_SUB 0x8000
; #define VFD_LED_KHZ 0x4000
; #define VFD_LED_MHZ 0x8000
; #define VFD_LED_COL 0x4000
; #define VFD_LED_DP 0x8000
; #define VFD_LED_MEMORY 0x4000
; #define VFD_LED_FM 0x4000
; #define VFD_LED_AM 0x8000
; #define VFD_LED_MUTE 0x4000
; #define VFD_LED_STEREO 0x4000
; #define VFD_LED_TAPE2 0x4000
; #define VFD_LED_SURROUND 0x0001
; #define VFD_LED_EQ 0x0002
; #define VFD_LED_MIC 0x0004
; #define VFD_LED_PRO 0x0008
; #define VFD_LED_DOLBY 0x0010
; #define VFD_LED_AC3 0x0020
; #define VFD_LED_SRS 0x0040
; #define VFD_LED_KEYCON 0x0080
;
; #define VA 0x0001
; #define VB 0x0002
; #define VH 0x0004
; #define VJ 0x0008
; #define VK 0x0010
; #define VF 0x0020
; #define VG 0x0040
; #define VM 0x0080
; #define VC 0x0100
; #define VN 0x0200
; #define VP 0x0400
; #define VR 0x0800
; #define VE 0x1000
; #define VD 0x2000
;
; #define VFD_digit_zero VA|VB|VC|VD|VE|VF
; #define VFD_digit_one VB|VC
; #define VFD_digit_two VA|VB|VG|VM|VE|VD
; #define VFD_digit_three VA|VB|VC|VD|VG|VM
; #define VFD_digit_four VF|VG|VB|VC|VM
; #define VFD_digit_five VA|VF|VG|VC|VD|VM
; #define VFD_digit_six VA|VF|VG|VC|VD|VE|VM
; #define VFD_digit_seven VA|VB|VC
; #define VFD_digit_eight VA|VB|VC|VD|VE|VF|VG|VM
; #define VFD_digit_nine VA|VB|VC|VD|VF|VG|VM
;
;
; /* VFD Alphabetic Characters */
;
; #define VFD_alpha_A VA|VB|VC|VF|VE|VG|VM
; #define VFD_alpha_B VF|VG|VE|VD|VC|VM
; #define VFD_alpha_C VA|VF|VE|VD
; #define VFD_alpha_D VB|VG|VE|VD|VC|VM
; #define VFD_alpha_E VA|VF|VE|VG|VD|VM
; #define VFD_alpha_F VA|VF|VG|VE|VM
; #define VFD_alpha_G VA|VF|VE|VD|VC|VM
; #define VFD_alpha_H VF|VE|VB|VC|VG|VM
; #define VFD_alpha_I VJ|VP
; #define VFD_alpha_J 0x0000
; #define VFD_alpha_K VJ|VP|VK|VN
; #define VFD_alpha_L VF|VE|VD
; #define VFD_alpha_M VB|VC|VE|VF|VH|VK
; #define VFD_alpha_N VF|VE|VH|VN|VB|VC
; #define VFD_alpha_O VA|VB|VC|VD|VE|VF
; #define VFD_alpha_P VA|VB|VG|VF|VE|VM
; #define VFD_alpha_R VA|VB|VG|VF|VE|VM|VN
; #define VFD_alpha_S VA|VF|VG|VC|VD|VM
; #define VFD_alpha_T VA|VJ|VP
; #define VFD_alpha_U VF|VE|VD|VC|VB
; #define VFD_alpha_V VF|VE|VR|VK
; #define VFD_alpha_W VF|VE|VR|VN|VC|VB
; #define VFD_alpha_X VH|VK|VR|VN
; #define VFD_alpha_Y VH|VK|VP
; #define VFD_alpha_Z VA|VK|VR|VD
;
; #define VFD_alpha_aster VH|VJ|VK|VG|VM|VR|VP|VN
; #define VFD_alpha_DASH VD
; #define VFD_alpha_MINUS VG|VM
; #define VFD_alpha_PLUS VJ|VP|VG|VM
;
;
; #define LA 0x0080
; #define LB 0x0100
; #define LC 0x0800
; #define LD 0x2000
; #define LE 0x1000
; #define LF 0x0200
; #define LG 0x0400
;
; #define RA 0x0001
; #define RB 0x0002
; #define RC 0x0010
; #define RD 0x0040
; #define RE 0x0020
; #define RF 0x0004
; #define RG 0x0008
;
; #define VFD_digit_right_zero RA|RB|RC|RD|RE|RF
; #define VFD_digit_right_one RB|RC
; #define VFD_digit_right_two RA|RB|RG|RE|RD
; #define VFD_digit_right_three RA|RB|RC|RD|RG
; #define VFD_digit_right_four RF|RG|RB|RC
; #define VFD_digit_right_five RA|RF|RG|RC|RD
; #define VFD_digit_right_six RA|RF|RG|RC|RD|RE
; #define VFD_digit_right_seven RA|RB|RC
; #define VFD_digit_right_eight RA|RB|RC|RD|RE|RF|RG
; #define VFD_digit_right_nine RA|RB|RC|RD|RF|RG
;
; #define VFD_digit_left_zero LA|LB|LC|LD|LE|LF
; #define VFD_digit_left_one LB|LC
; #define VFD_digit_left_two LA|LB|LG|LE|LD
; #define VFD_digit_left_three LA|LB|LC|LD|LG
; #define VFD_digit_left_four LF|LG|LB|LC
; #define VFD_digit_left_five LA|LF|LG|LC|LD
; #define VFD_digit_left_six LA|LF|LG|LC|LD|LE
; #define VFD_digit_left_seven LA|LB|LC
; #define VFD_digit_left_eight LA|LB|LC|LD|LE|LF|LG
; #define VFD_digit_left_nine LA|LB|LC|LD|LF|LG
;
;
; #define MAX_LETTER 8
;
; #define G1 0x00
; #define G2 0x01
; #define G3 0x02
; #define G4 0x03
; #define G5 0x04
; #define G6 0x05
; #define G7 0x06
; #define G8 0x07
; #define G9 0x08
; #define G10 0x09
; #define G11 0x0a
;
; const static unsigned int num_xlate[10] =
; {
; VFD_digit_zero,
; VFD_digit_one,
; VFD_digit_two,
; VFD_digit_three,
; VFD_digit_four,
; VFD_digit_five,
; VFD_digit_six,
; VFD_digit_seven,
; VFD_digit_eight,
; VFD_digit_nine
; };
; const static unsigned int num_xlate_left[10] = {
; VFD_digit_left_zero,
; VFD_digit_left_one,
; VFD_digit_left_two,
; VFD_digit_left_three,
; VFD_digit_left_four,
; VFD_digit_left_five,
; VFD_digit_left_six,
; VFD_digit_left_seven,
; VFD_digit_left_eight,
; VFD_digit_left_nine
; };
;
; const static unsigned num_xlate_right[10] = {
; VFD_digit_right_zero,
; VFD_digit_right_one,
; VFD_digit_right_two,
; VFD_digit_right_three,
; VFD_digit_right_four,
; VFD_digit_right_five,
; VFD_digit_right_six,
; VFD_digit_right_seven,
; VFD_digit_right_eight,
; VFD_digit_right_nine
; };
;
;
;
; const static unsigned int vfd_alpha[] = {
; VFD_alpha_A,
; VFD_alpha_B,
; VFD_alpha_C,
; VFD_alpha_D,
; VFD_alpha_E,
; VFD_alpha_F,
; VFD_alpha_G,
; VFD_alpha_H,
; VFD_alpha_I,
; VFD_alpha_J,
; VFD_alpha_K,
; VFD_alpha_L,
; VFD_alpha_M,
; VFD_alpha_N,
; VFD_alpha_O,
; VFD_alpha_P,
; 0x0000,
; VFD_alpha_R,
; VFD_alpha_S,
; VFD_alpha_T,
; VFD_alpha_U,
; VFD_alpha_V,
; VFD_alpha_W,
; VFD_alpha_X,
; VFD_alpha_Y,
; VFD_alpha_Z,
; };
; unsigned char Set_String(unsigned char *str);
; extern unsigned char Mchvol,Bassvol,Treblevol,Balanceval,Loudnessval;
; unsigned char *err_msg,blink_time;
; extern unsigned int radio_count,freq;
; extern unsigned char is_autosearching;
; extern unsigned char amfm_flag,g_ui_tmp_msg_cnt,station_no;
; #ifdef SGJM_RDS
; extern unsigned char rds_status;
; extern unsigned char pty_is_searching;
; extern unsigned char rds_dis_buffer[65];
; extern unsigned char rds_dis_string[65];
; extern unsigned char rds_display_type;
; #endif
; extern unsigned char muted;
; unsigned int info;
; extern unsigned char hm_flag,time_val[];
; unsigned int num_trans(unsigned char num)
; {
.dbline 247
; return num_xlate[num];
ldi R24,<_num_xlate
ldi R25,>_num_xlate
mov R30,R16
clr R31
lsl R30
rol R31
add R30,R24
adc R31,R25
lpm R16,Z+
lpm R17,Z
.dbline -2
L2:
.dbline 0 ; func end
ret
.dbsym r num 16 c
.dbfunc s display_digit _display_digit fI
; r2 -> R20
; r -> R22
; num -> R10,R11
.even
_display_digit::
xcall push_gset3
movw R10,R16
.dbline -1
.dbline 250
; }
; void display_digit(unsigned int num)
; {
.dbline 252
; unsigned char r,r2;
; r = 2;
ldi R22,2
L4:
.dbline 254
; do
; {
.dbline 255
; r2 = num%10;
ldi R18,10
ldi R19,0
movw R16,R10
xcall mod16u
movw R20,R16
.dbline 256
; num /= 10;
ldi R18,10
ldi R19,0
movw R16,R10
xcall div16u
movw R10,R16
.dbline 257
; g_vfd_grid_buffer[r] = num_trans(r2);
mov R16,R20
xcall _num_trans
movw R2,R16
ldi R24,<_g_vfd_grid_buffer
ldi R25,>_g_vfd_grid_buffer
mov R30,R22
clr R31
lsl R30
rol R31
add R30,R24
adc R31,R25
std z+0,R2
std z+1,R3
.dbline 258
; r++;
inc R22
.dbline 259
L5:
.dbline 259
; }while(num);
tst R10
brne L4
tst R11
brne L4
.dbline -2
.dbline 260
; }
L3:
xcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r r2 20 c
.dbsym r r 22 c
.dbsym r num 10 i
.dbfunc s tuner_display _tuner_display fI
.area func_lit(rom, con, rel)
L125:
.word `L14
.word `L30
.word `L34
.word `L95
.word `L106
.area text(rom, con, rel)
.dbfile D:\avrmcu\AT980\AT980\vfd.c
.area func_lit(rom, con, rel)
L94:
.word `L59
.word `L61
.word `L63
.word `L65
.word `L67
.word `L69
.word `L71
.word `L73
.word `L75
.word `L77
.word `L79
.word `L81
.word `L83
.word `L85
.word `L87
.word `L89
.word `L55
.word `L55
.word `L55
.word `L55
.word `L55
.word `L55
.word `L55
.word `L55
.word `L55
.word `L55
.word `L55
.word `L55
.word `L55
.word `L55
.word `L55
.word `L91
.area text(rom, con, rel)
.dbfile D:\avrmcu\AT980\AT980\vfd.c
; r -> R22
; r2 -> R20
.even
_tuner_display::
xcall push_gset2
.dbline -1
.dbline 263
;
; void tuner_display(void)
; {
.dbline 267
;
; unsigned char r,r2;
;
; switch(display_type)
lds R20,_display_type
clr R21
cpi R20,0
ldi R30,0
cpc R21,R30
brge X2
xjmp L8
X2:
ldi R24,4
ldi R25,0
cp R24,R20
cpc R25,R21
brlt L124
ldi R24,<L125
ldi R25,>L125
movw R30,R20
lsl R30
rol R31
add R30,R24
adc R31,R25
lpm R0,Z+
lpm R1,Z
movw R30,R0
ijmp
L124:
cpi R20,14
ldi R30,0
cpc R21,R30
brne X3
xjmp L116
X3:
cpi R20,15
ldi R30,0
cpc R21,R30
breq L11
xjmp L8
X0:
.dbline 268
; {
L11:
.dbline 272
;
; case DISPLAY_DIGIT:
;
; if(blink_time<3)
lds R24,_blink_time
cpi R24,3
brlo X4
xjmp L9
X4:
.dbline 273
; display_digit(radio_count);
lds R17,_radio_count+1
lds R16,_radio_count
xcall _display_digit
.dbline 274
; break;
xjmp L9
L14:
.dbline 278
;
; case DIS_FREQUENCY:
;
; display_digit(freq);
lds R17,_freq+1
lds R16,_freq
xcall _display_digit
.dbline 279
; if(g_ui_tmp_msg_cnt)
lds R2,_g_ui_tmp_msg_cnt
tst R2
breq L15
.dbline 280
; {
.dbline 281
; r = station_no;
lds R22,_station_no
.dbline 282
; r++;
inc R22
.dbline 283
; r2 =r/10;
ldi R17,10
mov R16,R22
xcall div8u
mov R20,R16
.dbline 284
; g_vfd_grid_buffer[9] = num_trans(r2);
xcall _num_trans
movw R2,R16
sts _g_vfd_grid_buffer+18+1,R3
sts _g_vfd_grid_buffer+18,R2
.dbline 285
; r2 =r%10;
ldi R17,10
mov R16,R22
xcall mod8u
mov R20,R16
.dbline 286
; g_vfd_grid_buffer[8] = num_trans(r2);
xcall _num_trans
movw R2,R16
sts _g_vfd_grid_buffer+16+1,R3
sts _g_vfd_grid_buffer+16,R2
.dbline 287
; }
xjmp L16
L15:
.dbline 289
; else
; {
.dbline 290
; if(amfm_flag)
lds R2,_amfm_flag
tst R2
breq L19
.dbline 291
; {
.dbline 292
; g_vfd_grid_buffer[9] = VFD_alpha_A;
ldi R24,4579
ldi R25,17
sts _g_vfd_grid_buffer+18+1,R25
sts _g_vfd_grid_buffer+18,R24
.dbline 293
; g_vfd_grid_buffer[8] = VFD_alpha_M;
ldi R24,54
sts _g_vfd_grid_buffer+16+1,R25
sts _g_vfd_grid_buffer+16,R24
.dbline 295
;
; }
xjmp L20
L19:
.dbline 297
; else
; {
.dbline 298
; g_vfd_grid_buffer[9] = VFD_alpha_F;
ldi R24,4321
ldi R25,16
sts _g_vfd_grid_buffer+18+1,R25
sts _g_vfd_grid_buffer+18,R24
.dbline 299
; g_vfd_grid_buffer[8] = VFD_alpha_M;
ldi R24,4406
ldi R25,17
sts _g_vfd_grid_buffer+16+1,R25
sts _g_vfd_grid_buffer+16,R24
.dbline 301
L20:
.dbline 301
;
; };
.dbline 302
L16:
.dbline 302
; };
.dbline 303
; if(amfm_flag)
lds R2,_amfm_flag
tst R2
breq L25
.dbline 304
; g_vfd_grid_buffer[2] |= VFD_LED_KHZ;
lds R25,_g_vfd_grid_buffer+4+1
lds R24,_g_vfd_grid_buffer+4
ori R25,64
sts _g_vfd_grid_buffer+4+1,R25
sts _g_vfd_grid_buffer+4,R24
xjmp L9
L25:
.dbline 306
; else
; {
.dbline 307
; g_vfd_grid_buffer[2] |= VFD_LED_MHZ;
lds R25,_g_vfd_grid_buffer+4+1
lds R24,_g_vfd_grid_buffer+4
ori R25,128
sts _g_vfd_grid_buffer+4+1,R25
sts _g_vfd_grid_buffer+4,R24
.dbline 308
; g_vfd_grid_buffer[3] |= VFD_LED_DP;
lds R25,_g_vfd_grid_buffer+6+1
lds R24,_g_vfd_grid_buffer+6
ori R25,128
sts _g_vfd_grid_buffer+6+1,R25
sts _g_vfd_grid_buffer+6,R24
.dbline 309
; };
.dbline 309
.dbline 310
; break;
xjmp L9
L30:
.dbline 314
; #ifdef SGJM_RDS
; case DIS_PS_NAME:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -