📄 lcd.lis
字号:
.module lcd.c
.area text(rom, con, rel)
0000 .dbfile F:\radio\第十一篇\test-adc\lcd.c
0000 .dbfunc e ClearLcd _ClearLcd fV
.even
0000 _ClearLcd::
0000 .dbline -1
0000 .dbline 40
0000 ; #include <iom16v.h>
0000 ; #include <macros.h>
0000 ; #include "delay.h"
0000 ; #define delay125ns NOP()
0000 ; #define delay250ns NOP();NOP()
0000 ; #define delay500ns NOP();NOP();NOP();NOP()
0000 ; //;NOP()
0000 ;
0000 ; #define delay1us NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP()
0000 ; #define delay2us delay1us;delay1us
0000 ; #define RS PD4
0000 ; #define RW PD5
0000 ; #define EN PD7
0000 ; #define DataLcd PORTB
0000 ; #define DataLcdIn PINB
0000 ; #define DataOut DDRB = 0XFF
0000 ; #define DataIn DDRB = 0
0000 ;
0000 ; #define RS_0 PORTD &=~ (1<<RS)
0000 ; #define RS_1 PORTD |= (1<<RS)
0000 ; #define RW_0 PORTD &=~ (1<<RW)
0000 ; #define RW_1 PORTD |= (1<<RW)
0000 ; #define EN_0 PORTD &=~ (1<<EN)
0000 ; #define EN_1 PORTD |= (1<<EN)
0000 ; /*时钟为8MHZ* /
0000 ; void delay_1us(void)
0000 ; {
0000 ; asm("nop");
0000 ; }
0000 ; void delay_us(unsigned int itimes)
0000 ; {
0000 ; unsigned int itemp;
0000 ; for (itemp=0;itemp<itimes;itemp++)
0000 ; {
0000 ; delay_1us();
0000 ; }
0000 ; }
0000 ; /**/
0000 ; void ClearLcd(void)
0000 ; {
0000 .dbline 41
0000 ; EN_0;
0000 9798 cbi 0x12,7
0002 .dbline 42
0002 ; RS_0;
0002 9498 cbi 0x12,4
0004 .dbline 43
0004 ; RW_0;
0004 9598 cbi 0x12,5
0006 .dbline 44
0006 ; DataOut;
0006 8FEF ldi R24,255
0008 87BB out 0x17,R24
000A .dbline 45
000A ; DataLcd = 1;
000A 81E0 ldi R24,1
000C 88BB out 0x18,R24
000E .dbline 46
000E ; delay250ns;
000E 0000 nop
0010 .dbline 46
0010 0000 nop
0012 .dbline 47
0012 ; EN_1;
0012 979A sbi 0x12,7
0014 .dbline 48
0014 ; delay500ns;
0014 0000 nop
0016 .dbline 48
0016 0000 nop
0018 .dbline 48
0018 0000 nop
001A .dbline 48
001A 0000 nop
001C .dbline 49
001C ; EN_0;
001C 9798 cbi 0x12,7
001E .dbline 50
001E ; delay125ns;
001E 0000 nop
0020 .dbline 51
0020 ; RS_1;
0020 949A sbi 0x12,4
0022 .dbline 52
0022 ; RW_1;
0022 959A sbi 0x12,5
0024 .dbline -2
0024 L1:
0024 .dbline 0 ; func end
0024 0895 ret
0026 .dbend
0026 .dbfunc e home _home fV
.even
0026 _home::
0026 .dbline -1
0026 .dbline 56
0026 ; }
0026 ; /**/
0026 ; void home(void)
0026 ; {
0026 .dbline 57
0026 ; RS_0;
0026 9498 cbi 0x12,4
0028 .dbline 58
0028 ; RW_0;
0028 9598 cbi 0x12,5
002A .dbline 59
002A ; DataLcd = 2;
002A 82E0 ldi R24,2
002C 88BB out 0x18,R24
002E .dbline 60
002E ; delay250ns;
002E 0000 nop
0030 .dbline 60
0030 0000 nop
0032 .dbline 61
0032 ; EN_1;
0032 979A sbi 0x12,7
0034 .dbline 62
0034 ; delay500ns;
0034 0000 nop
0036 .dbline 62
0036 0000 nop
0038 .dbline 62
0038 0000 nop
003A .dbline 62
003A 0000 nop
003C .dbline 63
003C ; EN_0;
003C 9798 cbi 0x12,7
003E .dbline 64
003E ; delay125ns;
003E 0000 nop
0040 .dbline 65
0040 ; RS_1;
0040 949A sbi 0x12,4
0042 .dbline 66
0042 ; RW_1;
0042 959A sbi 0x12,5
0044 .dbline -2
0044 L2:
0044 .dbline 0 ; func end
0044 0895 ret
0046 .dbend
0046 .dbfunc e InputSet _InputSet fV
.even
0046 _InputSet::
0046 .dbline -1
0046 .dbline 69
0046 ; }
0046 ; void InputSet(void)
0046 ; {
0046 .dbline 70
0046 ; RS_0;
0046 9498 cbi 0x12,4
0048 .dbline 71
0048 ; RW_0;
0048 9598 cbi 0x12,5
004A .dbline 72
004A ; DataLcd = 6; //
004A 86E0 ldi R24,6
004C 88BB out 0x18,R24
004E .dbline 73
004E ; delay250ns;
004E 0000 nop
0050 .dbline 73
0050 0000 nop
0052 .dbline 74
0052 ; EN_1;
0052 979A sbi 0x12,7
0054 .dbline 75
0054 ; delay500ns;
0054 0000 nop
0056 .dbline 75
0056 0000 nop
0058 .dbline 75
0058 0000 nop
005A .dbline 75
005A 0000 nop
005C .dbline 76
005C ; EN_0;
005C 9798 cbi 0x12,7
005E .dbline 77
005E ; delay125ns;
005E 0000 nop
0060 .dbline 78
0060 ; RS_1;
0060 949A sbi 0x12,4
0062 .dbline 79
0062 ; RW_1;
0062 959A sbi 0x12,5
0064 .dbline -2
0064 L3:
0064 .dbline 0 ; func end
0064 0895 ret
0066 .dbend
0066 .dbfunc e VisionSet _VisionSet fV
.even
0066 _VisionSet::
0066 .dbline -1
0066 .dbline 82
0066 ; }
0066 ; void VisionSet(void)
0066 ; {
0066 .dbline 83
0066 ; EN_0;
0066 9798 cbi 0x12,7
0068 .dbline 84
0068 ; RS_0;
0068 9498 cbi 0x12,4
006A .dbline 85
006A ; RW_0;
006A 9598 cbi 0x12,5
006C .dbline 86
006C ; DataLcd = 0x0f; //设置D=1,C=1,B=1
006C 8FE0 ldi R24,15
006E 88BB out 0x18,R24
0070 .dbline 87
0070 ; delay250ns;
0070 0000 nop
0072 .dbline 87
0072 0000 nop
0074 .dbline 88
0074 ; EN_1;
0074 979A sbi 0x12,7
0076 .dbline 89
0076 ; delay500ns;
0076 0000 nop
0078 .dbline 89
0078 0000 nop
007A .dbline 89
007A 0000 nop
007C .dbline 89
007C 0000 nop
007E .dbline 90
007E ; EN_0;
007E 9798 cbi 0x12,7
0080 .dbline 91
0080 ; delay125ns;
0080 0000 nop
0082 .dbline 92
0082 ; RS_1;
0082 949A sbi 0x12,4
0084 .dbline 93
0084 ; RW_1;
0084 959A sbi 0x12,5
0086 .dbline -2
0086 L4:
0086 .dbline 0 ; func end
0086 0895 ret
0088 .dbend
0088 .dbfunc e FunctionSet _FunctionSet fV
.even
0088 _FunctionSet::
0088 .dbline -1
0088 .dbline 96
0088 ; }
0088 ; void FunctionSet(void)
0088 ; {
0088 .dbline 97
0088 ; DataOut;
0088 8FEF ldi R24,255
008A 87BB out 0x17,R24
008C .dbline 98
008C ; EN_0;
008C 9798 cbi 0x12,7
008E .dbline 99
008E ; RS_0;
008E 9498 cbi 0x12,4
0090 .dbline 100
0090 ; RW_0;
0090 9598 cbi 0x12,5
0092 .dbline 101
0092 ; DataLcd = 0x38; //设置DL=1,N=1,F=0
0092 88E3 ldi R24,56
0094 88BB out 0x18,R24
0096 .dbline 102
0096 ; delay250ns; //地址建立时间,最小140ns
0096 0000 nop
0098 .dbline 102
0098 0000 nop
009A .dbline 103
009A ; EN_1;
009A 979A sbi 0x12,7
009C .dbline 104
009C ; delay500ns; //脉冲宽度,最小450ns
009C 0000 nop
009E .dbline 104
009E 0000 nop
00A0 .dbline 104
00A0 0000 nop
00A2 .dbline 104
00A2 0000 nop
00A4 .dbline 105
00A4 ; EN_0;
00A4 9798 cbi 0x12,7
00A6 .dbline 106
00A6 ; delay125ns; //地址保持时间,最小10ns
00A6 0000 nop
00A8 .dbline 107
00A8 ; RS_1;
00A8 949A sbi 0x12,4
00AA .dbline 108
00AA ; RW_1;
00AA 959A sbi 0x12,5
00AC .dbline -2
00AC L5:
00AC .dbline 0 ; func end
00AC 0895 ret
00AE .dbend
00AE .dbfunc e CgramSet _CgramSet fV
.even
00AE _CgramSet::
00AE .dbline -1
00AE .dbline 111
00AE ; }
00AE ; void CgramSet(void)
00AE ; {
00AE .dbline -2
00AE L6:
00AE .dbline 0 ; func end
00AE 0895 ret
00B0 .dbend
00B0 .dbfunc e DdramSet _DdramSet fV
00B0 ; addr -> R16
.even
00B0 _DdramSet::
00B0 .dbline -1
00B0 .dbline 115
00B0 ;
00B0 ; }
00B0 ; void DdramSet(unsigned char addr)
00B0 ; {
00B0 .dbline 116
00B0 ; EN_0;
00B0 9798 cbi 0x12,7
00B2 .dbline 117
00B2 ; RS_0;
00B2 9498 cbi 0x12,4
00B4 .dbline 118
00B4 ; RW_0;
00B4 9598 cbi 0x12,5
00B6 .dbline 119
00B6 ; DataLcd = (0x80+addr); //
00B6 802F mov R24,R16
00B8 8058 subi R24,128 ; addi 128
00BA 88BB out 0x18,R24
00BC .dbline 120
00BC ; delay250ns;
00BC 0000 nop
00BE .dbline 120
00BE 0000 nop
00C0 .dbline 121
00C0 ; EN_1;
00C0 979A sbi 0x12,7
00C2 .dbline 122
00C2 ; delay500ns;
00C2 0000 nop
00C4 .dbline 122
00C4 0000 nop
00C6 .dbline 122
00C6 0000 nop
00C8 .dbline 122
00C8 0000 nop
00CA .dbline 123
00CA ; EN_0;
00CA 9798 cbi 0x12,7
00CC .dbline 124
00CC ; delay125ns;
00CC 0000 nop
00CE .dbline 125
00CE ; RS_1;
00CE 949A sbi 0x12,4
00D0 .dbline 126
00D0 ; RW_1;
00D0 959A sbi 0x12,5
00D2 .dbline -2
00D2 L7:
00D2 .dbline 0 ; func end
00D2 0895 ret
00D4 .dbsym r addr 16 c
00D4 .dbend
00D4 .dbfunc e BFRead _BFRead fc
00D4 ; bf -> R16
.even
00D4 _BFRead::
00D4 .dbline -1
00D4 .dbline 129
00D4 ; }
00D4 ; unsigned char BFRead(void)
00D4 ; {
00D4 .dbline 131
00D4 ; unsigned char bf;
00D4 ; RS_0;
00D4 9498 cbi 0x12,4
00D6 .dbline 132
00D6 ; RW_1;
00D6 959A sbi 0x12,5
00D8 .dbline 133
00D8 ; delay250ns;
00D8 0000 nop
00DA .dbline 133
00DA 0000 nop
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -