📄 st7920.lst
字号:
__text_start:
__start:
0068 EFCF LDI R28,0xFF
0069 E1D0 LDI R29,0x10
006A BFCD OUT 0x3D,R28
006B BFDE OUT 0x3E,R29
006C 51C0 SUBI R28,0x10
006D 40D0 SBCI R29,0
006E EA0A LDI R16,0xAA
006F 8308 STD Y+0,R16
0070 2400 CLR R0
0071 E0E0 LDI R30,0
0072 E0F1 LDI R31,1
0073 E011 LDI R17,1
0074 30E0 CPI R30,0
0075 07F1 CPC R31,R17
0076 F011 BEQ 0x0079
0077 9201 ST R0,Z+
0078 CFFB RJMP 0x0074
0079 8300 STD Z+0,R16
007A EDE0 LDI R30,0xD0
007B E0F0 LDI R31,0
007C E0A0 LDI R26,0
007D E0B1 LDI R27,1
007E E010 LDI R17,0
007F 3DE0 CPI R30,0xD0
0080 07F1 CPC R31,R17
0081 F021 BEQ 0x0086
0082 95C8 LPM
0083 9631 ADIW R30,1
0084 920D ST R0,X+
0085 CFF9 RJMP 0x007F
0086 940E0089 CALL _main
_exit:
0088 CFFF RJMP _exit
_main:
i --> R20
disp4 --> Y+51
disp3 --> Y+34
disp2 --> Y+17
disp1 --> Y+0
0089 97EF SBIW R28,0x3F
008A 9725 SBIW R28,5
FILE: D:\avrvi\AVRVi_m128_Starter_Kit\ST7920\source\main.c
(0001) //ICC-AVR application builder : 2008-3-13 20:12:51
(0002) // Target : M128
(0003) // Crystal: 7.3728Mhz
(0004)
(0005) #include "config.h"
(0006)
(0007) void main(void)
(0008) {
(0009) unsigned char disp1[]="液晶测试第一行++";
008B E88C LDI R24,0x8C
008C E090 LDI R25,0
008D 01FE MOVW R30,R28
008E E101 LDI R16,0x11
008F E010 LDI R17,0
0090 93FA ST R31,-Y
0091 93EA ST R30,-Y
0092 939A ST R25,-Y
0093 938A ST R24,-Y
0094 940E02E8 CALL asgncblk
(0010) unsigned char disp2[]="液晶测试第二行++";
0096 E98D LDI R24,0x9D
0097 E090 LDI R25,0
0098 01FE MOVW R30,R28
0099 9671 ADIW R30,0x11
009A E101 LDI R16,0x11
009B E010 LDI R17,0
009C 93FA ST R31,-Y
009D 93EA ST R30,-Y
009E 939A ST R25,-Y
009F 938A ST R24,-Y
00A0 940E02E8 CALL asgncblk
(0011) unsigned char disp3[]="液晶测试第三行++";
00A2 EA8E LDI R24,0xAE
00A3 E090 LDI R25,0
00A4 01FE MOVW R30,R28
00A5 96B2 ADIW R30,0x22
00A6 E101 LDI R16,0x11
00A7 E010 LDI R17,0
00A8 93FA ST R31,-Y
00A9 93EA ST R30,-Y
00AA 939A ST R25,-Y
00AB 938A ST R24,-Y
00AC 940E02E8 CALL asgncblk
(0012) unsigned char disp4[]="液晶测试第四行++";
00AE EB8F LDI R24,0xBF
00AF E090 LDI R25,0
00B0 01FE MOVW R30,R28
00B1 96F3 ADIW R30,0x33
00B2 E101 LDI R16,0x11
00B3 E010 LDI R17,0
00B4 93FA ST R31,-Y
00B5 93EA ST R30,-Y
00B6 939A ST R25,-Y
00B7 938A ST R24,-Y
00B8 940E02E8 CALL asgncblk
(0013) unsigned char i=0;
00BA 2744 CLR R20
(0014)
(0015) PORTA = 0xFF;
00BB EF8F LDI R24,0xFF
00BC BB8B OUT 0x1B,R24
(0016) DDRA = 0x00;
00BD 2422 CLR R2
00BE BA2A OUT 0x1A,R2
(0017) PORTC = 0x00;
00BF BA25 OUT 0x15,R2
(0018) DDRC = 0xFF;
00C0 BB84 OUT 0x14,R24
(0019) //PORTC |= (1<<6)|(1<<5)|(1<<0);
(0020) PORTC |= (1<<5)|(1<<0);
00C1 B385 IN R24,0x15
00C2 6281 ORI R24,0x21
00C3 BB85 OUT 0x15,R24
(0021)
(0022) initial_lcd();
00C4 940E015D CALL _initial_lcd
(0023) Lcd_clrbmp();
00C6 940E01D9 CALL _Lcd_clrbmp
(0024) Lcd_clrbmp();
00C8 940E01D9 CALL _Lcd_clrbmp
(0025)
(0026) Lcd_linedisp(disp1,1);
00CA E021 LDI R18,1
00CB 018E MOVW R16,R28
00CC 940E0252 CALL _Lcd_linedisp
(0027) Lcd_linedisp(disp2,2);
00CE E022 LDI R18,2
00CF 018E MOVW R16,R28
00D0 5E0F SUBI R16,0xEF
00D1 4F1F SBCI R17,0xFF
00D2 940E0252 CALL _Lcd_linedisp
(0028) Lcd_linedisp(disp3,3);
00D4 E023 LDI R18,3
00D5 018E MOVW R16,R28
00D6 5D0E SUBI R16,0xDE
00D7 4F1F SBCI R17,0xFF
00D8 940E0252 CALL _Lcd_linedisp
(0029) Lcd_linedisp(disp4,4);
00DA E024 LDI R18,4
00DB 018E MOVW R16,R28
00DC 5C0D SUBI R16,0xCD
00DD 4F1F SBCI R17,0xFF
00DE 940E0252 CALL _Lcd_linedisp
(0030) while(1)
00E0 CFFF RJMP 0x00E0
00E1 96EF ADIW R28,0x3F
00E2 9625 ADIW R28,5
00E3 9508 RET
FILE: D:\avrvi\AVRVi_m128_Starter_Kit\ST7920\source\lib\delay.c
(0001) /************************************************
(0002) 文件:delay.c
(0003) 用途:延时函数
(0004) 注意:系统时钟8M
(0005) 创建:2008.1.25
(0006) 修改:2008.1.25
(0007) Copy Right (c) www.avrvi.com AVR与虚拟仪器
(0008) ************************************************/
(0009)
(0010) void delay_1us(void) //1us延时函数
(0011) {
(0012) asm("nop");
_delay_1us:
00E4 0000 NOP
00E5 9508 RET
_delay_nus:
i --> R20
n --> R22
00E6 940E02CF CALL push_gset2
00E8 01B8 MOVW R22,R16
(0013) }
(0014)
(0015) void delay_nus(unsigned int n) //N us延时函数
(0016) {
(0017) unsigned int i=0;
00E9 2744 CLR R20
00EA 2755 CLR R21
(0018) for (i=0;i<n;i++)
00EB C003 RJMP 0x00EF
(0019) delay_1us();
00EC DFF7 RCALL _delay_1us
00ED 5F4F SUBI R20,0xFF
00EE 4F5F SBCI R21,0xFF
00EF 1746 CP R20,R22
00F0 0757 CPC R21,R23
00F1 F3D0 BCS 0x00EC
00F2 940E02C3 CALL pop_gset2
00F4 9508 RET
(0020) }
(0021)
(0022) void delay_1ms(void) //1ms延时函数
(0023) {
(0024) unsigned int i;
(0025) for (i=0;i<1140;i++);
_delay_1ms:
i --> R16
00F5 2700 CLR R16
00F6 2711 CLR R17
00F7 C002 RJMP 0x00FA
00F8 5F0F SUBI R16,0xFF
00F9 4F1F SBCI R17,0xFF
00FA 3704 CPI R16,0x74
00FB E0E4 LDI R30,4
00FC 071E CPC R17,R30
00FD F3D0 BCS 0x00F8
00FE 9508 RET
_delay_nms:
i --> R20
n --> R22
00FF 940E02CF CALL push_gset2
0101 01B8 MOVW R22,R16
(0026) }
(0027)
(0028) void delay_nms(unsigned int n) //N ms延时函数
(0029) {
(0030) unsigned int i=0;
0102 2744 CLR R20
0103 2755 CLR R21
(0031) for (i=0;i<n;i++)
0104 C003 RJMP 0x0108
(0032) delay_1ms();
0105 DFEF RCALL _delay_1ms
0106 5F4F SUBI R20,0xFF
0107 4F5F SBCI R21,0xFF
0108 1746 CP R20,R22
0109 0757 CPC R21,R23
010A F3D0 BCS 0x0105
010B 940E02C3 CALL pop_gset2
010D 9508 RET
FILE: D:\avrvi\AVRVi_m128_Starter_Kit\ST7920\source\lib\serial_lcd.c
(0001) /************************************************
(0002) 文件:serial_lcd.c
(0003) 用途:ST7920驱动程序
(0004) 注意:
(0005) 创建:2008.1.26
(0006) 修改:2008.1.26
(0007) Copy Right (c) www.avrvi.com AVR与虚拟仪器
(0008) ************************************************/
(0009) #include "..\config.h"
(0010)
(0011) /******************************************************************
(0012) ** 函数名称: void delay_lcd(void)
(0013) ** 功能描述: lcd初始化后的延时
(0014) ** 输 入: 无
(0015) ** 全局变量: 无
(0016) ** 调用模块: 无
(0017) ** 说明:
(0018) ** 注意:
(0019) *******************************************************************/
(0020) void delay_lcd(void)
(0021) {
(0022) unsigned char i=200;
_delay_lcd:
j --> R16
i --> R18
010E EC28 LDI R18,0xC8
(0023) unsigned char j=0;
010F 2700 CLR R16
(0024) for(j=0;j<6;j++)
0110 C006 RJMP 0x0117
(0025) {
(0026) while(i--);
0111 2E22 MOV R2,R18
0112 2433 CLR R3
0113 5021 SUBI R18,1
0114 2022 TST R2
0115 F7D9 BNE 0x0111
0116 9503 INC R16
0117 3006 CPI R16,6
0118 F3C0 BCS 0x0111
0119 9508 RET
_wr_lcd:
j --> R20
k --> R22
i --> R10
flag --> R18
data --> R16
011A 940E02CD CALL push_gset3
(0027) }
(0028) }
(0029)
(0030)
(0031) /******************************************************************
(0032) ** 函数名称: void wr_lcd(unsigned char data,unsigned char flag)
(0033) ** 功能描述: 向lcd写入1B的数据或者命令
(0034) ** 输 入: unsigned char data,unsigned char flag data为要写入的数据或者命令,flag=1为命令传送,flag=0为数据传送
(0035) ** 全局变量: 无
(0036) ** 调用模块: 无
(0037) ** 说明:首先要传送5个bit的1,起始位,flag=1为命令传送,5个bit的1起始位后面接着为000
(0038) flag=0为数据传送,5个bit的1起始位后面接着为010
(0039) ** 注意:
(0040) *******************************************************************/
(0041) void wr_lcd(unsigned char data,unsigned char flag)
(0042) {
(0043) unsigned char i,j,k;
(0044)
(0045) CLR_LCD_SCLK; //clock清零
011C 98AA CBI 0x15,2
(0046) SET_LCD_STD; //data置1
011D 9AA9 SBI 0x15,1
(0047)
(0048) for(i=0;i<5;i++) //首先要传送5个bit的1,起始位
011E 24AA CLR R10
011F C003 RJMP 0x0123
(0049) {
(0050) SET_LCD_SCLK;
0120 9AAA SBI 0x15,2
(0051) CLR_LCD_SCLK;
0121 98AA CBI 0x15,2
0122 94A3 INC R10
0123 2D8A MOV R24,R10
0124 3085 CPI R24,5
0125 F3D0 BCS 0x0120
(0052) }
(0053)
(0054) if(flag) //flag=1为命令传送,5个bit的1起始位后面接着为000
0126 2322 TST R18
0127 F051 BEQ 0x0132
(0055) {
(0056) CLR_LCD_STD; //清零数据线,传送3个bit的0
0128 98A9 CBI 0x15,1
(0057) for(i=0;i<3;i++)
0129 24AA CLR R10
012A C003 RJMP 0x012E
(0058) {
(0059) SET_LCD_SCLK;
012B 9AAA SBI 0x15,2
(0060) CLR_LCD_SCLK;
012C 98AA CBI 0x15,2
012D 94A3 INC R10
012E 2D8A MOV R24,R10
012F 3083 CPI R24,3
0130 F3D0 BCS 0x012B
(0061) }
(0062) }
0131 C009 RJMP 0x013B
(0063)
(0064) else //flag=0为数据传送,5个bit的1起始位后面接着为010
(0065) {
(0066) CLR_LCD_STD; //传送一位0
0132 98A9 CBI 0x15,1
(0067) SET_LCD_SCLK;
0133 9AAA SBI 0x15,2
(0068) CLR_LCD_SCLK;
0134 98AA CBI 0x15,2
(0069)
(0070) SET_LCD_STD; //传送一位1
0135 9AA9 SBI 0x15,1
(0071) SET_LCD_SCLK;
0136 9AAA SBI 0x15,2
(0072) CLR_LCD_SCLK;
0137 98AA CBI 0x15,2
(0073)
(0074) CLR_LCD_STD; //传送一位0
0138 98A9 CBI 0x15,1
(0075) SET_LCD_SCLK;
0139 9AAA SBI 0x15,2
(0076) CLR_LCD_SCLK;
013A 98AA CBI 0x15,2
(0077) }
(0078)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -