📄 lcdsd1335.lst
字号:
__start:
__text_start:
14F3 EFCF LDI R28,0xFF
14F4 E1D0 LDI R29,0x10
14F5 BFCD OUT 0x3D,R28
14F6 BFDE OUT 0x3E,R29
14F7 51CE SUBI R28,0x1E
14F8 40D0 SBCI R29,0
14F9 EA0A LDI R16,0xAA
14FA 8308 STD Y+0,R16
14FB 2400 CLR R0
14FC E4E1 LDI R30,0x41
14FD E0F1 LDI R31,1
14FE E011 LDI R17,1
14FF 34E1 CPI R30,0x41
1500 07F1 CPC R31,R17
1501 F011 BEQ 0x1504
1502 9201 ST R0,Z+
1503 CFFB RJMP 0x14FF
1504 8300 STD Z+0,R16
1505 EAE4 LDI R30,0xA4
1506 E2F9 LDI R31,0x29
1507 E0A0 LDI R26,0
1508 E0B1 LDI R27,1
1509 E219 LDI R17,0x29
150A E000 LDI R16,0
150B BF0B OUT 0x3B,R16
150C 3EE5 CPI R30,0xE5
150D 07F1 CPC R31,R17
150E F021 BEQ 0x1513
150F 95C8 LPM
1510 9631 ADIW R30,1
1511 920D ST R0,X+
1512 CFF9 RJMP 0x150C
1513 940E 1516 CALL _main
_exit:
1515 CFFF RJMP _exit
_main:
o --> R10
j --> R20
i --> R22
1516 9727 SBIW R28,7
FILE: F:\avr\lcdsd1330\lcd_test.c
(0001) /***********************************************************************
(0002) Content: Test for graphic library for Epson SED-1335 based LCD displays.
(0003) Last modified: 15.05.2003
(0004) Copyrights: Free to use, free to change, free to delete :-)
(0005) Compiler: ImageCraft AVR
(0006) Written by: Knut Baardsen @ Baardsen Software, Norway
(0007) Updates: http://www.baso.no
(0008) ***********************************************************************/
(0009)
(0010) /***********************************************************************
(0011) This software is provided "as is"; Without warranties either express or
(0012) implied, including any warranty regarding merchantability, fitness for
(0013) a particular purpose or noninfringement.
(0014) In no event shall Baardsen Software or its suppliers be liable for any
(0015) special,indirect,incidential or concequential damages resulting from
(0016) the use or inability to use this software.
(0017) ***********************************************************************/
(0018)
(0019)
(0020) /***********************************************************************
(0021) Includes
(0022) ***********************************************************************/
(0023) #include "global.h"
(0024)
(0025)
(0026) /***********************************************************************
(0027) Defines and globals
(0028) ***********************************************************************/
(0029) #define ClockX 160
(0030) #define ClockY 120
(0031) #define ClockOR 40
(0032) #define ClockIR 2
(0033) int sec = 0;
(0034) int min = 0;
(0035)
(0036)
(0037) /***********************************************************************
(0038) Main
(0039) ***********************************************************************/
(0040) void main()
(0041) {
(0042) int i = 0;
1517 2766 CLR R22
1518 2777 CLR R23
(0043) int j = 0;
1519 2744 CLR R20
151A 2755 CLR R21
(0044) int o = 0;
151B 24AA CLR R10
151C 24BB CLR R11
(0045) // Init the display
(0046) lcd_init();
151D 940E 1663 CALL _lcd_init
(0047) lcd_clear_text();
151F 940E 16C4 CALL _lcd_clear_text
(0048) lcd_clear_graphics();
1521 940E 171C CALL _lcd_clear_graphics
(0049)
(0050) lcd_write_command(0x4f);
1523 E40F LDI R16,0x4F
1524 940E 164E CALL _lcd_write_command
(0051) /*lcd_write_command(0x46);
(0052) lcd_write_data(0x00);
(0053) lcd_write_data(0x10);
(0054) lcd_show_cursor(1);
(0055) // lcd_show_cursor(0);
(0056) lcd_write_command(0x42);
(0057) for (i = 0;i < 16; i++)
(0058) {
(0059) lcd_write_data(jian4[i]);
(0060) }
(0061) lcd_write_command(0x46);
(0062) lcd_write_data(0x01);
(0063) lcd_write_data(0x10);
(0064)
(0065) lcd_write_command(0x42);
(0066) for (i = 16;i < 32; i++)
(0067) {
(0068) lcd_write_data(jian4[i]);
(0069) }*/
(0070)
(0071) for(j= 0; j < 40 ; j++ )
(0072) {
(0073) lcd_write_command(0x46);
1526 E406 LDI R16,0x46
1527 940E 164E CALL _lcd_write_command
(0074) lcd_write_data(0x00+j);
1529 2F04 MOV R16,R20
152A 940E 1653 CALL _lcd_write_data
(0075) lcd_write_data(0x10);
152C E100 LDI R16,0x10
152D 940E 1653 CALL _lcd_write_data
(0076) lcd_write_command(0x42);
152F E402 LDI R16,0x42
1530 940E 164E CALL _lcd_write_command
(0077) for(i = j*240; i < (240*j+240) ; i++)
1532 EF00 LDI R16,0xF0
1533 E010 LDI R17,0
1534 019A MOVW R18,R20
1535 940E 1ABE CALL empy16s
1537 01B8 MOVW R22,R16
1538 C00B RJMP 0x1544
(0078) {
(0079) lcd_write_data(~windows[i]);
1539 E184 LDI R24,0x14
153A E091 LDI R25,1
153B 01FB MOVW R30,R22
153C 0FE8 ADD R30,R24
153D 1FF9 ADC R31,R25
153E 9106 ELPM R16,1(Z)
153F 9500 COM R16
1540 940E 1653 CALL _lcd_write_data
1542 5F6F SUBI R22,0xFF
1543 4F7F SBCI R23,0xFF
1544 EF00 LDI R16,0xF0
1545 E010 LDI R17,0
1546 019A MOVW R18,R20
1547 940E 1ABE CALL empy16s
1549 01C8 MOVW R24,R16
154A 5180 SUBI R24,0x10
154B 4F9F SBCI R25,0xFF
154C 1768 CP R22,R24
154D 0779 CPC R23,R25
154E F354 BLT 0x1539
154F 5F4F SUBI R20,0xFF
1550 4F5F SBCI R21,0xFF
1551 3248 CPI R20,0x28
1552 E0E0 LDI R30,0
1553 075E CPC R21,R30
1554 F28C BLT 0x1526
(0080) }
(0081) }
(0082) while(1);
1555 CFFF RJMP 0x1555
(0083)
(0084) // Disable all interrupts
(0085) CLI();
(0086) // Set up timer 1 for about 1 second
(0087) TCCR1B = 0x00; //stop
(0088) TCNT1H = 0xE3; //setup
(0089) TCNT1L = 0xE1;
(0090) OCR1AH = 0x1C;
(0091) OCR1AL = 0x1F;
(0092) OCR1BH = 0x1C;
(0093) OCR1BL = 0x1F;
(0094) OCR1CH = 0x1C;
(0095) OCR1CL = 0x1F;
(0096) ICR1H = 0x1C;
(0097) ICR1L = 0x1F;
(0098) TCCR1A = 0x00;
(0099) TCCR1B = 0x05; //start Timer
(0100) MCUCR = 0x00;
(0101) EICRA = 0x00; //extended ext ints
(0102) EICRB = 0x00; //extended ext ints
(0103) EIMSK = 0x00;
(0104) TIMSK = 0x04; //timer interrupt sources
(0105) ETIMSK = 0x00; //extended timer interrupt sources
(0106) //lcd_chinesechar(0, 0,jian4 ,2,16,0);
(0107) // lcd_chinesechar(50, 50,jian4 ,2,16,1);
(0108) //lcd_chinesechar(10, 12,jian4 ,2,16,1);
(0109) //while(1);
(0110) // Draw a frame
(0111) lcd_rectangle(1,1,320,240,1);
(0112) lcd_rectangle(3,3,318,238,1);
(0113) // Write some text
(0114)
(0115)
(0116) lcd_goto(10,4);
(0117) lcd_write_string(" Baardsen Software");
(0118) lcd_goto(10,5);
(0119) lcd_write_string(" Svennahaugen 39");
(0120) lcd_goto(10,6);
(0121) lcd_write_string("5516 Haugesund, Norway");
(0122) //DrawClockOutline();
(0123) lcd_circle(ClockX,ClockY,ClockIR,1);
(0124) lcd_circle(ClockX,ClockY,ClockOR,1);
(0125) i = 0;
(0126)
(0127) SEI();
(0128) while (i < 360)
(0129) {
(0130) lcd_degree_line(ClockX,ClockY,i,ClockOR-5,ClockOR,1);
1556 E081 LDI R24,1
1557 838E STD Y+6,R24
1558 E288 LDI R24,0x28
1559 E090 LDI R25,0
155A 839D STD Y+5,R25
155B 838C STD Y+4,R24
155C E283 LDI R24,0x23
155D 839B STD Y+3,R25
155E 838A STD Y+2,R24
155F 8379 STD Y+1,R23
1560 8368 STD Y+0,R22
1561 E728 LDI R18,0x78
1562 E030 LDI R19,0
1563 EA00 LDI R16,0xA0
1564 E010 LDI R17,0
1565 940E 17D8 CALL _lcd_degree_line
(0131) i = i + 30;
1567 5E62 SUBI R22,0xE2
1568 4F7F SBCI R23,0xFF
1569 3668 CPI R22,0x68
156A E0E1 LDI R30,1
156B 077E CPC R23,R30
156C F34C BLT 0x1556
(0132) }
(0133) // Ok, then we enable interrupts and timer which will simulate
(0134) // a good old analog clock. Enjoy !
(0135) while(1);
156D CFFF RJMP 0x156D
156E 9627 ADIW R28,7
156F 9508 RET
_timer1_ovf_isr:
1570 920A ST R0,-Y
1571 921A ST R1,-Y
1572 922A ST R2,-Y
1573 923A ST R3,-Y
1574 924A ST R4,-Y
1575 925A ST R5,-Y
1576 926A ST R6,-Y
1577 927A ST R7,-Y
1578 928A ST R8,-Y
1579 929A ST R9,-Y
157A 930A ST R16,-Y
157B 931A ST R17,-Y
157C 932A ST R18,-Y
157D 933A ST R19,-Y
157E 938A ST R24,-Y
157F 939A ST R25,-Y
1580 93AA ST R26,-Y
1581 93BA ST R27,-Y
1582 93EA ST R30,-Y
1583 93FA ST R31,-Y
1584 B60F IN R0,0x3F
1585 920A ST R0,-Y
1586 9727 SBIW R28,7
(0136) }
(0137)
(0138)
(0139) /***********************************************************************
(0140) Interrupt handler for Timer 1 - 1 Second
(0141) ***********************************************************************/
(0142) #pragma interrupt_handler timer1_ovf_isr:iv_TIM1_OVF
(0143) void timer1_ovf_isr(void)
(0144) {
(0145) //TIMER1 has overflowed
(0146) TCNT1H = 0xE3; //reload counter high value
1587 EE83 LDI R24,0xE3
1588 BD8D OUT 0x2D,R24
(0147) TCNT1L = 0xE1; //reload counter low value
1589 EE81 LDI R24,0xE1
158A BD8C OUT 0x2C,R24
(0148) // Draw seconds
(0149) lcd_degree_line(ClockX,ClockY,sec,ClockIR+1,ClockOR-7,0);
158B 2422 CLR R2
158C 822E STD Y+6,R2
158D E281 LDI R24,0x21
158E E090 LDI R25,0
158F 839D STD Y+5,R25
1590 838C STD Y+4,R24
1591 E083 LDI R24,3
1592 839B STD Y+3,R25
1593 838A STD Y+2,R24
1594 9020 0100 LDS R2,sec
1596 9030 0101 LDS R3,sec+1
1598 8239 STD Y+1,R3
1599 8228 STD Y+0,R2
159A E728 LDI R18,0x78
159B E030 LDI R19,0
159C EA00 LDI R16,0xA0
159D E010 LDI R17,0
159E 940E 17D8 CALL _lcd_degree_line
(0150) sec = sec + 6;
15A0 9180 0100 LDS R24,sec
15A2 9190 0101 LDS R25,sec+1
15A4 9606 ADIW R24,6
15A5 9390 0101 STS sec+1,R25
15A7 9380 0100 STS sec,R24
(0151) lcd_degree_line(ClockX,ClockY,sec,ClockIR+1,ClockOR-7,1);
15A9 E081 LDI R24,1
15AA 838E STD Y+6,R24
15AB E281 LDI R24,0x21
15AC E090 LDI R25,0
15AD 839D STD Y+5,R25
15AE 838C STD Y+4,R24
15AF E083 LDI R24,3
15B0 839B STD Y+3,R25
15B1 838A STD Y+2,R24
15B2 9020 0100 LDS R2,sec
15B4 9030 0101 LDS R3,sec+1
15B6 8239 STD Y+1,R3
15B7 8228 STD Y+0,R2
15B8 E728 LDI R18,0x78
15B9 E030 LDI R19,0
15BA EA00 LDI R16,0xA0
15BB E010 LDI R17,0
15BC 940E 17D8 CALL _lcd_degree_line
(0152) // Draw minute
(0153) lcd_degree_line(ClockX,ClockY,min,ClockIR+1,ClockOR-15,1);
15BE E081 LDI R24,1
15BF 838E STD Y+6,R24
15C0 E189 LDI R24,0x19
15C1 E090 LDI R25,0
15C2 839D STD Y+5,R25
15C3 838C STD Y+4,R24
15C4 E083 LDI R24,3
15C5 839B STD Y+3,R25
15C6 838A STD Y+2,R24
15C7 9020 0102 LDS R2,min
15C9 9030 0103 LDS R3,min+1
15CB 8239 STD Y+1,R3
15CC 8228 STD Y+0,R2
15CD E728 LDI R18,0x78
15CE E030 LDI R19,0
15CF EA00 LDI R16,0xA0
15D0 E010 LDI R17,0
15D1 940E 17D8 CALL _lcd_degree_line
(0154) // Some simple checking....
(0155) if (sec >= 360)
15D3 9180 0100 LDS R24,sec
15D5 9190 0101 LDS R25,sec+1
15D7 3688 CPI R24,0x68
15D8 E0E1 LDI R30,1
15D9 079E CPC R25,R30
15DA F1C4 BLT 0x1613
(0156) {
(0157) sec = 0;
15DB 2422 CLR R2
15DC 2433 CLR R3
15DD 9230 0101 STS sec+1,R3
15DF 9220 0100 STS sec,R2
(0158) lcd_degree_line(ClockX,ClockY,min,ClockIR+1,ClockOR-15,0);
15E1 822E STD Y+6,R2
15E2 E189 LDI R24,0x19
15E3 E090 LDI R25,0
15E4 839D STD Y+5,R25
15E5 838C STD Y+4,R24
15E6 E083 LDI R24,3
15E7 839B STD Y+3,R25
15E8 838A STD Y+2,R24
15E9 9020 0102 LDS R2,min
15EB 9030 0103 LDS R3,min+1
15ED 8239 STD Y+1,R3
15EE 8228 STD Y+0,R2
15EF E728 LDI R18,0x78
15F0 E030 LDI R19,0
15F1 EA00 LDI R16,0xA0
15F2 E010 LDI R17,0
15F3 940E 17D8 CALL _lcd_degree_line
(0159) min = min + 6;
15F5 9180 0102 LDS R24,min
15F7 9190 0103 LDS R25,min+1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -