?? 162.lis
字號:
.module _162.c
.area text(rom, con, rel)
0000 .dbfile D:\時鐘芯片\1302\1302-162\162.c
0000 .dbfunc e delay_ms _delay_ms fV
0000 ; a -> R20
0000 ; b -> R22
0000 ; n -> R16
.even
0000 _delay_ms::
0000 00D0 rcall push_gset2
0002 .dbline -1
0002 .dbline 5
0002 ; #include <io8515v.h>
0002 ; #include <macros.h>
0002 ; #include <162-1302.h>
0002 ; void delay_ms(unsigned char n)
0002 ; {
0002 .dbline 7
0002 ; unsigned char a, b;
0002 ; for (a = 1; a<n; a++)
0002 41E0 ldi R20,1
0004 06C0 rjmp L5
0006 L2:
0006 .dbline 8
0006 ; for (b = 1; b; b++)
0006 61E0 ldi R22,1
0008 01C0 rjmp L9
000A L6:
000A .dbline 9
000A L7:
000A .dbline 8
000A 6395 inc R22
000C L9:
000C .dbline 8
000C 6623 tst R22
000E E9F7 brne L6
0010 L3:
0010 .dbline 7
0010 4395 inc R20
0012 L5:
0012 .dbline 7
0012 4017 cp R20,R16
0014 C0F3 brlo L2
0016 .dbline -2
0016 L1:
0016 00D0 rcall pop_gset2
0018 .dbline 0 ; func end
0018 0895 ret
001A .dbsym r a 20 c
001A .dbsym r b 22 c
001A .dbsym r n 16 c
001A .dbend
001A .dbfunc e delay_us _delay_us fV
001A ; b -> R20
001A ; n -> R16,R17
.even
001A _delay_us::
001A 00D0 rcall push_gset1
001C .dbline -1
001C .dbline 12
001C ; ;
001C ; }
001C ; void delay_us(unsigned int n)
001C ; {
001C .dbline 14
001C ; unsigned char b;
001C ; for (b = 1; b<n; b++)
001C 41E0 ldi R20,1
001E 01C0 rjmp L14
0020 L11:
0020 .dbline 15
0020 L12:
0020 .dbline 14
0020 4395 inc R20
0022 L14:
0022 .dbline 14
0022 242E mov R2,R20
0024 3324 clr R3
0026 2016 cp R2,R16
0028 3106 cpc R3,R17
002A D0F3 brlo L11
002C .dbline -2
002C L10:
002C 00D0 rcall pop_gset1
002E .dbline 0 ; func end
002E 0895 ret
0030 .dbsym r b 20 c
0030 .dbsym r n 16 i
0030 .dbend
0030 .dbfunc e LCD_wait _LCD_wait fV
.even
0030 _LCD_wait::
0030 .dbline -1
0030 .dbline 19
0030 ; ;
0030 ; }
0030 ;
0030 ; void LCD_wait(void) //等待LCD空閑
0030 ; {
0030 .dbline 20
0030 ; LCD_DATA_PORT&=~BIT(7);
0030 DF98 cbi 0x1b,7
0032 .dbline 21
0032 ; PORTB&=~BIT(0);
0032 C098 cbi 0x18,0
0034 .dbline 22
0034 ; PORTB|=BIT(1);
0034 C19A sbi 0x18,1
0036 .dbline 23
0036 ; PORTB|=BIT(2);
0036 C29A sbi 0x18,2
0038 L16:
0038 .dbline 24
0038 L17:
0038 .dbline 24
0038 ; while(!(LCD_DATA_PIN &0x80)==0);
0038 89B3 in R24,0x19
003A 8078 andi R24,128
003C 19F4 brne L19
003E 01E0 ldi R16,1
0040 10E0 ldi R17,0
0042 02C0 rjmp L20
0044 L19:
0044 0027 clr R16
0046 1127 clr R17
0048 L20:
0048 0030 cpi R16,0
004A 0107 cpc R16,R17
004C A9F3 breq L16
004E X0:
004E .dbline 25
004E ; LCD_DATA_DDR|=0xFF;
004E 8AB3 in R24,0x1a
0050 8F6F ori R24,255
0052 8ABB out 0x1a,R24
0054 .dbline 26
0054 ; PORTB&=~BIT(2);
0054 C298 cbi 0x18,2
0056 .dbline -2
0056 L15:
0056 .dbline 0 ; func end
0056 0895 ret
0058 .dbend
0058 .dbfunc e command_enable _command_enable fV
.even
0058 _command_enable::
0058 .dbline -1
0058 .dbline 30
0058 ; }
0058 ;
0058 ; void command_enable() //寫指令使能
0058 ; {
0058 .dbline 31
0058 ; PORTB&=~(BIT(0)|BIT(1));
0058 88B3 in R24,0x18
005A 8C7F andi R24,252
005C 88BB out 0x18,R24
005E .dbline 32
005E ; PORTB|=BIT(2);
005E C29A sbi 0x18,2
0060 .dbline 33
0060 ; asm("nop");
0060 0000 nop
0062 .dbline 34
0062 ; PORTB&=~BIT(2);
0062 C298 cbi 0x18,2
0064 .dbline -2
0064 L21:
0064 .dbline 0 ; func end
0064 0895 ret
0066 .dbend
0066 .dbfunc e data_enable _data_enable fV
.even
0066 _data_enable::
0066 .dbline -1
0066 .dbline 37
0066 ; }
0066 ; void data_enable() //寫數據使能
0066 ; {
0066 .dbline 38
0066 ; PORTB|=BIT(0);
0066 C09A sbi 0x18,0
0068 .dbline 39
0068 ; PORTB&=~BIT(1);
0068 C198 cbi 0x18,1
006A .dbline 40
006A ; PORTB|=BIT(2);
006A C29A sbi 0x18,2
006C .dbline 41
006C ; asm("nop");
006C 0000 nop
006E .dbline 42
006E ; PORTB&=~BIT(2);
006E C298 cbi 0x18,2
0070 .dbline -2
0070 L22:
0070 .dbline 0 ; func end
0070 0895 ret
0072 .dbend
0072 .dbfunc e LCD_set_xy _LCD_set_xy fV
0072 ; address -> R20
0072 ; y -> R20
0072 ; x -> R22
.even
0072 _LCD_set_xy::
0072 00D0 rcall push_gset2
0074 422F mov R20,R18
0076 602F mov R22,R16
0078 .dbline -1
0078 .dbline 50
0078 ; }
0078 ;
0078 ; /*設置LCD顯示的起始位置輸入參數:x、y
0078 ; 顯示字符串的位置,X:0-15,Y:0-1
0078 ; LCD第一行顯示寄存器地址:0X80-0X8F
0078 ; LCD第一行顯示寄存器地址:0XC0-0XCF*/
0078 ; void LCD_set_xy( unsigned char x, unsigned char y )
0078 ; {
0078 .dbline 52
0078 ; unsigned char address;
0078 ; if (y==0)
0078 4423 tst R20
007A 19F4 brne L24
007C .dbline 53
007C ; address=0x80+x;
007C 462F mov R20,R22
007E 4058 subi R20,128 ; addi 128
0080 02C0 rjmp L25
0082 L24:
0082 .dbline 55
0082 ; else
0082 ; address=0xC0+x;
0082 462F mov R20,R22
0084 4054 subi R20,64 ; addi 192
0086 L25:
0086 .dbline 56
0086 ; LCD_DATA_PORT=address; //輸入開始顯示地址
0086 4BBB out 0x1b,R20
0088 .dbline 57
0088 ; command_enable();
0088 E7DF rcall _command_enable
008A .dbline 58
008A ; delay_ms(10);
008A 0AE0 ldi R16,10
008C B9DF rcall _delay_ms
008E .dbline -2
008E L23:
008E 00D0 rcall pop_gset2
0090 .dbline 0 ; func end
0090 0895 ret
0092 .dbsym r address 20 c
0092 .dbsym r y 20 c
0092 .dbsym r x 22 c
0092 .dbend
0092 .dbfunc e LCD_write_char _LCD_write_char fV
0092 ; data -> R20
.even
0092 _LCD_write_char::
0092 00D0 rcall push_gset1
0094 402F mov R20,R16
0096 .dbline -1
0096 .dbline 62
0096 ; }
0096 ; //寫一個字符
0096 ; void LCD_write_char(unsigned char data)
0096 ; {
0096 .dbline 63
0096 ; LCD_DATA_PORT=data;
0096 4BBB out 0x1b,R20
0098 .dbline 64
0098 ; data_enable();
0098 E6DF rcall _data_enable
009A .dbline 65
009A ; delay_ms(10);
009A 0AE0 ldi R16,10
009C B1DF rcall _delay_ms
009E .dbline -2
009E L26:
009E 00D0 rcall pop_gset1
00A0 .dbline 0 ; func end
00A0 0895 ret
00A2 .dbsym r data 20 c
00A2 .dbend
00A2 .dbfunc e LCD_write_string _LCD_write_string fV
00A2 ; s -> R20,R21
00A2 ; y -> R10
00A2 ; x -> R22
.even
00A2 _LCD_write_string::
00A2 00D0 rcall push_gset3
00A4 A22E mov R10,R18
00A6 602F mov R22,R16
00A8 4E81 ldd R20,y+6
00AA 5F81 ldd R21,y+7
00AC .dbline -1
00AC .dbline 69
00AC ; }
00AC ; //寫一字符串
00AC ; void LCD_write_string(unsigned char x, unsigned char y,unsigned char *s)
00AC ; {
00AC .dbline 70
00AC ; LCD_set_xy(x,y);
00AC 2A2D mov R18,R10
00AE 062F mov R16,R22
00B0 E0DF rcall _LCD_set_xy
00B2 06C0 rjmp L29
00B4 L28:
00B4 .dbline 72
00B4 .dbline 73
00B4 E42F mov R30,R20
00B6 F52F mov R31,R21
00B8 0081 ldd R16,z+0
00BA EBDF rcall _LCD_write_char
00BC .dbline 74
00BC 4F5F subi R20,255 ; offset = 1
00BE 5F4F sbci R21,255
00C0 .dbline 75
00C0 L29:
00C0 .dbline 71
00C0 ; while(*s)
00C0 E42F mov R30,R20
00C2 F52F mov R31,R21
00C4 2080 ldd R2,z+0
00C6 2220 tst R2
00C8 A9F7 brne L28
00CA .dbline -2
00CA L27:
00CA 00D0 rcall pop_gset3
00CC .dbline 0 ; func end
00CC 0895 ret
00CE .dbsym r s 20 pc
00CE .dbsym r y 10 c
00CE .dbsym r x 22 c
00CE .dbend
00CE .dbfunc e init_lcd _init_lcd fV
.even
00CE _init_lcd::
00CE .dbline -1
00CE .dbline 80
00CE ; {
00CE ; LCD_write_char(*s);
00CE ; s++;
00CE ; }
00CE ;
00CE ; }
00CE ;
00CE ; void init_lcd() //初始化
00CE ; {
00CE .dbline 81
00CE ; delay_ms(180); //等待30ms以上
00CE 04EB ldi R16,180
00D0 97DF rcall _delay_ms
00D2 .dbline 82
00D2 ; LCD_DATA_PORT=0x38; //8位2行5×7點陣
00D2 88E3 ldi R24,56
00D4 8BBB out 0x1b,R24
00D6 .dbline 83
00D6 ; command_enable();
00D6 C0DF rcall _command_enable
00D8 .dbline 84
00D8 ; delay_us(100); //等待39us以上
00D8 04E6 ldi R16,100
00DA 10E0 ldi R17,0
00DC 9EDF rcall _delay_us
00DE .dbline 85
00DE ; LCD_DATA_PORT=0x0C; //顯示器開、光標開、閃爍關
00DE 8CE0 ldi R24,12
00E0 8BBB out 0x1b,R24
00E2 .dbline 86
00E2 ; command_enable();
00E2 BADF rcall _command_enable
00E4 .dbline 87
00E4 ; delay_us(100); //等待39us以上
00E4 04E6 ldi R16,100
00E6 10E0 ldi R17,0
00E8 98DF rcall _delay_us
00EA .dbline 88
00EA ; LCD_DATA_PORT=0x01; //清屏
00EA 81E0 ldi R24,1
00EC 8BBB out 0x1b,R24
00EE .dbline 89
00EE ; command_enable();
00EE B4DF rcall _command_enable
00F0 .dbline 90
00F0 ; delay_ms(10); //等待1.53ms以上
00F0 0AE0 ldi R16,10
00F2 86DF rcall _delay_ms
00F4 .dbline 91
00F4 ; LCD_DATA_PORT=0x06; //輸入方式
00F4 86E0 ldi R24,6
00F6 8BBB out 0x1b,R24
00F8 .dbline 92
00F8 ; command_enable();
00F8 AFDF rcall _command_enable
00FA .dbline 93
00FA ; delay_ms(180); //初始化完畢
00FA 04EB ldi R16,180
00FC 81DF rcall _delay_ms
00FE .dbline -2
00FE L31:
00FE .dbline 0 ; func end
00FE 0895 ret
0100 .dbend
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -