📄 tft_7.lst
字号:
(0110) unsigned int c_mode[] ={0x14f,0x000,0x150}; //模式
(0111)
(0112) unsigned int c_on_off[2][1] ={0x05f,0x16c};
(0113) unsigned int mode_1_2_3[3][1] ={0x002,0x003,0x004};
(0114)
(0115) unsigned int c_menu[10][3]={
(0116) {0x06a,0x000,0x07b}, //电视
(0117) {0x07b,0x000,0x07c}, //视频
(0118) {0x169,0x000,0x07b}, //后视
(0119) {0x07c,0x168,0x000}, //频道
(0120) {0x03e,0x000,0x03f}, //亮度
(0121) {0x040,0x041,0x03f}, //对比度
(0122) {0x05e,0x000,0x03f}, //色度
(0123) {0x05e,0x000,0x053}, //色调
(0124) {0x16a,0x000,0x16b}, //镜象
(0125) {0x14f,0x000,0x150}, //模式
(0126) };
(0127) unsigned int c_menu2[3][4]={
(0128) {0x074,0x133,0x16d,0x16e}, //自动搜台
(0129) {0x16f,0x133,0x16d,0x16e}, //手动搜台
(0130) {0x07c,0x000,0x000,0x168}, //频道
(0131) };
(0132)
(0133) unsigned char user_character[8][36]={ //道后镜像开搜台手
(0134) {//道
(0135) 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x20,0x22,0x40,0x0F,0xF0,0x01,0x00,
(0136) 0xE7,0xE0,0x24,0x20,0x27,0xE0,0x24,0x20,0x27,0xE0,0x24,0x20,0x50,0x00,0x8F,0xF0,
(0137) 0x00,0x00,0x00,0x00},
(0138) {//后
(0139) 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x0F,0x00,0x70,0x00,0x20,0x00,
(0140) 0x3F,0xF0,0x20,0x00,0x20,0x00,0x2F,0xE0,0x28,0x20,0x48,0x20,0x4F,0xE0,0x88,0x20,
(0141) 0x00,0x00,0x00,0x00},
(0142) {//镜
(0143) 0x00,0x00,0x00,0x00,0x00,0x00,0x21,0x00,0x27,0xE0,0x72,0x40,0x4F,0xF0,0x80,0x00,
(0144) 0x77,0xE0,0x24,0x20,0x27,0xE0,0xFC,0x20,0x27,0xE0,0x2A,0x80,0x32,0x90,0x2C,0x70,
(0145) 0x00,0x00,0x00,0x00},
(0146) {//像
(0147) 0x00,0x00,0x00,0x00,0x00,0x00,0x13,0xC0,0x14,0x80,0x2F,0xF0,0x39,0x10,0x6F,0xF0,
(0148) 0xA2,0x00,0x25,0x30,0x2B,0xC0,0x24,0xC0,0x29,0xA0,0x22,0x90,0x2C,0x80,0x21,0x80,
(0149) 0x00,0x00,0x00,0x00},
(0150) {//开
(0151) 0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xE0,0x11,0x00,0x11,0x00,0x11,0x00,0x11,0x00,
(0152) 0x11,0x00,0xFF,0xF0,0x11,0x00,0x11,0x00,0x21,0x00,0x21,0x00,0x41,0x00,0x81,0x00,
(0153) 0x00,0x00,0x00,0x00},
(0154) {//搜
(0155) 0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x80,0x26,0xB0,0x24,0x90,0xFE,0xB0,0x24,0x90,
(0156) 0x27,0xF0,0x37,0x70,0xE7,0xF0,0x22,0x20,0x21,0x40,0x20,0x80,0xA1,0x40,0x46,0x30,
(0157) 0x00,0x00,0x00,0x00},
(0158) {//台
(0159) 0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x08,0x00,0x10,0x80,0x20,0x40,0x40,0x20,
(0160) 0xFF,0xF0,0x00,0x10,0x3F,0xC0,0x20,0x40,0x20,0x40,0x20,0x40,0x3F,0xC0,0x20,0x40,
(0161) 0x00,0x00,0x00,0x00},
(0162) {//手
(0163) 0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xE0,0xFC,0x00,0x04,0x00,0x04,0x00,0xFF,0xE0,
(0164) 0x04,0x00,0x04,0x00,0xFF,0xF0,0x04,0x00,0x04,0x00,0x04,0x00,0x24,0x00,0x18,0x00,
(0165) 0x00,0x00,0x00,0x00},
(0166) };
(0167)
(0168) extern void OSD_window(unsigned char x);
(0169) extern unsigned char OSD_out_1row(unsigned char row,unsigned char col,unsigned char extent,unsigned char size,unsigned int *string);
(0170) extern unsigned char OSD_out_num(unsigned char row,unsigned char col,unsigned char value,unsigned char size);
(0171) extern unsigned char OSD_attrib_1row(unsigned char row,unsigned char col,unsigned char extent,unsigned char fg_color,unsigned char bg_color);
(0172) extern void write_custom_char(unsigned char j,unsigned char *x);
(0173) extern unsigned char gauge_num(unsigned long value);
(0174) extern void OSD_off(void);
(0175) /*=======================
(0176) 写入用户字符
(0177) ========================*/
(0178) void write_user_char(void)
(0179) {
(0180) unsigned char j;
(0181) for(j=0;j<8;j++)
025A 2744 CLR R20
025B C00A RJMP 0x0266
(0182) write_custom_char(j,user_character[j]);
025C E284 LDI R24,0x24
025D 9F84 MUL R24,R20
025E 0190 MOVW R18,R0
025F E287 LDI R24,0x27
0260 E091 LDI R25,1
0261 0F28 ADD R18,R24
0262 1F39 ADC R19,R25
0263 2F04 MOV R16,R20
0264 D867 RCALL _write_custom_char
0265 9543 INC R20
0266 3048 CPI R20,0x8
0267 F3A0 BCS 0x025C
(0183) }
0268 DB5A RCALL pop_gset1
0269 9508 RET
_FI1256read:
tmp --> R20
026A DB55 RCALL push_gset1
(0184) //**************读取FI1256hm数据****************/
(0185) unsigned char FI1256read(void)
(0186) {
(0187) unsigned char tmp;
(0188) iic_start();
026B DF50 RCALL _iic_start
(0189) if(iic_send(0xc1))
026C EC01 LDI R16,0xC1
026D DF6A RCALL _iic_send
026E 2300 TST R16
026F F029 BEQ 0x0275
(0190) {
(0191) tmp=iic_receive();
0270 DF8A RCALL _iic_receive
0271 2F40 MOV R20,R16
(0192) iic_stop();
0272 DF9A RCALL _iic_stop
(0193) return tmp;
0273 2F04 MOV R16,R20
0274 C002 RJMP 0x0277
(0194) }
(0195) iic_stop();
0275 DF97 RCALL _iic_stop
(0196) return 0;
0276 2700 CLR R16
0277 DB4B RCALL pop_gset1
0278 9508 RET
_update_user_adjust:
j --> R20
0279 DB46 RCALL push_gset1
(0197) }
(0198) /*=======================
(0199) 更新用户设定
(0200) ========================*/
(0201) void update_user_adjust(void)
(0202) {
(0203) unsigned char j;
(0204) if((FI1256read()&0x0f)!=0)
027A DFEF RCALL _FI1256read
027B 2F80 MOV R24,R16
027C 708F ANDI R24,0xF
027D F021 BEQ 0x0282
(0205) volume_register=0;
027E 2422 CLR R2
027F 92200330 STS _volume_register,R2
0281 C004 RJMP 0x0286
(0206) else
(0207) volume_register=user_config[volume];
0282 90200068 LDS R2,0x68
0284 92200330 STS _volume_register,R2
(0208) for(j=0;j<4;j++)
0286 2744 CLR R20
0287 C009 RJMP 0x0291
(0209) user_adjust[0][j]=user_adjust[user_config[video_input]][j];
0288 DB90 RCALL <created procedures>
0289 DBA2 RCALL 0x0E2C
028A DC8B RCALL 0x0F16
028B 2FE4 MOV R30,R20
028C 27FF CLR R31
028D 0FE8 ADD R30,R24
028E 1FF9 ADC R31,R25
028F 8220 STD Z+0,R2
0290 9543 INC R20
0291 3044 CPI R20,4
0292 F3A8 BCS 0x0288
(0210) }
0293 DB2F RCALL pop_gset1
0294 9508 RET
_FI1256write:
db2 --> R22
db1 --> R10
PB --> R20
Fosc --> R12
0295 DB47 RCALL push_gset4
0296 0168 MOVW R12,R16
(0211) //**************向FI1256hm写入数据****************
(0212) unsigned char FI1256write(unsigned int Fosc)
(0213) {
(0214) unsigned char db1,db2,PB;
(0215) db1=Fosc/256;
0297 0156 MOVW R10,R12
0298 2CAB MOV R10,R11
0299 24BB CLR R11
(0216) db2=Fosc%256;
029A 2D6C MOV R22,R12
029B 7070 ANDI R23,0
(0217) if(Fosc<0x0c80)
029C 01C6 MOVW R24,R12
029D 3880 CPI R24,0x80
029E E0EC LDI R30,0xC
029F 079E CPC R25,R30
02A0 F408 BCC 0x02A2
(0218) PB=0x80;
02A1 E840 LDI R20,0x80
(0219) if(Fosc>0x0c80 && Fosc<0x1d60)
02A2 E880 LDI R24,0x80
02A3 E09C LDI R25,0xC
02A4 158C CP R24,R12
02A5 059D CPC R25,R13
02A6 F430 BCC 0x02AD
02A7 01C6 MOVW R24,R12
02A8 3680 CPI R24,0x60
02A9 E1ED LDI R30,0x1D
02AA 079E CPC R25,R30
02AB F408 BCC 0x02AD
(0220) PB=0x82;
02AC E842 LDI R20,0x82
(0221) if(Fosc>0x1d60)
02AD E680 LDI R24,0x60
02AE E19D LDI R25,0x1D
02AF 158C CP R24,R12
02B0 059D CPC R25,R13
02B1 F408 BCC 0x02B3
(0222) PB=0x84;
02B2 E844 LDI R20,0x84
(0223) iic_init();
02B3 DF5C RCALL _iic_init
(0224) iic_start();
02B4 DF07 RCALL _iic_start
(0225) if(iic_send(0xc0))
02B5 EC00 LDI R16,0xC0
02B6 DF21 RCALL _iic_send
02B7 2300 TST R16
02B8 F099 BEQ 0x02CC
(0226) {
(0227) if(iic_send(db1) && iic_send(db2) && iic_send(PB) && iic_send(0x00))
02B9 2D0A MOV R16,R10
02BA DF1D RCALL _iic_send
02BB 2300 TST R16
02BC F079 BEQ 0x02CC
02BD 2F06 MOV R16,R22
02BE DF19 RCALL _iic_send
02BF 2300 TST R16
02C0 F059 BEQ 0x02CC
02C1 2F04 MOV R16,R20
02C2 DF15 RCALL _iic_send
02C3 2300 TST R16
02C4 F039 BEQ 0x02CC
02C5 2700 CLR R16
02C6 DF11 RCALL _iic_send
02C7 2300 TST R16
02C8 F019 BEQ 0x02CC
(0228) {
(0229) iic_stop();
02C9 DF43 RCALL _iic_stop
(0230) return FI1256read();
02CA DF9F RCALL _FI1256read
02CB C002 RJMP 0x02CE
(0231) }
(0232) }
(0233) iic_stop();
02CC DF40 RCALL _iic_stop
(0234) return 0;
02CD 2700 CLR R16
02CE DAED RCALL pop_gset4
02CF 9508 RET
_video_choose:
x --> R16
02D0 DAEF RCALL push_gset1
(0235) }
(0236) /*========================
(0237) 视频源选择
(0238) ========================*/
(0239) void video_choose(unsigned char x)
(0240) {
(0241) switch(x)
02D1 2F40 MOV R20,R16
02D2 DC14 RCALL 0x0EE7
02D3 F049 BEQ 0x02DD
02D4 3042 CPI R20,2
02D5 E0E0 LDI R30,0
02D6 075E CPC R21,R30
02D7 F051 BEQ 0x02E2
02D8 3043 CPI R20,3
02D9 E0E0 LDI R30,0
02DA 075E CPC R21,R30
02DB F059 BEQ 0x02E7
02DC C00E RJMP 0x02EB
(0242) {
(0243) case 1: //TV
(0244) PORTD|=PAV|PBACK;
02DD B382 IN R24,0x12
02DE 6680 ORI R24,0x60
02DF BB82 OUT 0x12,R24
(0245) PORTD&=~PTV;
02E0 9897 CBI 0x12,7
(0246) break;
02E1 C009 RJMP 0x02EB
(0247) case 2: //AV
(0248) PORTD|=PTV|PBACK;
02E2 B382 IN R24,0x12
02E3 6A80 ORI R24,0xA0
02E4 BB82 OUT 0x12,R24
(0249) PORTD&=~PAV;
02E5 9896 CBI 0x12,6
(0250) break;
02E6 C004 RJMP 0x02EB
(0251) case 3: //BACK
(0252) PORTD|=PAV|PTV;
02E7 B382 IN R24,0x12
02E8 6C80 ORI R24,0xC0
02E9 BB82 OUT 0x12,R24
(0253) PORTD&=~PBACK;
02EA 9895 CBI 0x12,5
(0254) break;
(0255) }
(0256) }
02EB DAD7 RCALL pop_gset1
02EC 9508 RET
_screen_mode:
x --> R16
02ED DAD2 RCALL push_gset1
(0257) /*========================
(0258) 模式
(0259) ========================*/
(0260) void screen_mode(unsigned char x)
(0261) {
(0262) switch(x)
02EE 2F40 MOV R20,R16
02EF 2755 CLR R21
02F0 3040 CPI R20,0
02F1 0745 CPC R20,R21
02F2 F049 BEQ 0x02FC
02F3 3041 CPI R20,1
02F4 E0E0 LDI R30,0
02F5 075E CPC R21,R30
02F6 F049 BEQ 0x0300
02F7 3042 CPI R20,2
02F8 E0E0 LDI R30,0
02F9 075E CPC R21,R30
02FA F049 BEQ 0x0304
02FB C00B RJMP 0x0307
(0263) {
(0264) case MD1: //16:9
(0265) PORTC&=~PMD2;
02FC 98AB CBI 0x15,3
(0266) PORTC&=~PMD1;
02FD 98AA CBI 0x15,2
(0267) PORTD&=~PMD3;
02FE 9892 CBI 0x12,2
(0268) break;
02FF C007 RJMP 0x0307
(0269) case MD2: //4:3 适应高
(0270) PORTC|=PMD1;
0300 9AAA SBI 0x15,2
(0271) PORTC&=~PMD2;
0301 98AB CBI 0x15,3
(0272) PORTD&=~PMD3;
0302 9892 CBI 0x12,2
(0273) break;
0303 C003 RJMP 0x0307
(0274) case MD3: //4:3 适应宽
(0275) PORTC&=~PMD1;
0304 98AA CBI 0x15,2
(0276) PORTC&=~PMD2;
0305 98AB CBI 0x15,3
(0277) PORTD|=PMD3;
0306 9A92 SBI 0x12,2
(0278) break;
(0279) }
(0280) }
0307 DABB RCALL pop_gset1
0308 9508 RET
(0281) /*========================
(0282) PAL/NTSC
(0283) ========================*/
(0284) void pal_ntsc(unsigned char x)
(0285) {
(0286) if(x==NTSC)
_pal_ntsc:
x --> R16
0309 2300 TST R16
030A F411 BNE 0x030D
(0287) {
(0288) PORTB|=PNPC;
030B 9AC3 SBI 0x18,3
(0289) }
030C C001 RJMP 0x030E
(0290) else
(0291) {
(0292) PORTB&=~PNPC;
030D 98C3 CBI 0x18,3
(0293) }
(0294) }
030E 9508 RET
(0295) /*========================
(0296) 倒置
(0297) ========================*/
(0298) void screen_inversion(unsigned char x)
(0299) {
(0300) if(x==ON)
_screen_inversion:
x --> R16
030F 3001 CPI R16,1
0310 F411 BNE 0x0313
(0301) {
(0302) PORTB&=~PU_D;
0311 98C2 CBI 0x18,2
(0303) }
0312 C001 RJMP 0x0314
(0304) else
(0305) {
(0306) PORTB|=PU_D;
0313 9AC2 SBI 0x18,2
(0307) }
(0308) }
0314 9508 RET
(0309) /*========================
(0310) 镜像
(0311) ========================*/
(0312) void screen_mirror(unsigned char x)
(0313) {
(0314) if(x==ON)
_screen_mirror:
x --> R16
0315 3001 CPI R16,1
0316 F441 BNE 0x031F
(0315) {
(0316) if(user_config[inversion]==ON)
0317 9180006C LDS R24,0x6C
0319 3081 CPI R24,1
031A F411 BNE 0x031D
(0317) PORTB|=PL_R;
031B 9AC1 SBI 0x18,1
031C C009 RJMP 0x0326
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -