📄 lcd1602显示.lis
字号:
.module LCD1602显示.c
.area text(rom, con, rel)
0000 .dbfile E:\xiaozhiyong2009\设计资料\项目设计\ICCAVR_mega8_C\ICCAVR_mega8_LCD1602显示\LCD1602显示.c
0000 .dbfunc e port_init _port_init fV
.even
0000 _port_init::
0000 .dbline -1
0000 .dbline 9
0000 ; //ICC-AVR application builder : 2009-3-12 16:02:34
0000 ; // Target : M8
0000 ; // Crystal: 8.0000Mhz
0000 ;
0000 ; #include <iom8v.h>
0000 ; #include <macros.h>
0000 ;
0000 ; void port_init(void)
0000 ; {
0000 .dbline 10
0000 ; PORTB = 0x00;
0000 2224 clr R2
0002 28BA out 0x18,R2
0004 .dbline 11
0004 ; DDRB = 0x00;
0004 27BA out 0x17,R2
0006 .dbline 12
0006 ; PORTC = 0x00; //m103 output only
0006 25BA out 0x15,R2
0008 .dbline 13
0008 ; DDRC = 0x00;
0008 24BA out 0x14,R2
000A .dbline 14
000A ; PORTD = 0x00;
000A 22BA out 0x12,R2
000C .dbline 15
000C ; DDRD = 0x00;
000C 21BA out 0x11,R2
000E .dbline -2
000E L1:
000E .dbline 0 ; func end
000E 0895 ret
0010 .dbend
0010 .dbfunc e init_devices _init_devices fV
.even
0010 _init_devices::
0010 .dbline -1
0010 .dbline 20
0010 ; }
0010 ;
0010 ; //call this routine to initialize all peripherals
0010 ; void init_devices(void)
0010 ; {
0010 .dbline 22
0010 ; //stop errant interrupts until set up
0010 ; CLI(); //disable all interrupts
0010 F894 cli
0012 .dbline 23
0012 ; port_init();
0012 F6DF rcall _port_init
0014 .dbline 25
0014 ;
0014 ; MCUCR = 0x00;
0014 2224 clr R2
0016 25BE out 0x35,R2
0018 .dbline 26
0018 ; GICR = 0x00;
0018 2BBE out 0x3b,R2
001A .dbline 27
001A ; TIMSK = 0x00; //timer interrupt sources
001A 29BE out 0x39,R2
001C .dbline 28
001C ; SEI(); //re-enable interrupts
001C 7894 sei
001E .dbline -2
001E L2:
001E .dbline 0 ; func end
001E 0895 ret
0020 .dbend
0020 .dbfunc e delay _delay fV
0020 ; i -> R20,R21
0020 ; j -> R22,R23
0020 ; ms -> R16,R17
.even
0020 _delay::
0020 00D0 rcall push_xgsetF000
0022 .dbline -1
0022 .dbline 48
0022 ; //all peripherals are now initialized
0022 ; }
0022 ;
0022 ; /*************************************************************************
0022 ; 用 途:LCD1602显示
0022 ; Taget :mega8
0022 ; crystal :8M
0022 ; 介 绍:用PB做端口,
0022 ; PB0-D0
0022 ; PB7-D7
0022 ; ------
0022 ; PC0-6
0022 ; PC1-5
0022 ; PC2-4----456为控制引脚
0022 ; 入口参数:
0022 ; 出口参数:
0022 ; *************************************/
0022 ; //延时程序
0022 ; void delay(unsigned int ms)
0022 ; {
0022 .dbline 50
0022 ; unsigned int i,j;
0022 ; for(i=0;i<ms;i++)
0022 4427 clr R20
0024 5527 clr R21
0026 0BC0 rjmp L7
0028 L4:
0028 .dbline 51
0028 ; {for(j=0;j<200;j++);}
0028 .dbline 51
0028 6627 clr R22
002A 7727 clr R23
002C 02C0 rjmp L11
002E L8:
002E .dbline 51
002E L9:
002E .dbline 51
002E 6F5F subi R22,255 ; offset = 1
0030 7F4F sbci R23,255
0032 L11:
0032 .dbline 51
0032 683C cpi R22,200
0034 E0E0 ldi R30,0
0036 7E07 cpc R23,R30
0038 D0F3 brlo L8
003A X0:
003A .dbline 51
003A L5:
003A .dbline 50
003A 4F5F subi R20,255 ; offset = 1
003C 5F4F sbci R21,255
003E L7:
003E .dbline 50
003E 4017 cp R20,R16
0040 5107 cpc R21,R17
0042 90F3 brlo L4
0044 X1:
0044 .dbline -2
0044 L3:
0044 .dbline 0 ; func end
0044 00C0 rjmp pop_xgsetF000
0046 .dbsym r i 20 i
0046 .dbsym r j 22 i
0046 .dbsym r ms 16 i
0046 .dbend
0046 .dbfunc e com_lcd _com_lcd fV
0046 ; com -> R10
.even
0046 _com_lcd::
0046 AA92 st -y,R10
0048 A02E mov R10,R16
004A .dbline -1
004A .dbline 55
004A ; }
004A ; //送指令子程序
004A ; void com_lcd(unsigned char com)
004A ; {
004A .dbline 56
004A ; PORTC&=~(1<<PC2);
004A AA98 cbi 0x15,2
004C .dbline 57
004C ; PORTC&=~(1<<PC1);
004C A998 cbi 0x15,1
004E .dbline 58
004E ; PORTB=com;
004E A8BA out 0x18,R10
0050 .dbline 59
0050 ; PORTC|=(1<<PC0);
0050 A89A sbi 0x15,0
0052 .dbline 60
0052 ; delay(5);
0052 05E0 ldi R16,5
0054 10E0 ldi R17,0
0056 E4DF rcall _delay
0058 .dbline 61
0058 ; PORTC&=~(1<<PC0);
0058 A898 cbi 0x15,0
005A .dbline -2
005A L12:
005A .dbline 0 ; func end
005A A990 ld R10,y+
005C 0895 ret
005E .dbsym r com 10 c
005E .dbend
005E .dbfunc e data_lcd _data_lcd fV
005E ; data -> R10
.even
005E _data_lcd::
005E AA92 st -y,R10
0060 A02E mov R10,R16
0062 .dbline -1
0062 .dbline 65
0062 ; }
0062 ; //送数据子程序
0062 ; void data_lcd(unsigned char data)
0062 ; {
0062 .dbline 66
0062 ; PORTC|=(1<<PC2);
0062 AA9A sbi 0x15,2
0064 .dbline 67
0064 ; PORTC&=~(1<<PC1);
0064 A998 cbi 0x15,1
0066 .dbline 68
0066 ; PORTB=data;
0066 A8BA out 0x18,R10
0068 .dbline 69
0068 ; PORTC|=(1<<PC0);
0068 A89A sbi 0x15,0
006A .dbline 70
006A ; delay(5);
006A 05E0 ldi R16,5
006C 10E0 ldi R17,0
006E D8DF rcall _delay
0070 .dbline 71
0070 ; PORTC&=~(1<<PC0);
0070 A898 cbi 0x15,0
0072 .dbline -2
0072 L13:
0072 .dbline 0 ; func end
0072 A990 ld R10,y+
0074 0895 ret
0076 .dbsym r data 10 c
0076 .dbend
0076 .dbfunc e LCD1602_init _LCD1602_init fV
.even
0076 _LCD1602_init::
0076 .dbline -1
0076 .dbline 75
0076 ; }
0076 ; //初始化
0076 ; void LCD1602_init()
0076 ; {
0076 .dbline 76
0076 ; DDRB=0XFF;
0076 8FEF ldi R24,255
0078 87BB out 0x17,R24
007A .dbline 77
007A ; DDRC|=0X07;
007A 84B3 in R24,0x14
007C 8760 ori R24,7
007E 84BB out 0x14,R24
0080 .dbline 78
0080 ; PORTC&=~(1<<PC0);
0080 A898 cbi 0x15,0
0082 .dbline 80
0082 ;
0082 ; com_lcd(0x38);//5*7,2行显示
0082 08E3 ldi R16,56
0084 E0DF rcall _com_lcd
0086 .dbline 81
0086 ; delay(5);
0086 05E0 ldi R16,5
0088 10E0 ldi R17,0
008A CADF rcall _delay
008C .dbline 82
008C ; com_lcd(0x01); //清屏
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -