📄 1602.lis
字号:
.module _1602.c
.area text(rom, con, rel)
0000 .dbfile D:\学习工具\单片机程序\1602液晶\1602.c
.area code(ram, con, rel)
0000 .dbfile D:\学习工具\单片机程序\1602液晶\1602.c
.area lit(rom, con, rel)
0000 _table_1::
0000 3135313534383431363600 .byte 49,53,49,53,52,56,52,49,54,54,0
000B .dbsym e table_1 _table_1 A[11:11]kc
.area data(ram, con, rel)
0000 .dbfile D:\学习工具\单片机程序\1602液晶\1602.c
0000 _table_2::
0000 .blkb 2
.area idata
0000 3030 .byte 48,48
.area data(ram, con, rel)
0002 .dbfile D:\学习工具\单片机程序\1602液晶\1602.c
0002 .blkb 2
.area idata
0002 2D30 .byte 45,48
.area data(ram, con, rel)
0004 .dbfile D:\学习工具\单片机程序\1602液晶\1602.c
0004 .blkb 2
.area idata
0004 302D .byte 48,45
.area data(ram, con, rel)
0006 .dbfile D:\学习工具\单片机程序\1602液晶\1602.c
0006 .blkb 2
.area idata
0006 3030 .byte 48,48
.area data(ram, con, rel)
0008 .dbfile D:\学习工具\单片机程序\1602液晶\1602.c
0008 .dbsym e table_2 _table_2 A[8:8]c
.area text(rom, con, rel)
0000 .dbfile D:\学习工具\单片机程序\1602液晶\1602.c
0000 .dbfunc e WriteDataLCM _WriteDataLCM fV
0000 ; WDLCM -> R10
.even
0000 _WriteDataLCM::
0000 AA92 st -y,R10
0002 A02E mov R10,R16
0004 .dbline -1
0004 .dbline 71
0004 ; //把明浩的1602的程序移植到了ATMEGA8上,共享一下。
0004 ; /*============================================================
0004 ; 使用1602液晶显示的实验例子 明浩 2004/2/27
0004 ; ==============================================================
0004 ;
0004 ; SMC1602A(16*2)模拟口线接线方式
0004 ; 连接线图:
0004 ; ---------------------------------------------------
0004 ; |LCM-----51 | LCM-----51 | LCM------51 |
0004 ; --------------------------------------------------|
0004 ; |DB0-----P1.0 | DB4-----P1.4 | RW-------P2.0 |
0004 ; |DB1-----P1.1 | DB5-----P1.5 | RS-------P2.1 |
0004 ; |DB2-----P1.2 | DB6-----P1.6 | E--------P2.2 |
0004 ; |DB3-----P1.3 | DB7-----P1.7 | VLCD接1K电阻到GND|
0004 ; ---------------------------------------------------
0004 ;
0004 ; SMC1602A(16*2)模拟口线接线方式
0004 ; 连接线图:
0004 ; ---------------------------------------------------
0004 ; |LCM-----M8 | LCM-----M8 | LCM------M8 |
0004 ; ----------------------------------------------|
0004 ; |DB0-----PB0 | DB4-----PB4 | RW-------PD6 |
0004 ; |DB1-----PB1 | DB5-----PB5 | RS-------PD7 |
0004 ; |DB2-----PB2 | DB6-----PB6 | E--------PD5 |
0004 ; |DB3-----PB3 | DB7-----PB7 | VLCD接1K电阻到GND|
0004 ; ---------------------------------------------------
0004 ; ==============================================================*/
0004 ; #include <iom16V.h>
0004 ; #include <macros.h>
0004 ;
0004 ; #define CTLPORT PORTD //模拟总线用了PD口的PD5,PD6,PD7
0004 ; #define LCD_RS 5 // pin-0 on CTLPORT
0004 ; #define LCD_RW 6 // pin-1 on CTLPORT
0004 ; #define LCD_E 7 // pin-2 on CTLPORT
0004 ;
0004 ; #define SET_LCD_E CTLPORT|=(1<<LCD_E) // LCD: E = 1
0004 ; #define CLR_LCD_E CTLPORT&=~(1<<LCD_E) // LCD: E = 0
0004 ; #define SET_LCD_RW CTLPORT|=(1<<LCD_RW) // LCD: R/W = 1 (read)
0004 ; #define CLR_LCD_RW CTLPORT&=~(1<<LCD_RW) // LCD: R/W = 0 (write)
0004 ; #define SET_LCD_RS CTLPORT|=(1<<LCD_RS) // LCD: R/S = 1 (data reg)
0004 ; #define CLR_LCD_RS CTLPORT&=~(1<<LCD_RS) // LCD: R/S = 0 (status reg)
0004 ;
0004 ; //#define DataPortOUT PORTB // 数据端口PB口
0004 ; //#define DataPortIN PINB
0004 ; #define DataPortfx DDRB
0004 ; #define Busy 0x80
0004 ; #define LCM_Data PORTB // 数据端口PB口
0004 ; #define LCM_Data1 PINB // 数据端口PB口
0004 ;
0004 ; #pragma data:code
0004 ; unsigned char const table_1[] = {"1515484166"};
0004 ; //unsigned char table_2[] = {'0','0','-','0','0','-','0','0'};
0004 ; #pragma data:data
0004 ; unsigned char table_2[] = {'0','0','-','0','0','-','0','0'};
0004 ; void WriteDataLCM(unsigned char WDLCM);
0004 ; void WriteCommandLCM(unsigned char WCLCM,unsigned char BuysC);
0004 ; unsigned char ReadDataLCM(void);
0004 ; unsigned char ReadStatusLCM(void);
0004 ; void LCMInit(void);
0004 ; void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData);
0004 ; void DisplayListChar(unsigned char X, unsigned char Y, unsigned char const *DData);
0004 ; void Delay5Ms(void);
0004 ; void Delay400Ms(void);
0004 ;
0004 ;
0004 ;
0004 ;
0004 ;
0004 ; //写数据
0004 ; void WriteDataLCM(unsigned char WDLCM)
0004 ; {
0004 .dbline 72
0004 ; ReadStatusLCM(); //检测忙
0004 31D0 xcall _ReadStatusLCM
0006 .dbline 73
0006 ; LCM_Data = WDLCM;
0006 A8BA out 0x18,R10
0008 .dbline 74
0008 ; SET_LCD_RS;
0008 959A sbi 0x12,5
000A .dbline 75
000A ; CLR_LCD_RW;
000A 9698 cbi 0x12,6
000C .dbline 76
000C ; SET_LCD_RS;
000C 959A sbi 0x12,5
000E .dbline 77
000E ; CLR_LCD_RW;
000E 9698 cbi 0x12,6
0010 .dbline 78
0010 ; CLR_LCD_E; //若晶振速度太高可以在这后加小的延时
0010 9798 cbi 0x12,7
0012 .dbline 79
0012 ; CLR_LCD_E; //延时
0012 9798 cbi 0x12,7
0014 .dbline 80
0014 ; CLR_LCD_E;
0014 9798 cbi 0x12,7
0016 .dbline 81
0016 ; CLR_LCD_E;
0016 9798 cbi 0x12,7
0018 .dbline 82
0018 ; CLR_LCD_E;
0018 9798 cbi 0x12,7
001A .dbline 83
001A ; CLR_LCD_E;
001A 9798 cbi 0x12,7
001C .dbline 84
001C ; SET_LCD_E;
001C 979A sbi 0x12,7
001E .dbline 85
001E ; SET_LCD_E;
001E 979A sbi 0x12,7
0020 .dbline -2
0020 L1:
0020 .dbline 0 ; func end
0020 A990 ld R10,y+
0022 0895 ret
0024 .dbsym r WDLCM 10 c
0024 .dbend
0024 .dbfunc e WriteCommandLCM _WriteCommandLCM fV
0024 ; BuysC -> R12
0024 ; WCLCM -> R10
.even
0024 _WriteCommandLCM::
0024 AA92 st -y,R10
0026 CA92 st -y,R12
0028 C22E mov R12,R18
002A A02E mov R10,R16
002C .dbline -1
002C .dbline 90
002C ; }
002C ;
002C ; //写指令
002C ; void WriteCommandLCM(unsigned char WCLCM,unsigned char BuysC) //BuysC为0时忽略忙检测
002C ; {
002C .dbline 91
002C ; if (BuysC) ReadStatusLCM(); //根据需要检测忙
002C CC20 tst R12
002E 09F0 breq L3
0030 X0:
0030 .dbline 91
0030 1BD0 xcall _ReadStatusLCM
0032 L3:
0032 .dbline 92
0032 ; LCM_Data = WCLCM;
0032 A8BA out 0x18,R10
0034 .dbline 93
0034 ; CLR_LCD_RS;
0034 9598 cbi 0x12,5
0036 .dbline 94
0036 ; CLR_LCD_RW;
0036 9698 cbi 0x12,6
0038 .dbline 95
0038 ; CLR_LCD_E;
0038 9798 cbi 0x12,7
003A .dbline 96
003A ; CLR_LCD_E;
003A 9798 cbi 0x12,7
003C .dbline 97
003C ; CLR_LCD_E;
003C 9798 cbi 0x12,7
003E .dbline 98
003E ; CLR_LCD_E;
003E 9798 cbi 0x12,7
0040 .dbline 99
0040 ; CLR_LCD_E;
0040 9798 cbi 0x12,7
0042 .dbline 100
0042 ; CLR_LCD_E;
0042 9798 cbi 0x12,7
0044 .dbline 101
0044 ; SET_LCD_E;
0044 979A sbi 0x12,7
0046 .dbline 102
0046 ; SET_LCD_E;
0046 979A sbi 0x12,7
0048 .dbline -2
0048 L2:
0048 .dbline 0 ; func end
0048 C990 ld R12,y+
004A A990 ld R10,y+
004C 0895 ret
004E .dbsym r BuysC 12 c
004E .dbsym r WCLCM 10 c
004E .dbend
004E .dbfunc e ReadDataLCM _ReadDataLCM fc
.even
004E _ReadDataLCM::
004E .dbline -1
004E .dbline 107
004E ; }
004E ;
004E ; //读数据
004E ; unsigned char ReadDataLCM(void)
004E ; {
004E .dbline 108
004E ; SET_LCD_RS;
004E 959A sbi 0x12,5
0050 .dbline 109
0050 ; SET_LCD_RW;
0050 969A sbi 0x12,6
0052 .dbline 110
0052 ; CLR_LCD_E;
0052 9798 cbi 0x12,7
0054 .dbline 111
0054 ; CLR_LCD_E;
0054 9798 cbi 0x12,7
0056 .dbline 112
0056 ; CLR_LCD_E;
0056 9798 cbi 0x12,7
0058 .dbline 113
0058 ; CLR_LCD_E;
0058 9798 cbi 0x12,7
005A .dbline 114
005A ; CLR_LCD_E;
005A 9798 cbi 0x12,7
005C .dbline 115
005C ; CLR_LCD_E;
005C 9798 cbi 0x12,7
005E .dbline 116
005E ; CLR_LCD_E;
005E 9798 cbi 0x12,7
0060 .dbline 117
0060 ; SET_LCD_E;
0060 979A sbi 0x12,7
0062 .dbline 118
0062 ; SET_LCD_E;
0062 979A sbi 0x12,7
0064 .dbline 119
0064 ; return(LCM_Data);
0064 08B3 in R16,0x18
0066 .dbline -2
0066 L5:
0066 .dbline 0 ; func end
0066 0895 ret
0068 .dbend
0068 .dbfunc e ReadStatusLCM _ReadStatusLCM fc
.even
0068 _ReadStatusLCM::
0068 .dbline -1
0068 .dbline 124
0068 ; }
0068 ;
0068 ; //读状态
0068 ; unsigned char ReadStatusLCM(void)
0068 ; {
0068 .dbline 125
0068 ; DDRB=0x00; //输入
0068 2224 clr R2
006A 27BA out 0x17,R2
006C .dbline 126
006C ; CLR_LCD_RS;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -