📄 ocmj_lcd.lis
字号:
.module ocmj_lcd.c
.area text(rom, con, rel)
0000 .dbfile F:\cdy笔记本资料\E\工程\五星\设计文档\程序设计\ds1307\ocmj_lcd.c
0000 .dbfunc e ocmj_init _ocmj_init fV
.even
0000 _ocmj_init::
0000 .dbline -1
0000 .dbline 6
0000 ; #include <iom128v.h>
0000 ; #include "ocmj_lcd.h"
0000 ; #include "delay.h"
0000 ; /* OCMJ4X8LCD初始化 */
0000 ; void ocmj_init(void)
0000 ; {
0000 .dbline 7
0000 ; MCUCR=0;
0000 2224 clr R2
0002 25BE out 0x35,R2
0004 .dbline 8
0004 ; DDRA=0xff;
0004 8FEF ldi R24,255
0006 8ABB out 0x1a,R24
0008 .dbline 9
0008 ; PORTA=0xff;
0008 8BBB out 0x1b,R24
000A .dbline 10
000A ; DDRE=0b10000000;
000A 80E8 ldi R24,128
000C 82B9 out 0x2,R24
000E .dbline 11
000E ; PORTE=0xff;
000E 8FEF ldi R24,255
0010 83B9 out 0x3,R24
0012 .dbline 12
0012 ; clr_reset;//LCD复位
0012 AB98 cbi 0x15,3
0014 .dbline 13
0014 ; delay_nms(10);
0014 0AE0 ldi R16,10
0016 10E0 ldi R17,0
0018 0E940000 xcall _delay_nms
001C .dbline 14
001C ; set_reset;
001C AB9A sbi 0x15,3
001E .dbline 15
001E ; clr_answer;
001E 1F98 cbi 0x03,7
0020 .dbline 16
0020 ; delay_nms(10);
0020 0AE0 ldi R16,10
0022 10E0 ldi R17,0
0024 0E940000 xcall _delay_nms
0028 .dbline -2
0028 L1:
0028 .dbline 0 ; func end
0028 0895 ret
002A .dbend
002A .dbfunc e ocmj_write _ocmj_write fV
002A ; data -> R16
.even
002A _ocmj_write::
002A .dbline -1
002A .dbline 20
002A ; }
002A ; /* 写数据到LCD */
002A ; void ocmj_write(unsigned char data)
002A ; {
002A L3:
002A .dbline 22
002A L4:
002A .dbline 21
002A ; while(ask!=0)
002A 0E99 sbic 0x1,6
002C FECF rjmp L3
002E .dbline 23
002E ; ;
002E ; data_port=data;
002E 0BBB out 0x1b,R16
0030 .dbline 24
0030 ; wait;
0030 0000 nop
0032 0000 nop
0034 .dbline 25
0034 ; set_answer;
0034 1F9A sbi 0x03,7
0036 .dbline 26
0036 ; wait;
0036 0000 nop
0038 0000 nop
003A L6:
003A .dbline 28
003A L7:
003A .dbline 27
003A ; while(ask==0)
003A 0E9B sbis 0x1,6
003C FECF rjmp L6
003E .dbline 29
003E ; ;
003E ; clr_answer;
003E 1F98 cbi 0x03,7
0040 .dbline -2
0040 L2:
0040 .dbline 0 ; func end
0040 0895 ret
0042 .dbsym r data 16 c
0042 .dbend
0042 .dbfunc e asc_tran _asc_tran fV
0042 ; asc_p -> R20,R21
0042 ; y -> R22
0042 ; x -> R10
.even
0042 _asc_tran::
0042 0E940000 xcall push_gset3
0046 622F mov R22,R18
0048 A02E mov R10,R16
004A 4E81 ldd R20,y+6
004C 5F81 ldd R21,y+7
004E .dbline -1
004E .dbline 34
004E ; }
004E ; /* 传送ASCII字母到LCD */
004E ; /* x:0x00~0x0f y:0~64 */
004E ; void asc_tran(unsigned char x,unsigned char y,unsigned char *asc_p)
004E ; {
004E .dbline 35
004E ; x+=4;
004E 8A2D mov R24,R10
0050 8C5F subi R24,252 ; addi 4
0052 A82E mov R10,R24
0054 13C0 xjmp L11
0056 L10:
0056 .dbline 37
0056 ; while((*asc_p)!=0)
0056 ; {
0056 .dbline 38
0056 ; ocmj_write(0xf1);
0056 01EF ldi R16,241
0058 E8DF xcall _ocmj_write
005A .dbline 39
005A ; ocmj_write(x);
005A 0A2D mov R16,R10
005C E6DF xcall _ocmj_write
005E .dbline 40
005E ; ocmj_write(y);
005E 062F mov R16,R22
0060 E4DF xcall _ocmj_write
0062 .dbline 41
0062 ; ocmj_write(*asc_p);
0062 FA01 movw R30,R20
0064 0081 ldd R16,z+0
0066 E1DF xcall _ocmj_write
0068 .dbline 42
0068 ; asc_p++;
0068 4F5F subi R20,255 ; offset = 1
006A 5F4F sbci R21,255
006C .dbline 43
006C ; if (x<0x13)
006C 8A2D mov R24,R10
006E 8331 cpi R24,19
0070 10F4 brsh L13
0072 .dbline 44
0072 ; x++;
0072 A394 inc R10
0074 03C0 xjmp L14
0076 L13:
0076 .dbline 46
0076 ; else
0076 ; {
0076 .dbline 47
0076 ; x=0x04;
0076 84E0 ldi R24,4
0078 A82E mov R10,R24
007A .dbline 48
007A ; y+=8;
007A 685F subi R22,248 ; addi 8
007C .dbline 49
007C ; }
007C L14:
007C .dbline 50
007C L11:
007C .dbline 36
007C FA01 movw R30,R20
007E 2080 ldd R2,z+0
0080 2220 tst R2
0082 49F7 brne L10
0084 .dbline -2
0084 L9:
0084 0E940000 xcall pop_gset3
0088 .dbline 0 ; func end
0088 0895 ret
008A .dbsym r asc_p 20 pc
008A .dbsym r y 22 c
008A .dbsym r x 10 c
008A .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -