📄 lcd.s
字号:
.module lcd.c
.area text(rom, con, rel)
.dbfile C:\TDdownload\zxy\169demo\169LCD\lcd动态校验\lcd.c
.area lit(rom, con, rel)
_LCD_character_table::
.word 4899
.word 544
.word 4402
.word 4658
.word 561
.word 4627
.word 4883
.word 546
.word 4915
.word 4659
.word 8736
.dbsym e LCD_character_table _LCD_character_table A[22:11]ki
.area text(rom, con, rel)
.dbfile C:\TDdownload\zxy\169demo\169LCD\lcd动态校验\lcd.c
.dbfunc e port_init _port_init fV
.even
_port_init::
.dbline -1
.dbline 28
; // **************************************************************
; // *** 广 州 天 河 双 龙 电 子 公 司 ***
; // *** http://www.sl.com.cn ***
; // *** lcd 显示校验 ***
; // *** 作者:zxy@sl.com.cn ***
; // *** 2006年3月28日 ***
; // *** 目标MCU:MEGA169 晶振:内部(INT)8MHZ ***
; // **************************************************************
; //实验效果:0-9动态循环显示
; #include <iom169v.h>
; #include <macros.h>
; #define pLCDREG (*(unsigned char *)(0xEC))
; const unsigned int LCD_character_table[] = // Character definitions table.
; {
; 0x1323, // '0'
; 0x0220, // '1'
; 0x1132, // '2'
; 0x1232, // '3'
; 0x0231, // '4'
; 0x1213, // '5'
; 0x1313, // '6'
; 0x0222, // '7'
; 0x1333, // '8'
; 0x1233, // '9'
; 0x2220 // 'c'
; };
; void port_init(void)
; {
.dbline 29
; PORTA = 0x00;
clr R2
out 0x2,R2
.dbline 30
; DDRA = 0x00;
out 0x1,R2
.dbline 31
; PORTC = 0x00;
out 0x8,R2
.dbline 32
; DDRC = 0x00;
out 0x7,R2
.dbline 33
; PORTD = 0x00;
out 0xb,R2
.dbline 34
; DDRD = 0x00;
out 0xa,R2
.dbline 35
; PORTG = 0x00;
out 0x14,R2
.dbline 36
; DDRG = 0x00;
out 0x13,R2
.dbline -2
L1:
.dbline 0 ; func end
ret
.dbend
.dbfunc e delay_us _delay_us fV
; time -> R16,R17
.even
_delay_us::
.dbline -1
.dbline 40
; }
; /* 微秒级延时程序 */
; void delay_us(int time)
; {
L3:
.dbline 42
; do
; {
.dbline 43
; time--;
subi R16,1
sbci R17,0
.dbline 44
; }
L4:
.dbline 45
; while (time>1);
ldi R24,1
ldi R25,0
cp R24,R16
cpc R25,R17
brlt L3
X0:
.dbline -2
L2:
.dbline 0 ; func end
ret
.dbsym r time 16 I
.dbend
.dbfunc e delay_ms _delay_ms fV
; time -> R20,R21
.even
_delay_ms::
st -y,R20
st -y,R21
movw R20,R16
.dbline -1
.dbline 49
; }
; /* 毫秒级延时程序 */
; void delay_ms(unsigned int time)
; {
xjmp L8
L7:
.dbline 51
; while(time!=0)
; {
.dbline 52
; delay_us(1000);
ldi R16,1000
ldi R17,3
xcall _delay_us
.dbline 53
; time--;
subi R20,1
sbci R21,0
.dbline 54
; }
L8:
.dbline 50
cpi R20,0
cpc R20,R21
brne L7
X1:
.dbline -2
L6:
.dbline 0 ; func end
ld R21,y+
ld R20,y+
ret
.dbsym r time 20 i
.dbend
.dbfunc e lcd_init _lcd_init fV
.even
_lcd_init::
.dbline -1
.dbline 57
; }
; void lcd_init(void)
; {
.dbline 59
;
; LCDCRA = (1<<LCDEN);
ldi R24,128
sts 228,R24
.dbline 62
; /* 晶体振荡器*/
; /* 1/3 偏置和1/4 占空比 */
; LCDCRB = (0<<LCDCS) |(1<<LCDMUX1)| (1<<LCDMUX0)| (1<<LCDPM2)| (1<<LCDPM1)| (1<<LCDPM0);
ldi R24,55
sts 229,R24
.dbline 65
; /* 选择16 为预分频因子,7 为LCD 时钟分频数*/
; /* 得到帧速率为 Hz */
; LCDFRR = (1<<LCDPS2) |(1<<LCDPS1) |(0<<LCDPS0) |(1<<LCDCD2) | (1<<LCDCD1) | (0<<LCDCD0);
ldi R24,102
sts 230,R24
.dbline 67
; /* 设置输出电压为3.3 V */
; LCDCCR = (1<<LCDCC3) | (1<<LCDCC2) | (1<<LCDCC1) | (1<<LCDCC0);
ldi R24,15
sts 231,R24
.dbline 70
; /* 使能LCD,缺省波形并禁止所有中断*/
;
; LCDDR0=0x00;
clr R2
sts 236,R2
.dbline 71
; LCDDR1=0x00;
sts 237,R2
.dbline 72
; LCDDR2=0x00;
sts 238,R2
.dbline 73
; LCDDR3=0x00;
sts 239,R2
.dbline 74
; LCDDR5=0x00;
sts 241,R2
.dbline 75
; LCDDR6=0x00;
sts 242,R2
.dbline 76
; LCDDR7=0x00;
sts 243,R2
.dbline 77
; LCDDR8=0x00;
sts 244,R2
.dbline 78
; LCDDR10=0x00;
sts 246,R2
.dbline 79
; LCDDR11=0x00;
sts 247,R2
.dbline 80
; LCDDR12=0x00;
sts 248,R2
.dbline 81
; LCDDR13=0x00;
sts 249,R2
.dbline 82
; LCDDR15=0x00;
sts 251,R2
.dbline 83
; LCDDR16=0x00;
sts 252,R2
.dbline 84
; LCDDR17=0x00;
sts 253,R2
.dbline 85
; LCDDR18=0x00;
sts 254,R2
.dbline 86
; LCDCRA=(1<<LCDEN);
ldi R24,128
sts 228,R24
.dbline -2
L10:
.dbline 0 ; func end
ret
.dbend
.dbfunc e init_devices _init_devices fV
.even
_init_devices::
.dbline -1
.dbline 89
; }
; void init_devices(void)
; {
.dbline 91
;
; port_init();
xcall _port_init
.dbline 92
; lcd_init();
xcall _lcd_init
.dbline -2
L11:
.dbline 0 ; func end
ret
.dbend
.dbfunc e main _main fV
; n -> R10,R11
; i -> R20,R21
; j -> R10,R11
; m -> R22,R23
.even
_main::
.dbline -1
.dbline 97
;
; }
;
; void main(void)
; {
.dbline 98
; unsigned int i,j,m,n=0;
clr R10
clr R11
.dbline 99
; init_devices();
xcall _init_devices
xjmp L14
L16:
.dbline 102
; while(1)
; {
; while ( !(LCDCRA & (1<<LCDIF)) );
L17:
.dbline 102
lds R2,228
sbrs R2,4
rjmp L16
X2:
.dbline 103
; LCDCRA = (1<<LCDEN)|(1<<LCDIF);
ldi R24,144
sts 228,R24
.dbline 104
; for(i=0;i<10;i++)
clr R20
clr R21
xjmp L22
L19:
.dbline 105
; {
.dbline 106
; j=LCD_character_table[i]; //左1位
ldi R16,2
ldi R17,0
movw R18,R20
xcall empy16s
movw R30,R16
ldi R24,<_LCD_character_table
ldi R25,>_LCD_character_table
add R30,R24
adc R31,R25
lpm R10,Z+
lpm R11,Z
.dbline 108
; //j=j<<n;
; m=j&0x000f;
movw R22,R10
andi R22,15
andi R23,0
.dbline 109
; LCDDR0=m;
sts 236,R22
.dbline 110
; m=(j>>4)&0x000f;
movw R22,R10
lsr R23
ror R22
lsr R23
ror R22
lsr R23
ror R22
lsr R23
ror R22
andi R22,15
andi R23,0
.dbline 111
; LCDDR5=m;
sts 241,R22
.dbline 112
; m=(j>>8)&0x000f;
movw R22,R10
mov R22,R23
clr R23
andi R22,15
andi R23,0
.dbline 113
; LCDDR10=m;
sts 246,R22
.dbline 114
; m=(j>>12)&0x000f;
ldi R18,12
ldi R19,0
movw R16,R10
xcall lsr16
movw R22,R16
andi R22,15
andi R23,0
.dbline 115
; LCDDR15=m;
sts 251,R22
.dbline 118
;
;
; j=LCD_character_table[i]; //左2位
ldi R16,2
ldi R17,0
movw R18,R20
xcall empy16s
movw R30,R16
ldi R24,<_LCD_character_table
ldi R25,>_LCD_character_table
add R30,R24
adc R31,R25
lpm R10,Z+
lpm R11,Z
.dbline 119
; j=j<<2;
lsl R10
rol R11
lsl R10
rol R11
.dbline 120
; m=j&0x000f;
movw R22,R10
andi R22,15
andi R23,0
.dbline 121
; LCDDR0|=m;
lds R2,236
clr R3
or R2,R22
or R3,R23
sts 236,R2
.dbline 122
; m=(j>>4)&0x000f;
movw R22,R10
lsr R23
ror R22
lsr R23
ror R22
lsr R23
ror R22
lsr R23
ror R22
andi R22,15
andi R23,0
.dbline 123
; LCDDR5|=m;
lds R2,241
clr R3
or R2,R22
or R3,R23
sts 241,R2
.dbline 124
; m=(j>>8)&0x000f;
movw R22,R10
mov R22,R23
clr R23
andi R22,15
andi R23,0
.dbline 125
; LCDDR10|=m;
lds R2,246
clr R3
or R2,R22
or R3,R23
sts 246,R2
.dbline 126
; m=(j>>12)&0x000f;
ldi R18,12
ldi R19,0
movw R16,R10
xcall lsr16
movw R22,R16
andi R22,15
andi R23,0
.dbline 127
; LCDDR15|=m;
lds R2,251
clr R3
or R2,R22
or R3,R23
sts 251,R2
.dbline 129
;
; m=LCDDR0<<2; //左3位
lds R22,236
clr R23
lsl R22
rol R23
lsl R22
rol R23
.dbline 130
; LCDDR0|=m;
lds R2,236
clr R3
or R2,R22
or R3,R23
sts 236,R2
.dbline 131
; m=LCDDR5<<2;
lds R22,241
clr R23
lsl R22
rol R23
lsl R22
rol R23
.dbline 132
; LCDDR5|=m;
lds R2,241
clr R3
or R2,R22
or R3,R23
sts 241,R2
.dbline 133
; m=LCDDR10<<2;
lds R22,246
clr R23
lsl R22
rol R23
lsl R22
rol R23
.dbline 134
; LCDDR10|=m;
lds R2,246
clr R3
or R2,R22
or R3,R23
sts 246,R2
.dbline 135
; m=LCDDR15<<2;
lds R22,251
clr R23
lsl R22
rol R23
lsl R22
rol R23
.dbline 136
; LCDDR15|=m;
lds R2,251
clr R3
or R2,R22
or R3,R23
sts 251,R2
.dbline 138
;
; m=LCDDR0<<2; //左4位
lds R22,236
clr R23
lsl R22
rol R23
lsl R22
rol R23
.dbline 139
; LCDDR0|=m;
lds R2,236
clr R3
or R2,R22
or R3,R23
sts 236,R2
.dbline 140
; m=LCDDR5<<2;
lds R22,241
clr R23
lsl R22
rol R23
lsl R22
rol R23
.dbline 141
; LCDDR5|=m;
lds R2,241
clr R3
or R2,R22
or R3,R23
sts 241,R2
.dbline 142
; m=LCDDR10<<2;
lds R22,246
clr R23
lsl R22
rol R23
lsl R22
rol R23
.dbline 143
; LCDDR10|=m;
lds R2,246
clr R3
or R2,R22
or R3,R23
sts 246,R2
.dbline 144
; m=LCDDR15<<2;
lds R22,251
clr R23
lsl R22
rol R23
lsl R22
rol R23
.dbline 145
; LCDDR15|=m;
lds R2,251
clr R3
or R2,R22
or R3,R23
sts 251,R2
.dbline 149
;
;
;
; j=LCD_character_table[i]; //左5位
ldi R16,2
ldi R17,0
movw R18,R20
xcall empy16s
movw R30,R16
ldi R24,<_LCD_character_table
ldi R25,>_LCD_character_table
add R30,R24
adc R31,R25
lpm R10,Z+
lpm R11,Z
.dbline 150
; m=j&0x000f;
movw R22,R10
andi R22,15
andi R23,0
.dbline 151
; LCDDR1=m;
sts 237,R22
.dbline 152
; m=(j>>4)&0x000f;
movw R22,R10
lsr R23
ror R22
lsr R23
ror R22
lsr R23
ror R22
lsr R23
ror R22
andi R22,15
andi R23,0
.dbline 153
; LCDDR6=m;
sts 242,R22
.dbline 154
; m=(j>>8)&0x000f;
movw R22,R10
mov R22,R23
clr R23
andi R22,15
andi R23,0
.dbline 155
; LCDDR11=m;
sts 247,R22
.dbline 156
; m=(j>>12)&0x000f;
ldi R18,12
ldi R19,0
movw R16,R10
xcall lsr16
movw R22,R16
andi R22,15
andi R23,0
.dbline 157
; LCDDR16=m;
sts 252,R22
.dbline 159
;
; j=LCD_character_table[i]; //左6位
ldi R16,2
ldi R17,0
movw R18,R20
xcall empy16s
movw R30,R16
ldi R24,<_LCD_character_table
ldi R25,>_LCD_character_table
add R30,R24
adc R31,R25
lpm R10,Z+
lpm R11,Z
.dbline 160
; m=j&0x000f;
movw R22,R10
andi R22,15
andi R23,0
.dbline 161
; LCDDR1|=m<<2;
movw R2,R22
lsl R2
rol R3
lsl R2
rol R3
lds R4,237
clr R5
or R4,R2
or R5,R3
sts 237,R4
.dbline 162
; m=(j>>4)&0x000f;
movw R22,R10
lsr R23
ror R22
lsr R23
ror R22
lsr R23
ror R22
lsr R23
ror R22
andi R22,15
andi R23,0
.dbline 163
; LCDDR6|=m<<2;
movw R2,R22
lsl R2
rol R3
lsl R2
rol R3
lds R4,242
clr R5
or R4,R2
or R5,R3
sts 242,R4
.dbline 164
; m=(j>>8)&0x000f;
movw R22,R10
mov R22,R23
clr R23
andi R22,15
andi R23,0
.dbline 165
; LCDDR11|=m<<2;
movw R2,R22
lsl R2
rol R3
lsl R2
rol R3
lds R4,247
clr R5
or R4,R2
or R5,R3
sts 247,R4
.dbline 166
; m=(j>>12)&0x000f;
ldi R18,12
ldi R19,0
movw R16,R10
xcall lsr16
movw R22,R16
andi R22,15
andi R23,0
.dbline 167
; LCDDR16|=m<<2;
movw R2,R22
lsl R2
rol R3
lsl R2
rol R3
lds R4,252
clr R5
or R4,R2
or R5,R3
sts 252,R4
.dbline 169
;
; j=LCD_character_table[i]; //左7位
ldi R16,2
ldi R17,0
movw R18,R20
xcall empy16s
movw R30,R16
ldi R24,<_LCD_character_table
ldi R25,>_LCD_character_table
add R30,R24
adc R31,R25
lpm R10,Z+
lpm R11,Z
.dbline 170
; m=j&0x000f;
movw R22,R10
andi R22,15
andi R23,0
.dbline 171
; LCDDR1|=m<<4;
movw R2,R22
lsl R2
rol R3
lsl R2
rol R3
lsl R2
rol R3
lsl R2
rol R3
lds R4,237
clr R5
or R4,R2
or R5,R3
sts 237,R4
.dbline 172
; m=(j>>4)&0x000f;
movw R22,R10
lsr R23
ror R22
lsr R23
ror R22
lsr R23
ror R22
lsr R23
ror R22
andi R22,15
andi R23,0
.dbline 173
; LCDDR6|=m<<4;
movw R2,R22
lsl R2
rol R3
lsl R2
rol R3
lsl R2
rol R3
lsl R2
rol R3
lds R4,242
clr R5
or R4,R2
or R5,R3
sts 242,R4
.dbline 174
; m=(j>>8)&0x000f;
movw R22,R10
mov R22,R23
clr R23
andi R22,15
andi R23,0
.dbline 175
; LCDDR11|=m<<4;
movw R2,R22
lsl R2
rol R3
lsl R2
rol R3
lsl R2
rol R3
lsl R2
rol R3
lds R4,247
clr R5
or R4,R2
or R5,R3
sts 247,R4
.dbline 176
; m=(j>>12)&0x000f;
ldi R18,12
ldi R19,0
movw R16,R10
xcall lsr16
movw R22,R16
andi R22,15
andi R23,0
.dbline 177
; LCDDR16|=m<<4;
movw R2,R22
lsl R2
rol R3
lsl R2
rol R3
lsl R2
rol R3
lsl R2
rol R3
lds R4,252
clr R5
or R4,R2
or R5,R3
sts 252,R4
.dbline 180
;
;
; j=LCD_character_table[i]; //左8位
ldi R16,2
ldi R17,0
movw R18,R20
xcall empy16s
movw R30,R16
ldi R24,<_LCD_character_table
ldi R25,>_LCD_character_table
add R30,R24
adc R31,R25
lpm R10,Z+
lpm R11,Z
.dbline 181
; m=j&0x000f;
movw R22,R10
andi R22,15
andi R23,0
.dbline 182
; LCDDR1|=m<<6;
ldi R18,6
ldi R19,0
movw R16,R22
xcall lsl16
lds R2,237
clr R3
or R2,R16
or R3,R17
sts 237,R2
.dbline 183
; m=(j>>4)&0x000f;
movw R22,R10
lsr R23
ror R22
lsr R23
ror R22
lsr R23
ror R22
lsr R23
ror R22
andi R22,15
andi R23,0
.dbline 184
; LCDDR6|=m<<6;
ldi R18,6
ldi R19,0
movw R16,R22
xcall lsl16
lds R2,242
clr R3
or R2,R16
or R3,R17
sts 242,R2
.dbline 185
; m=(j>>8)&0x000f;
movw R22,R10
mov R22,R23
clr R23
andi R22,15
andi R23,0
.dbline 186
; LCDDR11|=m<<6;
ldi R18,6
ldi R19,0
movw R16,R22
xcall lsl16
lds R2,247
clr R3
or R2,R16
or R3,R17
sts 247,R2
.dbline 187
; m=(j>>12)&0x000f;
ldi R18,12
ldi R19,0
movw R16,R10
xcall lsr16
movw R22,R16
andi R22,15
andi R23,0
.dbline 188
; LCDDR16|=m<<6;
ldi R18,6
ldi R19,0
movw R16,R22
xcall lsl16
lds R2,252
clr R3
or R2,R16
or R3,R17
sts 252,R2
.dbline 190
;
; delay_ms(1000);
ldi R16,1000
ldi R17,3
xcall _delay_ms
.dbline 191
; }
L20:
.dbline 104
subi R20,255 ; offset = 1
sbci R21,255
L22:
.dbline 104
cpi R20,10
ldi R30,0
cpc R21,R30
brsh X5
xjmp L19
X5:
X3:
.dbline 192
; }
L14:
.dbline 100
xjmp L17
X4:
.dbline -2
L12:
.dbline 0 ; func end
ret
.dbsym r n 10 i
.dbsym r i 20 i
.dbsym r j 10 i
.dbsym r m 22 i
.dbend
; }
;
;
;
;
;
;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -