📄 lcd.lis
字号:
.module lcd.c
.area text(rom, con, rel)
0000 .dbfile C:\TDdownload\zxy\169demo\169LCD\lcd动态校验\lcd.c
.area lit(rom, con, rel)
0000 _LCD_character_table::
0000 2313 .word 4899
0002 2002 .word 544
0004 3211 .word 4402
0006 3212 .word 4658
0008 3102 .word 561
000A 1312 .word 4627
000C 1313 .word 4883
000E 2202 .word 546
0010 3313 .word 4915
0012 3312 .word 4659
0014 2022 .word 8736
0016 .dbsym e LCD_character_table _LCD_character_table A[22:11]ki
.area text(rom, con, rel)
0000 .dbfile C:\TDdownload\zxy\169demo\169LCD\lcd动态校验\lcd.c
0000 .dbfunc e port_init _port_init fV
.even
0000 _port_init::
0000 .dbline -1
0000 .dbline 28
0000 ; // **************************************************************
0000 ; // *** 广 州 天 河 双 龙 电 子 公 司 ***
0000 ; // *** http://www.sl.com.cn ***
0000 ; // *** lcd 显示校验 ***
0000 ; // *** 作者:zxy@sl.com.cn ***
0000 ; // *** 2006年3月28日 ***
0000 ; // *** 目标MCU:MEGA169 晶振:内部(INT)8MHZ ***
0000 ; // **************************************************************
0000 ; //实验效果:0-9动态循环显示
0000 ; #include <iom169v.h>
0000 ; #include <macros.h>
0000 ; #define pLCDREG (*(unsigned char *)(0xEC))
0000 ; const unsigned int LCD_character_table[] = // Character definitions table.
0000 ; {
0000 ; 0x1323, // '0'
0000 ; 0x0220, // '1'
0000 ; 0x1132, // '2'
0000 ; 0x1232, // '3'
0000 ; 0x0231, // '4'
0000 ; 0x1213, // '5'
0000 ; 0x1313, // '6'
0000 ; 0x0222, // '7'
0000 ; 0x1333, // '8'
0000 ; 0x1233, // '9'
0000 ; 0x2220 // 'c'
0000 ; };
0000 ; void port_init(void)
0000 ; {
0000 .dbline 29
0000 ; PORTA = 0x00;
0000 2224 clr R2
0002 22B8 out 0x2,R2
0004 .dbline 30
0004 ; DDRA = 0x00;
0004 21B8 out 0x1,R2
0006 .dbline 31
0006 ; PORTC = 0x00;
0006 28B8 out 0x8,R2
0008 .dbline 32
0008 ; DDRC = 0x00;
0008 27B8 out 0x7,R2
000A .dbline 33
000A ; PORTD = 0x00;
000A 2BB8 out 0xb,R2
000C .dbline 34
000C ; DDRD = 0x00;
000C 2AB8 out 0xa,R2
000E .dbline 35
000E ; PORTG = 0x00;
000E 24BA out 0x14,R2
0010 .dbline 36
0010 ; DDRG = 0x00;
0010 23BA out 0x13,R2
0012 .dbline -2
0012 L1:
0012 .dbline 0 ; func end
0012 0895 ret
0014 .dbend
0014 .dbfunc e delay_us _delay_us fV
0014 ; time -> R16,R17
.even
0014 _delay_us::
0014 .dbline -1
0014 .dbline 40
0014 ; }
0014 ; /* 微秒级延时程序 */
0014 ; void delay_us(int time)
0014 ; {
0014 L3:
0014 .dbline 42
0014 ; do
0014 ; {
0014 .dbline 43
0014 ; time--;
0014 0150 subi R16,1
0016 1040 sbci R17,0
0018 .dbline 44
0018 ; }
0018 L4:
0018 .dbline 45
0018 ; while (time>1);
0018 81E0 ldi R24,1
001A 90E0 ldi R25,0
001C 8017 cp R24,R16
001E 9107 cpc R25,R17
0020 CCF3 brlt L3
0022 X0:
0022 .dbline -2
0022 L2:
0022 .dbline 0 ; func end
0022 0895 ret
0024 .dbsym r time 16 I
0024 .dbend
0024 .dbfunc e delay_ms _delay_ms fV
0024 ; time -> R20,R21
.even
0024 _delay_ms::
0024 4A93 st -y,R20
0026 5A93 st -y,R21
0028 A801 movw R20,R16
002A .dbline -1
002A .dbline 49
002A ; }
002A ; /* 毫秒级延时程序 */
002A ; void delay_ms(unsigned int time)
002A ; {
002A 05C0 xjmp L8
002C L7:
002C .dbline 51
002C ; while(time!=0)
002C ; {
002C .dbline 52
002C ; delay_us(1000);
002C 08EE ldi R16,1000
002E 13E0 ldi R17,3
0030 F1DF xcall _delay_us
0032 .dbline 53
0032 ; time--;
0032 4150 subi R20,1
0034 5040 sbci R21,0
0036 .dbline 54
0036 ; }
0036 L8:
0036 .dbline 50
0036 4030 cpi R20,0
0038 4507 cpc R20,R21
003A C1F7 brne L7
003C X1:
003C .dbline -2
003C L6:
003C .dbline 0 ; func end
003C 5991 ld R21,y+
003E 4991 ld R20,y+
0040 0895 ret
0042 .dbsym r time 20 i
0042 .dbend
0042 .dbfunc e lcd_init _lcd_init fV
.even
0042 _lcd_init::
0042 .dbline -1
0042 .dbline 57
0042 ; }
0042 ; void lcd_init(void)
0042 ; {
0042 .dbline 59
0042 ;
0042 ; LCDCRA = (1<<LCDEN);
0042 80E8 ldi R24,128
0044 8093E400 sts 228,R24
0048 .dbline 62
0048 ; /* 晶体振荡器*/
0048 ; /* 1/3 偏置和1/4 占空比 */
0048 ; LCDCRB = (0<<LCDCS) |(1<<LCDMUX1)| (1<<LCDMUX0)| (1<<LCDPM2)| (1<<LCDPM1)| (1<<LCDPM0);
0048 87E3 ldi R24,55
004A 8093E500 sts 229,R24
004E .dbline 65
004E ; /* 选择16 为预分频因子,7 为LCD 时钟分频数*/
004E ; /* 得到帧速率为 Hz */
004E ; LCDFRR = (1<<LCDPS2) |(1<<LCDPS1) |(0<<LCDPS0) |(1<<LCDCD2) | (1<<LCDCD1) | (0<<LCDCD0);
004E 86E6 ldi R24,102
0050 8093E600 sts 230,R24
0054 .dbline 67
0054 ; /* 设置输出电压为3.3 V */
0054 ; LCDCCR = (1<<LCDCC3) | (1<<LCDCC2) | (1<<LCDCC1) | (1<<LCDCC0);
0054 8FE0 ldi R24,15
0056 8093E700 sts 231,R24
005A .dbline 70
005A ; /* 使能LCD,缺省波形并禁止所有中断*/
005A ;
005A ; LCDDR0=0x00;
005A 2224 clr R2
005C 2092EC00 sts 236,R2
0060 .dbline 71
0060 ; LCDDR1=0x00;
0060 2092ED00 sts 237,R2
0064 .dbline 72
0064 ; LCDDR2=0x00;
0064 2092EE00 sts 238,R2
0068 .dbline 73
0068 ; LCDDR3=0x00;
0068 2092EF00 sts 239,R2
006C .dbline 74
006C ; LCDDR5=0x00;
006C 2092F100 sts 241,R2
0070 .dbline 75
0070 ; LCDDR6=0x00;
0070 2092F200 sts 242,R2
0074 .dbline 76
0074 ; LCDDR7=0x00;
0074 2092F300 sts 243,R2
0078 .dbline 77
0078 ; LCDDR8=0x00;
0078 2092F400 sts 244,R2
007C .dbline 78
007C ; LCDDR10=0x00;
007C 2092F600 sts 246,R2
0080 .dbline 79
0080 ; LCDDR11=0x00;
0080 2092F700 sts 247,R2
0084 .dbline 80
0084 ; LCDDR12=0x00;
0084 2092F800 sts 248,R2
0088 .dbline 81
0088 ; LCDDR13=0x00;
0088 2092F900 sts 249,R2
008C .dbline 82
008C ; LCDDR15=0x00;
008C 2092FB00 sts 251,R2
0090 .dbline 83
0090 ; LCDDR16=0x00;
0090 2092FC00 sts 252,R2
0094 .dbline 84
0094 ; LCDDR17=0x00;
0094 2092FD00 sts 253,R2
0098 .dbline 85
0098 ; LCDDR18=0x00;
0098 2092FE00 sts 254,R2
009C .dbline 86
009C ; LCDCRA=(1<<LCDEN);
009C 80E8 ldi R24,128
009E 8093E400 sts 228,R24
00A2 .dbline -2
00A2 L10:
00A2 .dbline 0 ; func end
00A2 0895 ret
00A4 .dbend
00A4 .dbfunc e init_devices _init_devices fV
.even
00A4 _init_devices::
00A4 .dbline -1
00A4 .dbline 89
00A4 ; }
00A4 ; void init_devices(void)
00A4 ; {
00A4 .dbline 91
00A4 ;
00A4 ; port_init();
00A4 ADDF xcall _port_init
00A6 .dbline 92
00A6 ; lcd_init();
00A6 CDDF xcall _lcd_init
00A8 .dbline -2
00A8 L11:
00A8 .dbline 0 ; func end
00A8 0895 ret
00AA .dbend
00AA .dbfunc e main _main fV
00AA ; n -> R10,R11
00AA ; i -> R20,R21
00AA ; j -> R10,R11
00AA ; m -> R22,R23
.even
00AA _main::
00AA .dbline -1
00AA .dbline 97
00AA ;
00AA ; }
00AA ;
00AA ; void main(void)
00AA ; {
00AA .dbline 98
00AA ; unsigned int i,j,m,n=0;
00AA AA24 clr R10
00AC BB24 clr R11
00AE .dbline 99
00AE ; init_devices();
00AE FADF xcall _init_devices
00B0 3EC2 xjmp L14
00B2 L16:
00B2 .dbline 102
00B2 ; while(1)
00B2 ; {
00B2 ; while ( !(LCDCRA & (1<<LCDIF)) );
00B2 L17:
00B2 .dbline 102
00B2 2090E400 lds R2,228
00B6 24FE sbrs R2,4
00B8 FCCF rjmp L16
00BA X2:
00BA .dbline 103
00BA ; LCDCRA = (1<<LCDEN)|(1<<LCDIF);
00BA 80E9 ldi R24,144
00BC 8093E400 sts 228,R24
00C0 .dbline 104
00C0 ; for(i=0;i<10;i++)
00C0 4427 clr R20
00C2 5527 clr R21
00C4 2FC2 xjmp L22
00C6 L19:
00C6 .dbline 105
00C6 ; {
00C6 .dbline 106
00C6 ; j=LCD_character_table[i]; //左1位
00C6 02E0 ldi R16,2
00C8 10E0 ldi R17,0
00CA 9A01 movw R18,R20
00CC 0E940000 xcall empy16s
00D0 F801 movw R30,R16
00D2 80E0 ldi R24,<_LCD_character_table
00D4 90E0 ldi R25,>_LCD_character_table
00D6 E80F add R30,R24
00D8 F91F adc R31,R25
00DA A590 lpm R10,Z+
00DC B490 lpm R11,Z
00DE .dbline 108
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -