📄 +_-
字号:
.module main.c
.area text(rom, con, rel)
0000 .dbfile main.c
.area vector(rom, abs)
.org 4
0004 0C947001 jmp _miao2
.area text(rom, con, rel)
0000 .dbfile main.c
0000 .dbfile C:\Users\Think\Desktop\新建文件夹\密码输入2\yejing.c
0000 .dbfunc e delay _delay fV
0000 ; i -> R20,R21
0000 ; US -> R10,R11
.even
0000 _delay::
0000 0E940000 xcall push_xgset300C
0004 5801 movw R10,R16
0006 .dbline -1
0006 .dbline 25
0006 ; //#include <iom16v.h>
0006 ; //#include <macros.h>
0006 ; //#pragma interrupt_handler miao9:9
0006 ; //#pragma interrupt_handler miao2:2
0006 ; //液晶命名
0006 ; //#define uchar unsigned char
0006 ; //#define uint unsigned int
0006 ;
0006 ; //#define SET_PSB PORTA|=BIT(3)
0006 ; //#define CLR_PSB PORTA&=~BIT(3)
0006 ;
0006 ; #define SET_CS PORTA|=BIT(4)
0006 ; #define CLR_CS PORTA&=~BIT(4)
0006 ;
0006 ; #define SET_SID PORTA|=BIT(5)
0006 ; #define CLR_SID PORTA&=~BIT(5)
0006 ;
0006 ; #define SET_SCLK PORTA|=BIT(6)
0006 ; #define CLR_SCLK PORTA&=~BIT(6)
0006 ; /****************************************************************
0006 ; 微秒延时
0006 ; *****************************************************************/
0006 ;
0006 ; void delay(uint US)
0006 ; {
0006 .dbline 27
0006 ; uint i;
0006 ; US=US*5/4; //5/4是在8MHz晶振下,通过软件仿真反复实验得到的数值
0006 05E0 ldi R16,5
0008 10E0 ldi R17,0
000A 9501 movw R18,R10
000C 0E940000 xcall empy16s
0010 5801 movw R10,R16
0012 B694 lsr R11
0014 A794 ror R10
0016 B694 lsr R11
0018 A794 ror R10
001A .dbline 28
001A ; for( i=0;i<US;i++);
001A 4427 clr R20
001C 5527 clr R21
001E 02C0 xjmp L5
0020 L2:
0020 .dbline 28
0020 L3:
0020 .dbline 28
0020 4F5F subi R20,255 ; offset = 1
0022 5F4F sbci R21,255
0024 L5:
0024 .dbline 28
0024 4A15 cp R20,R10
0026 5B05 cpc R21,R11
0028 D8F3 brlo L2
002A X0:
002A .dbline -2
002A L1:
002A .dbline 0 ; func end
002A 0C940000 xjmp pop_xgset300C
002E .dbsym r i 20 i
002E .dbsym r US 10 i
002E .dbend
002E .dbfunc e delay_ms _delay_ms fV
002E ; i -> R20,R21
002E ; j -> R22,R23
002E ; ms -> R16,R17
.even
002E _delay_ms::
002E 0E940000 xcall push_xgsetF000
0032 .dbline -1
0032 .dbline 35
0032 ; }
0032 ; /****************************************************************
0032 ; 毫秒延时
0032 ; *****************************************************************/
0032 ;
0032 ; void delay_ms(uint ms)
0032 ; {
0032 .dbline 37
0032 ; uint i,j;
0032 ; for(i=0;i<ms;i++)
0032 4427 clr R20
0034 5527 clr R21
0036 0BC0 xjmp L10
0038 L7:
0038 .dbline 38
0038 ; {
0038 .dbline 39
0038 ; for(j=0;j<1141;j++);
0038 6627 clr R22
003A 7727 clr R23
003C 02C0 xjmp L14
003E L11:
003E .dbline 39
003E L12:
003E .dbline 39
003E 6F5F subi R22,255 ; offset = 1
0040 7F4F sbci R23,255
0042 L14:
0042 .dbline 39
0042 6537 cpi R22,117
0044 E4E0 ldi R30,4
0046 7E07 cpc R23,R30
0048 D0F3 brlo L11
004A X1:
004A .dbline 40
004A ; }
004A L8:
004A .dbline 37
004A 4F5F subi R20,255 ; offset = 1
004C 5F4F sbci R21,255
004E L10:
004E .dbline 37
004E 4017 cp R20,R16
0050 5107 cpc R21,R17
0052 90F3 brlo L7
0054 X2:
0054 .dbline -2
0054 L6:
0054 .dbline 0 ; func end
0054 0C940000 xjmp pop_xgsetF000
0058 .dbsym r i 20 i
0058 .dbsym r j 22 i
0058 .dbsym r ms 16 i
0058 .dbend
0058 .dbfunc e port_init12864 _port_init12864 fV
.even
0058 _port_init12864::
0058 .dbline -1
0058 .dbline 47
0058 ; }
0058 ; /****************************************************************
0058 ; 端口初始化
0058 ; *****************************************************************/
0058 ;
0058 ; void port_init12864()
0058 ; {
0058 .dbline 48
0058 ; DDRA|=BIT(4)|BIT(5)|BIT(6); //设定a口输出
0058 8AB3 in R24,0x1a
005A 8067 ori R24,112
005C 8ABB out 0x1a,R24
005E .dbline 49
005E ; PORTA&=0X8F; //a口输出低
005E 8BB3 in R24,0x1b
0060 8F78 andi R24,143
0062 8BBB out 0x1b,R24
0064 .dbline 54
0064 ;
0064 ; //DDRB=0XFF; //设定b口输出
0064 ; //PORTB=0X00; //输出低
0064 ;
0064 ; SET_CS; //片选
0064 DC9A sbi 0x1b,4
0066 .dbline -2
0066 L15:
0066 .dbline 0 ; func end
0066 0895 ret
0068 .dbend
0068 .dbfunc e lcd_init12864 _lcd_init12864 fV
.even
0068 _lcd_init12864::
0068 .dbline -1
0068 .dbline 63
0068 ; //SET_SCLK;
0068 ;
0068 ; }
0068 ; /****************************************************************
0068 ; 液晶屏初始化
0068 ; *****************************************************************/
0068 ;
0068 ; void lcd_init12864()
0068 ; {
0068 .dbline 65
0068 ; //CLR_PSB; //当PSB为低时 液晶处于串行数据模式
0068 ; write_com12864(0x30); //功能设定:8位接口控制位,基本指令集
0068 00E3 ldi R16,48
006A 10E0 ldi R17,0
006C 33D0 xcall _write_com12864
006E .dbline 66
006E ; delay(5);
006E 05E0 ldi R16,5
0070 10E0 ldi R17,0
0072 C6DF xcall _delay
0074 .dbline 67
0074 ; write_com12864(0x0C); //显示开关设置:整体显示开,游标显示关,正常显示
0074 0CE0 ldi R16,12
0076 10E0 ldi R17,0
0078 2DD0 xcall _write_com12864
007A .dbline 68
007A ; delay(5);
007A 05E0 ldi R16,5
007C 10E0 ldi R17,0
007E C0DF xcall _delay
0080 .dbline 69
0080 ; write_com12864(0x01); //清除显示
0080 01E0 ldi R16,1
0082 10E0 ldi R17,0
0084 27D0 xcall _write_com12864
0086 .dbline 70
0086 ; delay(5);
0086 05E0 ldi R16,5
0088 10E0 ldi R17,0
008A .dbline -2
008A L16:
008A .dbline 0 ; func end
008A BACF xjmp _delay
008C .dbend
008C .dbfunc e sendbyte12864 _sendbyte12864 fV
008C ; t -> R20,R21
008C ; byte -> R10
.even
008C _sendbyte12864::
008C 0E940000 xcall push_xgset300C
0090 A02E mov R10,R16
0092 .dbline -1
0092 .dbline 77
0092 ; }
0092 ;
0092 ; /*****************************************************************
0092 ; 字节传送,一个字节一个传
0092 ; ******************************************************************/
0092 ; void sendbyte12864(uchar byte)
0092 ; {
0092 .dbline 79
0092 ; uint t;
0092 ; for(t=8;t>0;t--)
0092 48E0 ldi R20,8
0094 50E0 ldi R21,0
0096 19C0 xjmp L21
0098 L18:
0098 .dbline 80
0098 ; {
0098 .dbline 81
0098 ; CLR_SCLK;
0098 DE98 cbi 0x1b,6
009A .dbline 82
009A ; if(byte & BIT(t-1)) SET_SID;
009A 9A01 movw R18,R20
009C 2150 subi R18,1
009E 3040 sbci R19,0
00A0 01E0 ldi R16,1
00A2 10E0 ldi R17,0
00A4 0E940000 xcall lsl16
00A8 2A2C mov R2,R10
00AA 3324 clr R3
00AC 2022 and R2,R16
00AE 3122 and R3,R17
00B0 2220 tst R2
00B2 11F4 brne X3
00B4 3320 tst R3
00B6 11F0 breq L22
00B8 X3:
00B8 .dbline 82
00B8 DD9A sbi 0x1b,5
00BA 01C0 xjmp L23
00BC L22:
00BC .dbline 83
00BC ; else CLR_SID;
00BC DD98 cbi 0x1b,5
00BE L23:
00BE .dbline 84
00BE ; delay(2);
00BE 02E0 ldi R16,2
00C0 10E0 ldi R17,0
00C2 9EDF xcall _delay
00C4 .dbline 85
00C4 ; SET_SCLK;
00C4 DE9A sbi 0x1b,6
00C6 .dbline 86
00C6 ; }
00C6 L19:
00C6 .dbline 79
00C6 4150 subi R20,1
00C8 5040 sbci R21,0
00CA L21:
00CA .dbline 79
00CA 4030 cpi R20,0
00CC 4507 cpc R20,R21
00CE 21F7 brne L18
00D0 X4:
00D0 .dbline -2
00D0 L17:
00D0 .dbline 0 ; func end
00D0 0C940000 xjmp pop_xgset300C
00D4 .dbsym r t 20 i
00D4 .dbsym r byte 10 c
00D4 .dbend
00D4 .dbfunc e write_com12864 _write_com12864 fV
00D4 ; com -> R20
.even
00D4 _write_com12864::
00D4 4A93 st -y,R20
00D6 402F mov R20,R16
00D8 .dbline -1
00D8 .dbline 94
00D8 ;
00D8 ; }
00D8 ; /****************************************************************
00D8 ; 写指令函数
00D8 ; *****************************************************************/
00D8 ;
00D8 ; void write_com12864(uchar com)
00D8 ; {
00D8 .dbline 96
00D8 ; //SET_CS;
00D8 ; sendbyte12864(0xf8); //定义写指令写命令
00D8 08EF ldi R16,248
00DA D8DF xcall _sendbyte12864
00DC .dbline 97
00DC ; delay(2);
00DC 02E0 ldi R16,2
00DE 10E0 ldi R17,0
00E0 8FDF xcall _delay
00E2 .dbline 98
00E2 ; sendbyte12864(com&0xf0);//先写高四位
00E2 042F mov R16,R20
00E4 007F andi R16,240
00E6 D2DF xcall _sendbyte12864
00E8 .dbline 99
00E8 ; delay(2);
00E8 02E0 ldi R16,2
00EA 10E0 ldi R17,0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -