📄 12864r.lst
字号:
__text_start:
__start:
0047 E5CF LDI R28,0x5F
0048 E0D4 LDI R29,4
0049 BFCD OUT 0x3D,R28
004A BFDE OUT 0x3E,R29
004B 51C0 SUBI R28,0x10
004C 40D0 SBCI R29,0
004D EA0A LDI R16,0xAA
004E 8308 STD Y+0,R16
004F 2400 CLR R0
0050 E6E0 LDI R30,0x60
0051 E0F0 LDI R31,0
0052 E010 LDI R17,0
0053 36E0 CPI R30,0x60
0054 07F1 CPC R31,R17
0055 F011 BEQ 0x0058
0056 9201 ST R0,Z+
0057 CFFB RJMP 0x0053
0058 8300 STD Z+0,R16
0059 E8ED LDI R30,0x8D
005A E0F0 LDI R31,0
005B E6A0 LDI R26,0x60
005C E0B0 LDI R27,0
005D E010 LDI R17,0
005E 38ED CPI R30,0x8D
005F 07F1 CPC R31,R17
0060 F021 BEQ 0x0065
0061 95C8 LPM
0062 9631 ADIW R30,1
0063 920D ST R0,X+
0064 CFF9 RJMP 0x005E
0065 940E0068 CALL _main
_exit:
0067 CFFF RJMP _exit
_main:
i --> R20
0068 9721 SBIW R28,1
FILE: E:\YM200\DEMO\LCD12864R(7920)\7920_16.c
(0001) //12864液晶(ST7920驱动)的3线串行驱动 MCU=ATMega16(L)
(0002)
(0003) /***********************************************************************
(0004) 工 程:ST7920驱动的12864液晶的3线串行驱动模式
(0005) 引脚定义:
(0006) RS(CS)=====>PB0
(0007) RW(SID)====>PB1
(0008) EN(SCLK)===>PB2
(0009) PSB为硬件控制,接高电平为8位或4位的并行模式,接低电平为串行模式
(0010) ************************************************************************/
(0011) #include <iom16v.h>
(0012) #include <macros.h>
(0013)
(0014) #define uchar unsigned char
(0015) #define uint unsigned int
(0016) #define nop() NOP()
(0017) #define xtal 8
(0018)
(0019) #define Set_CS() DDRB |= (1<<0);PORTB |= (1<<0)
(0020) #define Set_SID() DDRB |= (1<<1);PORTB |= (1<<1)
(0021) #define Set_SCLK() DDRB |= (1<<2);PORTB |= (1<<2)
(0022)
(0023) #define Clr_CS() DDRB |= (1<<0);PORTB &=~(1<<0)
(0024) #define Clr_SID() DDRB |= (1<<1);PORTB &=~(1<<1)
(0025) #define Clr_SCLK() DDRB |= (1<<2);PORTB &=~(1<<2)
(0026)
(0027) //====================================================================
(0028) //函数声明
(0029) void Delay(uint ms); //延时子程序
(0030) void W_1byte(uchar RW, uchar RS, uchar W_data);
(0031) void Write_8bits(uint W_bits);
(0032) void LCD_Init(void);
(0033) /*********************************************************************/
(0034) const uchar mynew1[]={"7920_3wires_demo"};
(0035) const uchar mynew2[]={"Create by:CANY"};
(0036) const uchar mynew3[]={"E_mail:CANY_999@"};
(0037) const uchar mynew4[]={"163.com"};
(0038) /*********************************************************************/
(0039) void main()
(0040) {
(0041) uchar i = 0;
0069 2744 CLR R20
(0042) Clr_CS();
006A 9AB8 SBI 0x17,0
006B 98C0 CBI 0x18,0
(0043) Clr_SID();
006C 9AB9 SBI 0x17,1
006D 98C1 CBI 0x18,1
(0044) Clr_SCLK();
006E 9ABA SBI 0x17,2
006F 98C2 CBI 0x18,2
(0045) LCD_Init();
0070 D079 RCALL _LCD_Init
0071 C075 RJMP 0x00E7
(0046) while(1)
(0047) {
(0048) nop();
0072 0000 NOP
(0049) nop();
0073 0000 NOP
(0050) W_1byte(0,0,0x80); //显示的地址0x80
0074 E880 LDI R24,0x80
0075 8388 STD Y+0,R24
0076 2722 CLR R18
0077 2700 CLR R16
0078 D0A0 RCALL _W_1byte
(0051) nop();
0079 0000 NOP
(0052) for(i=0;mynew1[i]!='\0';i++)
007A 2744 CLR R20
007B C00C RJMP 0x0088
(0053) {
(0054) W_1byte(0,1,mynew1[i]);
007C E584 LDI R24,0x54
007D E090 LDI R25,0
007E 2FE4 MOV R30,R20
007F 27FF CLR R31
0080 0FE8 ADD R30,R24
0081 1FF9 ADC R31,R25
0082 91E4 LPM R30,0(Z)
0083 83E8 STD Y+0,R30
0084 E021 LDI R18,1
0085 2700 CLR R16
0086 D092 RCALL _W_1byte
0087 9543 INC R20
0088 E584 LDI R24,0x54
0089 E090 LDI R25,0
008A 2FE4 MOV R30,R20
008B 27FF CLR R31
008C 0FE8 ADD R30,R24
008D 1FF9 ADC R31,R25
008E 91E4 LPM R30,0(Z)
008F 23EE TST R30
0090 F759 BNE 0x007C
(0055) }
(0056) W_1byte(0,0,0x90); //显示的地址0x90
0091 E980 LDI R24,0x90
0092 8388 STD Y+0,R24
0093 2722 CLR R18
0094 2700 CLR R16
0095 D083 RCALL _W_1byte
(0057) for(i=0;mynew2[i]!='\0';i++)
0096 2744 CLR R20
0097 C00C RJMP 0x00A4
(0058) {
(0059) W_1byte(0,1,mynew2[i]);
0098 E685 LDI R24,0x65
0099 E090 LDI R25,0
009A 2FE4 MOV R30,R20
009B 27FF CLR R31
009C 0FE8 ADD R30,R24
009D 1FF9 ADC R31,R25
009E 91E4 LPM R30,0(Z)
009F 83E8 STD Y+0,R30
00A0 E021 LDI R18,1
00A1 2700 CLR R16
00A2 D076 RCALL _W_1byte
00A3 9543 INC R20
00A4 E685 LDI R24,0x65
00A5 E090 LDI R25,0
00A6 2FE4 MOV R30,R20
00A7 27FF CLR R31
00A8 0FE8 ADD R30,R24
00A9 1FF9 ADC R31,R25
00AA 91E4 LPM R30,0(Z)
00AB 23EE TST R30
00AC F759 BNE 0x0098
(0060) }
(0061) W_1byte(0,0,0x88); //显示的地址0x88
00AD E888 LDI R24,0x88
00AE 8388 STD Y+0,R24
00AF 2722 CLR R18
00B0 2700 CLR R16
00B1 D067 RCALL _W_1byte
(0062) for(i=0;mynew3[i]!='\0';i++)
00B2 2744 CLR R20
00B3 C00C RJMP 0x00C0
(0063) {
(0064) W_1byte(0,1,mynew3[i]);
00B4 E784 LDI R24,0x74
00B5 E090 LDI R25,0
00B6 2FE4 MOV R30,R20
00B7 27FF CLR R31
00B8 0FE8 ADD R30,R24
00B9 1FF9 ADC R31,R25
00BA 91E4 LPM R30,0(Z)
00BB 83E8 STD Y+0,R30
00BC E021 LDI R18,1
00BD 2700 CLR R16
00BE D05A RCALL _W_1byte
00BF 9543 INC R20
00C0 E784 LDI R24,0x74
00C1 E090 LDI R25,0
00C2 2FE4 MOV R30,R20
00C3 27FF CLR R31
00C4 0FE8 ADD R30,R24
00C5 1FF9 ADC R31,R25
00C6 91E4 LPM R30,0(Z)
00C7 23EE TST R30
00C8 F759 BNE 0x00B4
(0065) }
(0066) W_1byte(0,0,0x98); //显示的地址0x98
00C9 E988 LDI R24,0x98
00CA 8388 STD Y+0,R24
00CB 2722 CLR R18
00CC 2700 CLR R16
00CD D04B RCALL _W_1byte
(0067) for(i=0;mynew4[i]!='\0';i++)
00CE 2744 CLR R20
00CF C00C RJMP 0x00DC
(0068) {
(0069) W_1byte(0,1,mynew4[i]);
00D0 E885 LDI R24,0x85
00D1 E090 LDI R25,0
00D2 2FE4 MOV R30,R20
00D3 27FF CLR R31
00D4 0FE8 ADD R30,R24
00D5 1FF9 ADC R31,R25
00D6 91E4 LPM R30,0(Z)
00D7 83E8 STD Y+0,R30
00D8 E021 LDI R18,1
00D9 2700 CLR R16
00DA D03E RCALL _W_1byte
00DB 9543 INC R20
00DC E885 LDI R24,0x85
00DD E090 LDI R25,0
00DE 2FE4 MOV R30,R20
00DF 27FF CLR R31
00E0 0FE8 ADD R30,R24
00E1 1FF9 ADC R31,R25
00E2 91E4 LPM R30,0(Z)
00E3 23EE TST R30
00E4 F759 BNE 0x00D0
(0070) }
(0071) nop();
00E5 0000 NOP
(0072) for(;;)
00E6 CFFF RJMP 0x00E6
00E7 CF8A RJMP 0x0072
00E8 9621 ADIW R28,1
00E9 9508 RET
_LCD_Init:
cmd --> R20
00EA 940E019F CALL push_gset1
00EC 9721 SBIW R28,1
(0073) {
(0074) continue;
(0075) }
(0076) }
(0077) }
(0078) /******************************************************************/
(0079) void LCD_Init(void)
(0080) {
(0081) uchar cmd;
(0082) cmd=0x30; //功能设置 8位数据,基本指令
00ED E340 LDI R20,0x30
(0083) W_1byte(0,0,cmd);
00EE 8348 STD Y+0,R20
00EF 2722 CLR R18
00F0 2700 CLR R16
00F1 D027 RCALL _W_1byte
(0084) Delay(2);
00F2 E002 LDI R16,2
00F3 E010 LDI R17,0
00F4 D089 RCALL _Delay
(0085) cmd=0x0C; //显示状态 ON,游标OFF,反白OFF
00F5 E04C LDI R20,0xC
(0086) W_1byte(0,0,cmd); //写指令
00F6 8348 STD Y+0,R20
00F7 2722 CLR R18
00F8 2700 CLR R16
00F9 D01F RCALL _W_1byte
(0087) Delay(2);
00FA E002 LDI R16,2
00FB E010 LDI R17,0
00FC D081 RCALL _Delay
(0088) cmd=0x01; //清除显示
00FD E041 LDI R20,1
(0089) W_1byte(0,0,cmd); //写指令
00FE 8348 STD Y+0,R20
00FF 2722 CLR R18
0100 2700 CLR R16
0101 D017 RCALL _W_1byte
(0090) Delay(2);
0102 E002 LDI R16,2
0103 E010 LDI R17,0
0104 D079 RCALL _Delay
(0091) cmd=0x02; //地址归位
0105 E042 LDI R20,2
(0092) W_1byte(0,0,cmd); //写指令
0106 8348 STD Y+0,R20
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -