📄 lcddrive.lst
字号:
1 .file "lcddrive.c"
2 .arch atmega16
3 __SREG__ = 0x3f
4 __SP_H__ = 0x3e
5 __SP_L__ = 0x3d
6 __tmp_reg__ = 0
7 __zero_reg__ = 1
8 .global __do_copy_data
9 .global __do_clear_bss
11 .text
12 .Ltext0:
124 .global LcdPenColor
125 .data
128 LcdPenColor:
129 0000 FF0F .word 4095
130 .text
133 .global LcdSendData
135 LcdSendData:
1:lcddrive.c **** /****************************************************************************************
2:lcddrive.c **** * 文件名:LCDDRIVE.C
3:lcddrive.c **** * 功能:图形液晶98*67驱动(型号为3510I(S1D15G14))
4:lcddrive.c **** * 硬件连接:
5:lcddrive.c **** * Pin1 _Reset ------------------> PD0
6:lcddrive.c **** * Pin2 _Cs ------------------> PD1
7:lcddrive.c **** * Pin3 Gnd ------------------> GND
8:lcddrive.c **** * Pin4 Sdata ------------------> PD2
9:lcddrive.c **** * Pin5 Sclk ------------------> PD3
10:lcddrive.c **** * Pin6 Vdigital 1.8V ------------------> 3.3V
11:lcddrive.c **** * Pin7 Vbooster in 2.7V ------------------> 3.3V
12:lcddrive.c **** * Pin8 Vlcd max.12V ------------------> 0.1UF->GND
13:lcddrive.c **** ****************************************************************************************/
14:lcddrive.c **** #include "config.h"
15:lcddrive.c ****
16:lcddrive.c **** //TCOLOR gui_disp_buf[GUI_LCM_YMAX][GUI_LCM_XMAX/8]; // 声明GUI显示缓冲区
17:lcddrive.c ****
18:lcddrive.c ****
19:lcddrive.c ****
20:lcddrive.c ****
21:lcddrive.c **** //volatile uint16 LcdBakColor=CERULEAN;
22:lcddrive.c **** volatile uint16 LcdPenColor=0xfff;
23:lcddrive.c ****
24:lcddrive.c **** /***********************************************************************
25:lcddrive.c **** * 名称:LcdSendData()
26:lcddrive.c **** * 功能:写数据子程序。(发送数据前,不检查液晶模块的状态)
27:lcddrive.c **** * 入口参数:dat 要写入LCD的数据
28:lcddrive.c **** * 出口参数:无
29:lcddrive.c **** * 说明:函数会设置LCM数据总线为输出方式
30:lcddrive.c **** ***********************************************************************/
31:lcddrive.c **** void LcdSendData(uint8 Data)
32:lcddrive.c **** {
137 .LM1:
138 /* prologue: frame size=0 */
139 /* prologue end (size=0) */
140 0000 982F mov r25,r24
33:lcddrive.c **** uint8 i;
34:lcddrive.c **** SetSdataOut();
35:lcddrive.c **** ClrLcdCs();
142 .LM2:
143 /* #APP */
144 0002 9298 CBI 0x12,2
145
36:lcddrive.c **** ClrLcdSclk();
147 .LM3:
148 0004 DF98 CBI 0x1b,7
149
37:lcddrive.c **** SetLcdSdata();
151 .LM4:
152 0006 C79A SBI 0x18,7
153
38:lcddrive.c **** SetLcdSclk();
155 .LM5:
156 0008 DF9A SBI 0x1b,7
157
158 /* #NOAPP */
159 000a 30E8 ldi r19,lo8(-128)
160 000c 27E0 ldi r18,lo8(7)
161 .L5:
39:lcddrive.c ****
40:lcddrive.c **** for(i=0;i<8;i++)
41:lcddrive.c **** {
42:lcddrive.c **** PORTA=0x00;
163 .LM6:
164 000e 1BBA out 59-0x20,__zero_reg__
43:lcddrive.c **** PORTB=Data&0x80;
166 .LM7:
167 0010 892F mov r24,r25
168 0012 8078 andi r24,lo8(-128)
169 0014 88BB out 56-0x20,r24
44:lcddrive.c **** PORTA=0x80;
171 .LM8:
172 0016 3BBB out 59-0x20,r19
45:lcddrive.c **** Data<<=1;
174 .LM9:
175 0018 990F lsl r25
177 .LM10:
178 001a 2150 subi r18,lo8(-(-1))
179 001c 27FF sbrs r18,7
180 001e F7CF rjmp .L5
181 /* epilogue: frame size=0 */
182 0020 0895 ret
183 /* epilogue end (size=1) */
184 /* function LcdSendData size 29 (28) */
189 .Lscope0:
192 .global DelayXms
194 DelayXms:
46:lcddrive.c **** /*
47:lcddrive.c **** ClrLcdSclk();
48:lcddrive.c **** if(Data& DCB2HEX_TAB[i] )
49:lcddrive.c **** {
50:lcddrive.c **** SetLcdSdata();
51:lcddrive.c **** }
52:lcddrive.c **** else
53:lcddrive.c **** {
54:lcddrive.c **** ClrLcdSdata();
55:lcddrive.c **** }
56:lcddrive.c **** SetLcdSclk();
57:lcddrive.c **** */
58:lcddrive.c **** }
59:lcddrive.c **** }
60:lcddrive.c ****
61:lcddrive.c ****
62:lcddrive.c ****
63:lcddrive.c **** /***********************************************************************
64:lcddrive.c **** * 名称:DelayXms()
65:lcddrive.c **** * 功能:读取状态字子程序。
66:lcddrive.c **** * 入口参数:延时毫秒数:
67:lcddrive.c **** * 出口参数:
68:lcddrive.c **** * 说明:
69:lcddrive.c **** ***********************************************************************/
70:lcddrive.c **** /*****************************************
71:lcddrive.c **** 延时函数,用来给液晶操作延时,
72:lcddrive.c **** ******************************************/
73:lcddrive.c ****
74:lcddrive.c **** void DelayXms(uint16 xs)
75:lcddrive.c **** {
196 .LM11:
197 /* prologue: frame size=0 */
198 0022 CF93 push r28
199 0024 DF93 push r29
200 /* prologue end (size=2) */
202 .Ltext1:
1:F:/Program Files/WINAVR/avr/include/util/delay.h **** /* Copyright (c) 2002, Marek Michalkiewicz
2:F:/Program Files/WINAVR/avr/include/util/delay.h **** Copyright (c) 2004,2005 Joerg Wunsch
3:F:/Program Files/WINAVR/avr/include/util/delay.h **** All rights reserved.
4:F:/Program Files/WINAVR/avr/include/util/delay.h ****
5:F:/Program Files/WINAVR/avr/include/util/delay.h **** Redistribution and use in source and binary forms, with or without
6:F:/Program Files/WINAVR/avr/include/util/delay.h **** modification, are permitted provided that the following conditions are met:
7:F:/Program Files/WINAVR/avr/include/util/delay.h ****
8:F:/Program Files/WINAVR/avr/include/util/delay.h **** * Redistributions of source code must retain the above copyright
9:F:/Program Files/WINAVR/avr/include/util/delay.h **** notice, this list of conditions and the following disclaimer.
10:F:/Program Files/WINAVR/avr/include/util/delay.h ****
11:F:/Program Files/WINAVR/avr/include/util/delay.h **** * Redistributions in binary form must reproduce the above copyright
12:F:/Program Files/WINAVR/avr/include/util/delay.h **** notice, this list of conditions and the following disclaimer in
13:F:/Program Files/WINAVR/avr/include/util/delay.h **** the documentation and/or other materials provided with the
14:F:/Program Files/WINAVR/avr/include/util/delay.h **** distribution.
15:F:/Program Files/WINAVR/avr/include/util/delay.h ****
16:F:/Program Files/WINAVR/avr/include/util/delay.h **** * Neither the name of the copyright holders nor the names of
17:F:/Program Files/WINAVR/avr/include/util/delay.h **** contributors may be used to endorse or promote products derived
18:F:/Program Files/WINAVR/avr/include/util/delay.h **** from this software without specific prior written permission.
19:F:/Program Files/WINAVR/avr/include/util/delay.h ****
20:F:/Program Files/WINAVR/avr/include/util/delay.h **** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21:F:/Program Files/WINAVR/avr/include/util/delay.h **** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22:F:/Program Files/WINAVR/avr/include/util/delay.h **** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23:F:/Program Files/WINAVR/avr/include/util/delay.h **** ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
24:F:/Program Files/WINAVR/avr/include/util/delay.h **** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25:F:/Program Files/WINAVR/avr/include/util/delay.h **** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26:F:/Program Files/WINAVR/avr/include/util/delay.h **** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27:F:/Program Files/WINAVR/avr/include/util/delay.h **** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28:F:/Program Files/WINAVR/avr/include/util/delay.h **** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29:F:/Program Files/WINAVR/avr/include/util/delay.h **** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30:F:/Program Files/WINAVR/avr/include/util/delay.h **** POSSIBILITY OF SUCH DAMAGE. */
31:F:/Program Files/WINAVR/avr/include/util/delay.h ****
32:F:/Program Files/WINAVR/avr/include/util/delay.h **** /* $Id: delay.h,v 1.1.2.1 2005/12/12 23:19:49 joerg_wunsch Exp $ */
33:F:/Program Files/WINAVR/avr/include/util/delay.h ****
34:F:/Program Files/WINAVR/avr/include/util/delay.h **** #ifndef _UTIL_DELAY_H_
35:F:/Program Files/WINAVR/avr/include/util/delay.h **** #define _UTIL_DELAY_H_ 1
36:F:/Program Files/WINAVR/avr/include/util/delay.h ****
37:F:/Program Files/WINAVR/avr/include/util/delay.h **** #include <inttypes.h>
38:F:/Program Files/WINAVR/avr/include/util/delay.h ****
39:F:/Program Files/WINAVR/avr/include/util/delay.h **** /** \defgroup util_delay <util/delay.h>: Busy-wait delay loops
40:F:/Program Files/WINAVR/avr/include/util/delay.h **** \code
41:F:/Program Files/WINAVR/avr/include/util/delay.h **** #define F_CPU 1000000UL // 1 MHz
42:F:/Program Files/WINAVR/avr/include/util/delay.h **** //#define F_CPU 14.7456E6
43:F:/Program Files/WINAVR/avr/include/util/delay.h **** #include <util/delay.h>
44:F:/Program Files/WINAVR/avr/include/util/delay.h **** \endcode
45:F:/Program Files/WINAVR/avr/include/util/delay.h ****
46:F:/Program Files/WINAVR/avr/include/util/delay.h **** \note As an alternative method, it is possible to pass the
47:F:/Program Files/WINAVR/avr/include/util/delay.h **** F_CPU macro down to the compiler from the Makefile.
48:F:/Program Files/WINAVR/avr/include/util/delay.h **** Obviously, in that case, no \c \#define statement should be
49:F:/Program Files/WINAVR/avr/include/util/delay.h **** used.
50:F:/Program Files/WINAVR/avr/include/util/delay.h ****
51:F:/Program Files/WINAVR/avr/include/util/delay.h **** The functions in this header file implement simple delay loops
52:F:/Program Files/WINAVR/avr/include/util/delay.h **** that perform a busy-waiting. They are typically used to
53:F:/Program Files/WINAVR/avr/include/util/delay.h **** facilitate short delays in the program execution. They are
54:F:/Program Files/WINAVR/avr/include/util/delay.h **** implemented as count-down loops with a well-known CPU cycle
55:F:/Program Files/WINAVR/avr/include/util/delay.h **** count per loop iteration. As such, no other processing can
56:F:/Program Files/WINAVR/avr/include/util/delay.h **** occur simultaneously. It should be kept in mind that the
57:F:/Program Files/WINAVR/avr/include/util/delay.h **** functions described here do not disable interrupts.
58:F:/Program Files/WINAVR/avr/include/util/delay.h ****
59:F:/Program Files/WINAVR/avr/include/util/delay.h **** In general, for long delays, the use of hardware timers is
60:F:/Program Files/WINAVR/avr/include/util/delay.h **** much preferrable, as they free the CPU, and allow for
61:F:/Program Files/WINAVR/avr/include/util/delay.h **** concurrent processing of other events while the timer is
62:F:/Program Files/WINAVR/avr/include/util/delay.h **** running. However, in particular for very short delays, the
63:F:/Program Files/WINAVR/avr/include/util/delay.h **** overhead of setting up a hardware timer is too much compared
64:F:/Program Files/WINAVR/avr/include/util/delay.h **** to the overall delay time.
65:F:/Program Files/WINAVR/avr/include/util/delay.h ****
66:F:/Program Files/WINAVR/avr/include/util/delay.h **** Two inline functions are provided for the actual delay algorithms.
67:F:/Program Files/WINAVR/avr/include/util/delay.h ****
68:F:/Program Files/WINAVR/avr/include/util/delay.h **** Two wrapper functions allow the specification of microsecond, and
69:F:/Program Files/WINAVR/avr/include/util/delay.h **** millisecond delays directly, using the application-supplied macro
70:F:/Program Files/WINAVR/avr/include/util/delay.h **** F_CPU as the CPU clock frequency (in Hertz). These functions
71:F:/Program Files/WINAVR/avr/include/util/delay.h **** operate on double typed arguments, however when optimization is
72:F:/Program Files/WINAVR/avr/include/util/delay.h **** turned on, the entire floating-point calculation will be done at
73:F:/Program Files/WINAVR/avr/include/util/delay.h **** compile-time.
74:F:/Program Files/WINAVR/avr/include/util/delay.h ****
75:F:/Program Files/WINAVR/avr/include/util/delay.h **** \note When using _delay_us() and _delay_ms(), the expressions
76:F:/Program Files/WINAVR/avr/include/util/delay.h **** passed as arguments to these functions shall be compile-time
77:F:/Program Files/WINAVR/avr/include/util/delay.h **** constants, otherwise the floating-point calculations to setup the
78:F:/Program Files/WINAVR/avr/include/util/delay.h **** loops will be done at run-time, thereby drastically increasing
79:F:/Program Files/WINAVR/avr/include/util/delay.h **** both the resulting code size, as well as the time required to
80:F:/Program Files/WINAVR/avr/include/util/delay.h **** setup the loops.
81:F:/Program Files/WINAVR/avr/include/util/delay.h **** */
82:F:/Program Files/WINAVR/avr/include/util/delay.h ****
83:F:/Program Files/WINAVR/avr/include/util/delay.h **** #if !defined(__DOXYGEN__)
84:F:/Program Files/WINAVR/avr/include/util/delay.h **** static inline void _delay_loop_1(uint8_t __count) __attribute__((always_inline));
85:F:/Program Files/WINAVR/avr/include/util/delay.h **** static inline void _delay_loop_2(uint16_t __count) __attribute__((always_inline));
86:F:/Program Files/WINAVR/avr/include/util/delay.h **** static inline void _delay_us(double __us) __attribute__((always_inline));
87:F:/Program Files/WINAVR/avr/include/util/delay.h **** static inline void _delay_ms(double __ms) __attribute__((always_inline));
88:F:/Program Files/WINAVR/avr/include/util/delay.h **** #endif
89:F:/Program Files/WINAVR/avr/include/util/delay.h ****
90:F:/Program Files/WINAVR/avr/include/util/delay.h **** /** \ingroup util_delay
91:F:/Program Files/WINAVR/avr/include/util/delay.h ****
92:F:/Program Files/WINAVR/avr/include/util/delay.h **** Delay loop using an 8-bit counter \c __count, so up to 256
93:F:/Program Files/WINAVR/avr/include/util/delay.h **** iterations are possible. (The value 256 would have to be passed
94:F:/Program Files/WINAVR/avr/include/util/delay.h **** as 0.) The loop executes three CPU cycles per iteration, not
95:F:/Program Files/WINAVR/avr/include/util/delay.h **** including the overhead the compiler needs to setup the counter
96:F:/Program Files/WINAVR/avr/include/util/delay.h **** register.
97:F:/Program Files/WINAVR/avr/include/util/delay.h ****
98:F:/Program Files/WINAVR/avr/include/util/delay.h **** Thus, at a CPU speed of 1 MHz, delays of up to 768 microseconds
99:F:/Program Files/WINAVR/avr/include/util/delay.h **** can be achieved.
100:F:/Program Files/WINAVR/avr/include/util/delay.h **** */
101:F:/Program Files/WINAVR/avr/include/util/delay.h **** void
102:F:/Program Files/WINAVR/avr/include/util/delay.h **** _delay_loop_1(uint8_t __count)
103:F:/Program Files/WINAVR/avr/include/util/delay.h **** {
104:F:/Program Files/WINAVR/avr/include/util/delay.h **** __asm__ volatile (
105:F:/Program Files/WINAVR/avr/include/util/delay.h **** "1: dec %0" "\n\t"
106:F:/Program Files/WINAVR/avr/include/util/delay.h **** "brne 1b"
107:F:/Program Files/WINAVR/avr/include/util/delay.h **** : "=r" (__count)
108:F:/Program Files/WINAVR/avr/include/util/delay.h **** : "0" (__count)
109:F:/Program Files/WINAVR/avr/include/util/delay.h **** );
110:F:/Program Files/WINAVR/avr/include/util/delay.h **** }
111:F:/Program Files/WINAVR/avr/include/util/delay.h ****
112:F:/Program Files/WINAVR/avr/include/util/delay.h **** /** \ingroup util_delay
113:F:/Program Files/WINAVR/avr/include/util/delay.h ****
114:F:/Program Files/WINAVR/avr/include/util/delay.h **** Delay loop using a 16-bit counter \c __count, so up to 65536
115:F:/Program Files/WINAVR/avr/include/util/delay.h **** iterations are possible. (The value 65536 would have to be
116:F:/Program Files/WINAVR/avr/include/util/delay.h **** passed as 0.) The loop executes four CPU cycles per iteration,
117:F:/Program Files/WINAVR/avr/include/util/delay.h **** not including the overhead the compiler requires to setup the
118:F:/Program Files/WINAVR/avr/include/util/delay.h **** counter register pair.
119:F:/Program Files/WINAVR/avr/include/util/delay.h ****
120:F:/Program Files/WINAVR/avr/include/util/delay.h **** Thus, at a CPU speed of 1 MHz, delays of up to about 262.1
121:F:/Program Files/WINAVR/avr/include/util/delay.h **** milliseconds can be achieved.
122:F:/Program Files/WINAVR/avr/include/util/delay.h **** */
123:F:/Program Files/WINAVR/avr/include/util/delay.h **** void
124:F:/Program Files/WINAVR/avr/include/util/delay.h **** _delay_loop_2(uint16_t __count)
125:F:/Program Files/WINAVR/avr/include/util/delay.h **** {
126:F:/Program Files/WINAVR/avr/include/util/delay.h **** __asm__ volatile (
204 .LM12:
205 0026 9C01 movw r18,r24
206 0028 2150 subi r18,lo8(-(-1))
207 002a 3040 sbci r19,hi8(-(-1))
208 002c 8FEF ldi r24,hi8(-1)
209 002e 2F3F cpi r18,lo8(-1)
210 0030 3807 cpc r19,r24
211 0032 69F0 breq .L21
212 0034 ACEC ldi r26,lo8(2764)
213 0036 BAE0 ldi r27,hi8(2764)
214 0038 C0E0 ldi r28,hlo8(2764)
215 003a D0E0 ldi r29,hhi8(2764)
216 .L19:
217 .LBB2:
218 .LBB3:
219 .LBB4:
220 .LBB5:
222 .LM13:
223 003c CD01 movw r24,r26
224 /* #APP */
225 003e 0197 1: sbiw r24,1
226 0040 F1F7 brne 1b
227 /* #NOAPP */
228 .LBE5:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -