📄 tft_7.lst
字号:
__text_start:
__start:
019C E5CF LDI R28,0x5F
019D E0D4 LDI R29,4
019E BFCD OUT 0x3D,R28
019F BFDE OUT 0x3E,R29
01A0 51C0 SUBI R28,0x10
01A1 40D0 SBCI R29,0
01A2 EA0A LDI R16,0xAA
01A3 8308 STD Y+0,R16
01A4 2400 CLR R0
01A5 E5E3 LDI R30,0x53
01A6 E0F2 LDI R31,2
01A7 E013 LDI R17,3
01A8 33E1 CPI R30,0x31
01A9 07F1 CPC R31,R17
01AA F011 BEQ 0x01AD
01AB 9201 ST R0,Z+
01AC CFFB RJMP 0x01A8
01AD 8300 STD Z+0,R16
01AE E4E5 LDI R30,0x45
01AF E0F1 LDI R31,1
01B0 E6A0 LDI R26,0x60
01B1 E0B0 LDI R27,0
01B2 E013 LDI R17,3
01B3 33E8 CPI R30,0x38
01B4 07F1 CPC R31,R17
01B5 F021 BEQ 0x01BA
01B6 95C8 LPM
01B7 9631 ADIW R30,1
01B8 920D ST R0,X+
01B9 CFF9 RJMP 0x01B3
01BA D635 RCALL _main
_exit:
01BB CFFF RJMP _exit
FILE: C:\_项目\7寸液晶电视\软件\hard_iic.h
(0001) /*====================
(0002) ====================*/
(0003) #define ERROR_ADD_UP 6000
(0004) unsigned char iic_start(void)
(0005) {
(0006) unsigned int i=0;
_iic_start:
i --> R16
01BC 2700 CLR R16
01BD 2711 CLR R17
(0007) TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
01BE EA84 LDI R24,0xA4
01BF BF86 OUT 0x36,R24
01C0 C008 RJMP 0x01C9
(0008) while (!(TWCR & (1<<TWINT)))
(0009) {
(0010) i++;
01C1 5F0F SUBI R16,0xFF
01C2 4F1F SBCI R17,0xFF
(0011) if(i==ERROR_ADD_UP)
01C3 3700 CPI R16,0x70
01C4 E1E7 LDI R30,0x17
01C5 071E CPC R17,R30
01C6 F411 BNE 0x01C9
(0012) return 0;
01C7 2700 CLR R16
01C8 C00E RJMP 0x01D7
01C9 B626 IN R2,0x36
01CA FE27 SBRS R2,7
01CB CFF5 RJMP 0x01C1
(0013) }
(0014) if ((TWSR & 0xF8) == 0x08 || (TWSR & 0xF8) == 0x10)
01CC B181 IN R24,0x01
01CD 7F88 ANDI R24,0xF8
01CE 3088 CPI R24,0x8
01CF F021 BEQ 0x01D4
01D0 B181 IN R24,0x01
01D1 7F88 ANDI R24,0xF8
01D2 3180 CPI R24,0x10
01D3 F411 BNE 0x01D6
(0015) return 1;
01D4 E001 LDI R16,1
01D5 C001 RJMP 0x01D7
(0016) return 0;
01D6 2700 CLR R16
01D7 9508 RET
_iic_send:
i --> R20
x --> R16
01D8 DBE7 RCALL push_gset1
(0017) }
(0018) /////////////////////
(0019) unsigned char iic_send(unsigned char x)
(0020) {
(0021) unsigned int i=0;
01D9 2744 CLR R20
01DA 2755 CLR R21
(0022) TWDR = x;
01DB B903 OUT 0x03,R16
(0023) TWCR = (1<<TWINT) | (1<<TWEN);
01DC E884 LDI R24,0x84
01DD BF86 OUT 0x36,R24
01DE C008 RJMP 0x01E7
(0024) while (!(TWCR & (1<<TWINT)))
(0025) {
(0026) i++;
01DF 5F4F SUBI R20,0xFF
01E0 4F5F SBCI R21,0xFF
(0027) if(i==ERROR_ADD_UP)
01E1 3740 CPI R20,0x70
01E2 E1E7 LDI R30,0x17
01E3 075E CPC R21,R30
01E4 F411 BNE 0x01E7
(0028) return 0;
01E5 2700 CLR R16
01E6 C012 RJMP 0x01F9
01E7 B626 IN R2,0x36
01E8 FE27 SBRS R2,7
01E9 CFF5 RJMP 0x01DF
(0029) }
(0030) if ((TWSR & 0xF8) == 0x18 || (TWSR & 0xF8) == 0x28 || (TWSR & 0xF8) == 0x40)
01EA B181 IN R24,0x01
01EB 7F88 ANDI R24,0xF8
01EC 3188 CPI R24,0x18
01ED F041 BEQ 0x01F6
01EE B181 IN R24,0x01
01EF 7F88 ANDI R24,0xF8
01F0 3288 CPI R24,0x28
01F1 F021 BEQ 0x01F6
01F2 B181 IN R24,0x01
01F3 7F88 ANDI R24,0xF8
01F4 3480 CPI R24,0x40
01F5 F411 BNE 0x01F8
(0031) return 1;
01F6 E001 LDI R16,1
01F7 C001 RJMP 0x01F9
(0032) return 0;
01F8 2700 CLR R16
01F9 DBC9 RCALL pop_gset1
01FA 9508 RET
(0033) // return TWSR & 0xf8;
(0034) }
(0035) //////////////////////////
(0036) unsigned char iic_receive(void)
(0037) {
(0038) unsigned int i=0;
_iic_receive:
i --> R16
01FB 2700 CLR R16
01FC 2711 CLR R17
(0039) TWCR = (1<<TWINT)|(1<<TWEN);
01FD E884 LDI R24,0x84
01FE BF86 OUT 0x36,R24
01FF C008 RJMP 0x0208
(0040) while (!(TWCR & (1<<TWINT)))
(0041) {
(0042) i++;
0200 5F0F SUBI R16,0xFF
0201 4F1F SBCI R17,0xFF
(0043) if(i==ERROR_ADD_UP)
0202 3700 CPI R16,0x70
0203 E1E7 LDI R30,0x17
0204 071E CPC R17,R30
0205 F411 BNE 0x0208
(0044) return 0;
0206 2700 CLR R16
0207 C004 RJMP 0x020C
0208 B626 IN R2,0x36
0209 FE27 SBRS R2,7
020A CFF5 RJMP 0x0200
(0045) }
(0046) return TWDR;
020B B103 IN R16,0x03
020C 9508 RET
(0047) }
(0048) /////////////////////
(0049) void iic_stop(void)
(0050) {
(0051) TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWSTO);
_iic_stop:
020D E984 LDI R24,0x94
020E BF86 OUT 0x36,R24
(0052) }
020F 9508 RET
(0053) /////////////////////
(0054) void iic_init(void)
(0055) {
(0056) TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWSTO);
_iic_init:
0210 E984 LDI R24,0x94
0211 BF86 OUT 0x36,R24
(0057) }
0212 9508 RET
_IICwrite:
tmp_data --> Y+4
tmp_address --> R20
drive --> R22
0213 DBC3 RCALL push_gset2
0214 2F42 MOV R20,R18
0215 2F60 MOV R22,R16
(0058)
(0059) /*=========================================
(0060) ************IIC写*********************
(0061) =========================================*/
(0062) unsigned char IICwrite(unsigned char drive,unsigned char tmp_address,unsigned char tmp_data)
(0063) {
(0064) iic_init();
0216 DFF9 RCALL _iic_init
(0065) if(iic_start()==0)
0217 DFA4 RCALL _iic_start
0218 2300 TST R16
0219 F411 BNE 0x021C
(0066) return 0;
021A 2700 CLR R16
021B C014 RJMP 0x0230
(0067) if(iic_send(drive)==0)
021C 2F06 MOV R16,R22
021D DFBA RCALL _iic_send
021E 2300 TST R16
021F F411 BNE 0x0222
(0068) return 0;
0220 2700 CLR R16
0221 C00E RJMP 0x0230
(0069) if(iic_send(tmp_address)==0)
0222 2F04 MOV R16,R20
0223 DFB4 RCALL _iic_send
0224 2300 TST R16
0225 F411 BNE 0x0228
(0070) return 0;
0226 2700 CLR R16
0227 C008 RJMP 0x0230
(0071) if(iic_send(tmp_data)==0)
0228 810C LDD R16,Y+4
0229 DFAE RCALL _iic_send
022A 2300 TST R16
022B F411 BNE 0x022E
(0072) return 0;
022C 2700 CLR R16
022D C002 RJMP 0x0230
(0073) iic_stop();
022E DFDE RCALL _iic_stop
(0074) return 1;
022F E001 LDI R16,1
0230 DB87 RCALL pop_gset2
0231 9508 RET
_IICread:
tmp --> R20
tmp_address --> R22
drive --> R20
0232 DBA4 RCALL push_gset2
0233 2F62 MOV R22,R18
0234 2F40 MOV R20,R16
(0075) }
(0076) /*=========================================
(0077) ************IIC读*********************
(0078) =========================================*/
(0079) unsigned char IICread(unsigned char drive,unsigned char tmp_address)
(0080) {
(0081) register unsigned char tmp;
(0082) iic_stop();
0235 DFD7 RCALL _iic_stop
(0083) if(iic_start()==0)
0236 DF85 RCALL _iic_start
0237 2300 TST R16
0238 F411 BNE 0x023B
(0084) return 0;
0239 2700 CLR R16
023A C01C RJMP 0x0257
(0085) if(iic_send(drive)==0)
023B 2F04 MOV R16,R20
023C DF9B RCALL _iic_send
023D 2300 TST R16
023E F411 BNE 0x0241
(0086) return 0;
023F 2700 CLR R16
0240 C016 RJMP 0x0257
(0087) if(iic_send(tmp_address)==0)
0241 2F06 MOV R16,R22
0242 DF95 RCALL _iic_send
0243 2300 TST R16
0244 F411 BNE 0x0247
(0088) return 0;
0245 2700 CLR R16
0246 C010 RJMP 0x0257
(0089) if(iic_start()==0)
0247 DF74 RCALL _iic_start
0248 2300 TST R16
0249 F411 BNE 0x024C
(0090) return 0;
024A 2700 CLR R16
024B C00B RJMP 0x0257
(0091) if(iic_send(drive|0x01)==0)
024C 2F04 MOV R16,R20
024D 6001 ORI R16,1
024E DF89 RCALL _iic_send
024F 2300 TST R16
0250 F411 BNE 0x0253
(0092) return 0;
0251 2700 CLR R16
0252 C004 RJMP 0x0257
(0093) tmp=iic_receive();
0253 DFA7 RCALL _iic_receive
0254 2F40 MOV R20,R16
(0094) iic_stop();
0255 DFB7 RCALL _iic_stop
(0095) return tmp;
0256 2F04 MOV R16,R20
0257 DB60 RCALL pop_gset2
0258 9508 RET
_write_user_char:
j --> R20
0259 DB66 RCALL push_gset1
FILE: C:\_项目\7寸液晶电视\软件\tft_7.h
(0001) /*=======================
(0002) 文件名:TFT.h
(0003) ========================*/
(0004) #include"hard_iic.h"
(0005)
(0006) #define MAX 63 //调整的最大值
(0007) #define PLEDR 0x01 //PORTC 红色发光管
(0008) #define PVOL 0x20 //PORTB 音量控制
(0009) #define PNPC 0x08 //PORTB 制式
(0010) #define VSYNC 0x10 //PORTB 制式场频
(0011) #define NTSC 0 //PORTB 制式
(0012) #define PAL 1 //PORTB 制式
(0013) #define PBRI 0x80 //PORTB 亮度
(0014) #define PCON 0x10 //PORTD 对比度
(0015) #define PCOL 0x08 //PORTD 色饱和度
(0016) #define PHUE 0x40 //PORTB 色调
(0017) #define PTV 0x80 //PORTD 电视
(0018) #define TV 1 //PORTD 电视
(0019) #define PAV 0x40 //PORTD 外部视频
(0020) #define AV 2 //PORTD 外部视频
(0021) #define PBACK 0x20 //PORTD 后视
(0022) #define FPBACK 0x01 //PORTB 后视
(0023) #define BACK 3 //PORTD 后视
(0024) #define PMD1 0x04 //PORTC 电视
(0025) #define MD1 0 //PORTC 电视
(0026) #define PMD2 0x08 //PORTC 外部视频
(0027) #define MD2 1 //PORTC 外部视频
(0028) #define PMD3 0x04 //PORTD 后视
(0029) #define MD3 2 //PORTD 后视
(0030) #define PU_D 0x04 //PORTB 上下
(0031) #define PL_R 0x02 //PORTB 左右
(0032) #define OFF 0
(0033) #define ON 1
(0034) #define LEFT 0
(0035) #define RIGHT 1
(0036) #define UP 0
(0037) #define DOWN 1
(0038)
(0039)
(0040) #define Frequency_low 0x04e0 //最低频率8
(0041) #define Frequency_high 0x3900 //最高频率
(0042) #define OSD_TIME 500 //OSD显示时间
(0043)
(0044) #define WHITE 7
(0045) #define YELLOW 5
(0046) #define CYAN 3
(0047) #define GREEN 1
(0048) #define PURPLE 6
(0049) #define RED 4
(0050) #define BLUE 2
(0051) #define BLACK 0
(0052)
(0053) #define KMENU 100
(0054) #define KUP 101
(0055) #define KDOWN 102
(0056) #define KLEFT 103
(0057) #define KRIGHT 104
(0058) #define KAV 105
(0059) #define KBACK 106
(0060) #define KRESERVE 107
(0061)
(0062) #define DIS_VIDEO 1
(0063) #define DIS_MENU1 2
(0064) #define DIS_MENU2 3
(0065) #define DIS_VOLUME 4
(0066)
(0067) #define VOLUME 20
(0068) #define CHANNEL 1
(0069) #define CHANNEL_AMOUNT 99
(0070) #define VIDEO_INPUT TV
(0071) #define INVERSION ON
(0072)
(0073) #define volume 1
(0074) #define channel 2
(0075) #define ch_max 3
(0076) #define video_input 4
(0077) #define inversion 5
(0078)
(0079) unsigned char FOSD=0; //OSD指针
(0080) unsigned char volume_register;
(0081) unsigned char fkey=0;
(0082) unsigned char fcontinuous=0;
(0083)
(0084) unsigned long int v_sync_count=0;
(0085)
(0086) unsigned char user_config[]={
(0087) 0xaa,VOLUME,CHANNEL,CHANNEL_AMOUNT,VIDEO_INPUT,INVERSION};
(0088)
(0089) unsigned int OSD_time=OSD_TIME;
(0090)
(0091) unsigned char user_adjust[4][6]={
(0092) {30,30,30,33, 0, MD1},//机器
(0093) {23,50,40,33, 0, MD1},//电视
(0094) {23,50,40,33, 0, MD1},//视频
(0095) {23,50,40,33, 0, MD1},//后视
(0096) };
(0097)
(0098) unsigned int channel_frequency[110];
(0099)
(0100) unsigned int c_channel[] ={0x07c,0x168,0x000}; //频道
(0101) unsigned int c_volume[] ={0x062,0x000,0x063}; //音量
(0102) unsigned int c_tv[] ={0x06a,0x000,0x07b}; //电视
(0103) unsigned int c_video[] ={0x07b,0x000,0x07c}; //视频
(0104) unsigned int c_backsight[] ={0x169,0x000,0x07b}; //后视
(0105) unsigned int c_bright[] ={0x03e,0x000,0x03f}; //亮度
(0106) unsigned int c_contrast[] ={0x040,0x041,0x03f}; //对比度
(0107) unsigned int c_color[] ={0x05e,0x000,0x03f}; //色度
(0108) unsigned int c_hue[] ={0x05e,0x000,0x053}; //色调
(0109) unsigned int c_mirror[] ={0x16a,0x000,0x16b}; //镜象
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -