📄 lcd.lst
字号:
__text_start:
__start:
39 EFCF LDI R28,0xFF
3A E0D4 LDI R29,4
3B BFCD OUT 0x3D,R28
3C BFDE OUT 0x3E,R29
3D 51C0 SUBI R28,0x10
3E 40D0 SBCI R29,0
3F EA0A LDI R16,0xAA
40 8308 STD Y+0,R16
41 2400 CLR R0
42 E0E0 LDI R30,0
43 E0F1 LDI R31,1
44 E011 LDI R17,1
45 30E0 CPI R30,0
46 07F1 CPC R31,R17
47 F011 BEQ 0x004A
48 9201 ST R0,Z+
49 CFFB RJMP 0x0045
4A 8300 STD Z+0,R16
4B E7E2 LDI R30,0x72
4C E0F0 LDI R31,0
4D E0A0 LDI R26,0
4E E0B1 LDI R27,1
4F E010 LDI R17,0
50 37E2 CPI R30,0x72
51 07F1 CPC R31,R17
52 F021 BEQ 0x0057
53 95C8 LPM
54 9631 ADIW R30,1
55 920D ST R0,X+
56 CFF9 RJMP 0x0050
57 940E 00AF CALL _main
_exit:
59 CFFF RJMP _exit
FILE: C:\TDdownload\zxy\169demo\169LCD\lcd动态校验\lcd.c
(0001) // **************************************************************
(0002) // *** 广 州 天 河 双 龙 电 子 公 司 ***
(0003) // *** http://www.sl.com.cn ***
(0004) // *** lcd 显示校验 ***
(0005) // *** 作者:zxy@sl.com.cn ***
(0006) // *** 2006年3月28日 ***
(0007) // *** 目标MCU:MEGA169 晶振:内部(INT)8MHZ ***
(0008) // **************************************************************
(0009) //实验效果:0-9动态循环显示
(0010) #include <iom169v.h>
(0011) #include <macros.h>
(0012) #define pLCDREG (*(unsigned char *)(0xEC))
(0013) const unsigned int LCD_character_table[] = // Character definitions table.
(0014) {
(0015) 0x1323, // '0'
(0016) 0x0220, // '1'
(0017) 0x1132, // '2'
(0018) 0x1232, // '3'
(0019) 0x0231, // '4'
(0020) 0x1213, // '5'
(0021) 0x1313, // '6'
(0022) 0x0222, // '7'
(0023) 0x1333, // '8'
(0024) 0x1233, // '9'
(0025) 0x2220 // 'c'
(0026) };
(0027) void port_init(void)
(0028) {
(0029) PORTA = 0x00;
_port_init:
5A 2422 CLR R2
5B B822 OUT 0x02,R2
(0030) DDRA = 0x00;
5C B821 OUT 0x01,R2
(0031) PORTC = 0x00;
5D B828 OUT 0x08,R2
(0032) DDRC = 0x00;
5E B827 OUT 0x07,R2
(0033) PORTD = 0x00;
5F B82B OUT 0x0B,R2
(0034) DDRD = 0x00;
60 B82A OUT 0x0A,R2
(0035) PORTG = 0x00;
61 BA24 OUT 0x14,R2
(0036) DDRG = 0x00;
62 BA23 OUT 0x13,R2
63 9508 RET
(0037) }
(0038) /* 微秒级延时程序 */
(0039) void delay_us(int time)
(0040) {
(0041) do
(0042) {
(0043) time--;
_delay_us:
time --> R16
64 5001 SUBI R16,1
65 4010 SBCI R17,0
(0044) }
(0045) while (time>1);
66 E081 LDI R24,1
67 E090 LDI R25,0
68 1780 CP R24,R16
69 0791 CPC R25,R17
6A F3CC BLT 0x0064
6B 9508 RET
_delay_ms:
time --> R20
6C 934A ST R20,-Y
6D 935A ST R21,-Y
6E 01A8 MOVW R20,R16
(0046) }
(0047) /* 毫秒级延时程序 */
(0048) void delay_ms(unsigned int time)
(0049) {
6F C005 RJMP 0x0075
(0050) while(time!=0)
(0051) {
(0052) delay_us(1000);
70 EE08 LDI R16,0xE8
71 E013 LDI R17,3
72 DFF1 RCALL _delay_us
(0053) time--;
73 5041 SUBI R20,1
74 4050 SBCI R21,0
75 3040 CPI R20,0
76 0745 CPC R20,R21
77 F7C1 BNE 0x0070
78 9159 LD R21,Y+
79 9149 LD R20,Y+
7A 9508 RET
(0054) }
(0055) }
(0056) void lcd_init(void)
(0057) {
(0058)
(0059) LCDCRA = (1<<LCDEN);
_lcd_init:
7B E880 LDI R24,0x80
7C 9380 00E4 STS 0x00E4,R24
(0060) /* 晶体振荡器*/
(0061) /* 1/3 偏置和1/4 占空比 */
(0062) LCDCRB = (0<<LCDCS) |(1<<LCDMUX1)| (1<<LCDMUX0)| (1<<LCDPM2)| (1<<LCDPM1)| (1<<LCDPM0);
7E E387 LDI R24,0x37
7F 9380 00E5 STS 0x00E5,R24
(0063) /* 选择16 为预分频因子,7 为LCD 时钟分频数*/
(0064) /* 得到帧速率为 Hz */
(0065) LCDFRR = (1<<LCDPS2) |(1<<LCDPS1) |(0<<LCDPS0) |(1<<LCDCD2) | (1<<LCDCD1) | (0<<LCDCD0);
81 E686 LDI R24,0x66
82 9380 00E6 STS 0x00E6,R24
(0066) /* 设置输出电压为3.3 V */
(0067) LCDCCR = (1<<LCDCC3) | (1<<LCDCC2) | (1<<LCDCC1) | (1<<LCDCC0);
84 E08F LDI R24,0xF
85 9380 00E7 STS 0x00E7,R24
(0068) /* 使能LCD,缺省波形并禁止所有中断*/
(0069)
(0070) LCDDR0=0x00;
87 2422 CLR R2
88 9220 00EC STS 0x00EC,R2
(0071) LCDDR1=0x00;
8A 9220 00ED STS 0x00ED,R2
(0072) LCDDR2=0x00;
8C 9220 00EE STS 0x00EE,R2
(0073) LCDDR3=0x00;
8E 9220 00EF STS 0x00EF,R2
(0074) LCDDR5=0x00;
90 9220 00F1 STS 0x00F1,R2
(0075) LCDDR6=0x00;
92 9220 00F2 STS 0x00F2,R2
(0076) LCDDR7=0x00;
94 9220 00F3 STS 0x00F3,R2
(0077) LCDDR8=0x00;
96 9220 00F4 STS 0x00F4,R2
(0078) LCDDR10=0x00;
98 9220 00F6 STS 0x00F6,R2
(0079) LCDDR11=0x00;
9A 9220 00F7 STS 0x00F7,R2
(0080) LCDDR12=0x00;
9C 9220 00F8 STS 0x00F8,R2
(0081) LCDDR13=0x00;
9E 9220 00F9 STS 0x00F9,R2
(0082) LCDDR15=0x00;
A0 9220 00FB STS 0x00FB,R2
(0083) LCDDR16=0x00;
A2 9220 00FC STS 0x00FC,R2
(0084) LCDDR17=0x00;
A4 9220 00FD STS 0x00FD,R2
(0085) LCDDR18=0x00;
A6 9220 00FE STS 0x00FE,R2
(0086) LCDCRA=(1<<LCDEN);
A8 E880 LDI R24,0x80
A9 9380 00E4 STS 0x00E4,R24
AB 9508 RET
(0087) }
(0088) void init_devices(void)
(0089) {
(0090)
(0091) port_init();
_init_devices:
AC DFAD RCALL _port_init
(0092) lcd_init();
AD DFCD RCALL _lcd_init
AE 9508 RET
(0093)
(0094) }
(0095)
(0096) void main(void)
(0097) {
(0098) unsigned int i,j,m,n=0;
_main:
n --> R10
i --> R20
j --> R10
m --> R22
AF 24AA CLR R10
B0 24BB CLR R11
(0099) init_devices();
B1 DFFA RCALL _init_devices
B2 C23E RJMP 0x02F1
(0100) while(1)
(0101) {
(0102) while ( !(LCDCRA & (1<<LCDIF)) );
B3 9020 00E4 LDS R2,0x00E4
B5 FE24 SBRS R2,4
B6 CFFC RJMP 0x00B3
(0103) LCDCRA = (1<<LCDEN)|(1<<LCDIF);
B7 E980 LDI R24,0x90
B8 9380 00E4 STS 0x00E4,R24
(0104) for(i=0;i<10;i++)
BA 2744 CLR R20
BB 2755 CLR R21
BC C22F RJMP 0x02EC
(0105) {
(0106) j=LCD_character_table[i]; //左1位
BD E002 LDI R16,2
BE E010 LDI R17,0
BF 019A MOVW R18,R20
C0 940E 02F3 CALL empy16s
C2 01F8 MOVW R30,R16
C3 E58C LDI R24,0x5C
C4 E090 LDI R25,0
C5 0FE8 ADD R30,R24
C6 1FF9 ADC R31,R25
C7 90A5 LPM R10,Z+
C8 90B4 LPM R11,0(Z)
(0107) //j=j<<n;
(0108) m=j&0x000f;
C9 01B5 MOVW R22,R10
CA 706F ANDI R22,0xF
CB 7070 ANDI R23,0
(0109) LCDDR0=m;
CC 9360 00EC STS 0x00EC,R22
(0110) m=(j>>4)&0x000f;
CE 01B5 MOVW R22,R10
CF 9576 LSR R23
D0 9567 ROR R22
D1 9576 LSR R23
D2 9567 ROR R22
D3 9576 LSR R23
D4 9567 ROR R22
D5 9576 LSR R23
D6 9567 ROR R22
D7 706F ANDI R22,0xF
D8 7070 ANDI R23,0
(0111) LCDDR5=m;
D9 9360 00F1 STS 0x00F1,R22
(0112) m=(j>>8)&0x000f;
DB 01B5 MOVW R22,R10
DC 2F67 MOV R22,R23
DD 2777 CLR R23
DE 706F ANDI R22,0xF
DF 7070 ANDI R23,0
(0113) LCDDR10=m;
E0 9360 00F6 STS 0x00F6,R22
(0114) m=(j>>12)&0x000f;
E2 E02C LDI R18,0xC
E3 E030 LDI R19,0
E4 0185 MOVW R16,R10
E5 940E 030A CALL lsr16
E7 01B8 MOVW R22,R16
E8 706F ANDI R22,0xF
E9 7070 ANDI R23,0
(0115) LCDDR15=m;
EA 9360 00FB STS 0x00FB,R22
(0116)
(0117)
(0118) j=LCD_character_table[i]; //左2位
EC E002 LDI R16,2
ED E010 LDI R17,0
EE 019A MOVW R18,R20
EF 940E 02F3 CALL empy16s
F1 01F8 MOVW R30,R16
F2 E58C LDI R24,0x5C
F3 E090 LDI R25,0
F4 0FE8 ADD R30,R24
F5 1FF9 ADC R31,R25
F6 90A5 LPM R10,Z+
F7 90B4 LPM R11,0(Z)
(0119) j=j<<2;
F8 0CAA LSL R10
F9 1CBB ROL R11
FA 0CAA LSL R10
FB 1CBB ROL R11
(0120) m=j&0x000f;
FC 01B5 MOVW R22,R10
FD 706F ANDI R22,0xF
FE 7070 ANDI R23,0
(0121) LCDDR0|=m;
FF 9020 00EC LDS R2,0x00EC
101 2433 CLR R3
102 2A26 OR R2,R22
103 2A37 OR R3,R23
104 9220 00EC STS 0x00EC,R2
(0122) m=(j>>4)&0x000f;
106 01B5 MOVW R22,R10
107 9576 LSR R23
108 9567 ROR R22
109 9576 LSR R23
10A 9567 ROR R22
10B 9576 LSR R23
10C 9567 ROR R22
10D 9576 LSR R23
10E 9567 ROR R22
10F 706F ANDI R22,0xF
110 7070 ANDI R23,0
(0123) LCDDR5|=m;
111 9020 00F1 LDS R2,0x00F1
113 2433 CLR R3
114 2A26 OR R2,R22
115 2A37 OR R3,R23
116 9220 00F1 STS 0x00F1,R2
(0124) m=(j>>8)&0x000f;
118 01B5 MOVW R22,R10
119 2F67 MOV R22,R23
11A 2777 CLR R23
11B 706F ANDI R22,0xF
11C 7070 ANDI R23,0
(0125) LCDDR10|=m;
11D 9020 00F6 LDS R2,0x00F6
11F 2433 CLR R3
120 2A26 OR R2,R22
121 2A37 OR R3,R23
122 9220 00F6 STS 0x00F6,R2
(0126) m=(j>>12)&0x000f;
124 E02C LDI R18,0xC
125 E030 LDI R19,0
126 0185 MOVW R16,R10
127 940E 030A CALL lsr16
129 01B8 MOVW R22,R16
12A 706F ANDI R22,0xF
12B 7070 ANDI R23,0
(0127) LCDDR15|=m;
12C 9020 00FB LDS R2,0x00FB
12E 2433 CLR R3
12F 2A26 OR R2,R22
130 2A37 OR R3,R23
131 9220 00FB STS 0x00FB,R2
(0128)
(0129) m=LCDDR0<<2; //左3位
133 9160 00EC LDS R22,0x00EC
135 2777 CLR R23
136 0F66 LSL R22
137 1F77 ROL R23
138 0F66 LSL R22
139 1F77 ROL R23
(0130) LCDDR0|=m;
13A 9020 00EC LDS R2,0x00EC
13C 2433 CLR R3
13D 2A26 OR R2,R22
13E 2A37 OR R3,R23
13F 9220 00EC STS 0x00EC,R2
(0131) m=LCDDR5<<2;
141 9160 00F1 LDS R22,0x00F1
143 2777 CLR R23
144 0F66 LSL R22
145 1F77 ROL R23
146 0F66 LSL R22
147 1F77 ROL R23
(0132) LCDDR5|=m;
148 9020 00F1 LDS R2,0x00F1
14A 2433 CLR R3
14B 2A26 OR R2,R22
14C 2A37 OR R3,R23
14D 9220 00F1 STS 0x00F1,R2
(0133) m=LCDDR10<<2;
14F 9160 00F6 LDS R22,0x00F6
151 2777 CLR R23
152 0F66 LSL R22
153 1F77 ROL R23
154 0F66 LSL R22
155 1F77 ROL R23
(0134) LCDDR10|=m;
156 9020 00F6 LDS R2,0x00F6
158 2433 CLR R3
159 2A26 OR R2,R22
15A 2A37 OR R3,R23
15B 9220 00F6 STS 0x00F6,R2
(0135) m=LCDDR15<<2;
15D 9160 00FB LDS R22,0x00FB
15F 2777 CLR R23
160 0F66 LSL R22
161 1F77 ROL R23
162 0F66 LSL R22
163 1F77 ROL R23
(0136) LCDDR15|=m;
164 9020 00FB LDS R2,0x00FB
166 2433 CLR R3
167 2A26 OR R2,R22
168 2A37 OR R3,R23
169 9220 00FB STS 0x00FB,R2
(0137)
(0138) m=LCDDR0<<2; //左4位
16B 9160 00EC LDS R22,0x00EC
16D 2777 CLR R23
16E 0F66 LSL R22
16F 1F77 ROL R23
170 0F66 LSL R22
171 1F77 ROL R23
(0139) LCDDR0|=m;
172 9020 00EC LDS R2,0x00EC
174 2433 CLR R3
175 2A26 OR R2,R22
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -