📄 st7920.lst
字号:
(0079) k=0x80; //后面传送信息的时候用来取得特定的位
013B E860 LDI R22,0x80
(0080)
(0081) for(j=0;j<2;j++)//每一个八位的指令将被分为两个字节接收到:
013C 2744 CLR R20
013D C019 RJMP 0x0157
(0082) //较高4位的指令资料将会被放在第一个字节的MSB部分
(0083) //而较低4位(DB3~DB0)的指令资料则会被放在第二个字节的MSB部分
(0084) //至于相关的另四位则都为0。
(0085) {
(0086) for(i=0;i<4;i++)
013E 24AA CLR R10
013F C00A RJMP 0x014A
(0087) {
(0088) if(data&k) //如果相应的位为高
0140 2E20 MOV R2,R16
0141 2226 AND R2,R22
0142 F011 BEQ 0x0145
(0089) {
(0090) SET_LCD_STD; //传送一位1
0143 9AA9 SBI 0x15,1
(0091) }
0144 C001 RJMP 0x0146
(0092) else //如果相应的位为低
(0093) {
(0094) CLR_LCD_STD; //传送一位0
0145 98A9 CBI 0x15,1
(0095) }
(0096) k>>=1;
0146 9566 LSR R22
(0097) SET_LCD_SCLK;
0147 9AAA SBI 0x15,2
(0098) CLR_LCD_SCLK;
0148 98AA CBI 0x15,2
0149 94A3 INC R10
014A 2D8A MOV R24,R10
014B 3084 CPI R24,4
014C F398 BCS 0x0140
(0099) }
(0100)
(0101) CLR_LCD_STD; //传送4位0
014D 98A9 CBI 0x15,1
(0102)
(0103) for(i=0;i<4;i++)
014E 24AA CLR R10
014F C003 RJMP 0x0153
(0104) {
(0105) SET_LCD_SCLK;
0150 9AAA SBI 0x15,2
(0106) CLR_LCD_SCLK;
0151 98AA CBI 0x15,2
0152 94A3 INC R10
0153 2D8A MOV R24,R10
0154 3084 CPI R24,4
0155 F3D0 BCS 0x0150
0156 9543 INC R20
0157 3042 CPI R20,2
0158 F328 BCS 0x013E
(0107) }
(0108) }
(0109) //CLR_LCD_SCLK;
(0110) CLR_LCD_STD;
0159 98A9 CBI 0x15,1
015A 940E02C6 CALL pop_gset3
015C 9508 RET
(0111) }
(0112)
(0113)
(0114) /******************************************************************
(0115) ** 函数名称: void initial_lcd(void)
(0116) ** 功能描述: lcd初始化
(0117) ** 输 入: 无
(0118) ** 全局变量: 无
(0119) ** 调用模块: wr_lcd();
(0120) ** 说明:
(0121) ** 注意:
(0122) *******************************************************************/
(0123) void initial_lcd(void)
(0124) {
(0125) LCD_DDR |= (1<<LCD_STD)|(1<<LCD_SCLK);
_initial_lcd:
015D B384 IN R24,0x14
015E 6086 ORI R24,6
015F BB84 OUT 0x14,R24
(0126) wr_lcd(Lcd_Set_Function_Basic,1); //指令集设定
0160 E021 LDI R18,1
0161 E300 LDI R16,0x30
0162 DFB7 RCALL _wr_lcd
(0127) wr_lcd(Lcd_Set_Entrance_Point+2,1); //光标右移
0163 E021 LDI R18,1
0164 E006 LDI R16,6
0165 DFB4 RCALL _wr_lcd
(0128) wr_lcd(Lcd_Display_Status+4,1); //整屏显示
0166 E021 LDI R18,1
0167 E00C LDI R16,0xC
0168 DFB1 RCALL _wr_lcd
(0129) wr_lcd(Lcd_Clear,1); //clear the screen
0169 E021 LDI R18,1
016A E001 LDI R16,1
016B DFAE RCALL _wr_lcd
(0130)
(0131) delay_lcd();
016C DFA1 RCALL _delay_lcd
016D 9508 RET
_Lcd_drawbmp:
i --> R20
j --> R22
bmp --> R10
016E 940E02CD CALL push_gset3
0170 0158 MOVW R10,R16
(0132) }
(0133)
(0134)
(0135) /*********************************************************************************************************
(0136) ** 函数名称: Lcd_drawbmp(unsigned char col,unsigned char row,unsigned char col1,unsigned char row1,const unsigned char *bmp)
(0137) ** 功能描述: 绘制bmp图片
(0138) ** 输 入: col 起始行 col1 图片行数
(0139) ** row 起始列 row1 图片列数
(0140) ** *bmp:图片字型码指针
(0141) ** 输 出:
(0142) **
(0143) ** 全局变量: 无
(0144) ** 调用模块: wr_lcd();
(0145) ** 说明:
(0146) ** 注意:
(0147) ********************************************************************************************************/
(0148)
(0149) void Lcd_drawbmp(const unsigned char *bmp)
(0150) {
(0151) unsigned char i,j;
(0152) Lcd_clrbmp();
0171 D067 RCALL _Lcd_clrbmp
(0153) wr_lcd(Lcd_Set_Function_Basic+2,1);
0172 E021 LDI R18,1
0173 E302 LDI R16,0x32
0174 DFA5 RCALL _wr_lcd
(0154) wr_lcd(Lcd_Set_Function_Extend,1);
0175 E021 LDI R18,1
0176 E304 LDI R16,0x34
0177 DFA2 RCALL _wr_lcd
(0155) for(i=0;i<32;i++)
0178 2744 CLR R20
0179 C027 RJMP 0x01A1
(0156) {
(0157) for(j=0;j<8;j++)
017A 2766 CLR R22
017B C022 RJMP 0x019E
(0158) {
(0159) wr_lcd(Lcd_Set_Function_Basic+2,1);
017C E021 LDI R18,1
017D E302 LDI R16,0x32
017E DF9B RCALL _wr_lcd
(0160) wr_lcd(Lcd_Set_Function_Extend+2,1);
017F E021 LDI R18,1
0180 E306 LDI R16,0x36
0181 DF98 RCALL _wr_lcd
(0161)
(0162) wr_lcd(0x80+i,1);
0182 E021 LDI R18,1
0183 2F04 MOV R16,R20
0184 5800 SUBI R16,0x80
0185 DF94 RCALL _wr_lcd
(0163) wr_lcd(0x80+j,1);
0186 E021 LDI R18,1
0187 2F06 MOV R16,R22
0188 5800 SUBI R16,0x80
0189 DF90 RCALL _wr_lcd
(0164)
(0165) wr_lcd(Lcd_Set_Function_Basic+2,1);
018A E021 LDI R18,1
018B E302 LDI R16,0x32
018C DF8D RCALL _wr_lcd
(0166) wr_lcd(*bmp++,0);
018D 2722 CLR R18
018E 0115 MOVW R2,R10
018F 01C1 MOVW R24,R2
0190 9601 ADIW R24,1
0191 015C MOVW R10,R24
0192 01F1 MOVW R30,R2
0193 9104 LPM R16,0(Z)
0194 DF85 RCALL _wr_lcd
(0167) wr_lcd(*bmp++,0);
0195 2722 CLR R18
0196 0115 MOVW R2,R10
0197 01C1 MOVW R24,R2
0198 9601 ADIW R24,1
0199 015C MOVW R10,R24
019A 01F1 MOVW R30,R2
019B 9104 LPM R16,0(Z)
019C DF7D RCALL _wr_lcd
019D 9563 INC R22
019E 3068 CPI R22,0x8
019F F2E0 BCS 0x017C
01A0 9543 INC R20
01A1 3240 CPI R20,0x20
01A2 F408 BCC 0x01A4
01A3 CFD6 RJMP 0x017A
(0168) }
(0169) }
(0170) for(i=0;i<32;i++)
01A4 2744 CLR R20
01A5 C027 RJMP 0x01CD
(0171) {
(0172) for(j=8;j<16;j++)
01A6 E068 LDI R22,0x8
01A7 C022 RJMP 0x01CA
(0173) {
(0174) wr_lcd(Lcd_Set_Function_Basic+2,1);
01A8 E021 LDI R18,1
01A9 E302 LDI R16,0x32
01AA DF6F RCALL _wr_lcd
(0175) wr_lcd(Lcd_Set_Function_Extend+2,1);
01AB E021 LDI R18,1
01AC E306 LDI R16,0x36
01AD DF6C RCALL _wr_lcd
(0176)
(0177) wr_lcd(0x80+i,1);
01AE E021 LDI R18,1
01AF 2F04 MOV R16,R20
01B0 5800 SUBI R16,0x80
01B1 DF68 RCALL _wr_lcd
(0178) wr_lcd(0x80+j,1);
01B2 E021 LDI R18,1
01B3 2F06 MOV R16,R22
01B4 5800 SUBI R16,0x80
01B5 DF64 RCALL _wr_lcd
(0179)
(0180) wr_lcd(Lcd_Set_Function_Basic+2,1);
01B6 E021 LDI R18,1
01B7 E302 LDI R16,0x32
01B8 DF61 RCALL _wr_lcd
(0181) wr_lcd(*bmp++,0);
01B9 2722 CLR R18
01BA 0115 MOVW R2,R10
01BB 01C1 MOVW R24,R2
01BC 9601 ADIW R24,1
01BD 015C MOVW R10,R24
01BE 01F1 MOVW R30,R2
01BF 9104 LPM R16,0(Z)
01C0 DF59 RCALL _wr_lcd
(0182) wr_lcd(*bmp++,0);
01C1 2722 CLR R18
01C2 0115 MOVW R2,R10
01C3 01C1 MOVW R24,R2
01C4 9601 ADIW R24,1
01C5 015C MOVW R10,R24
01C6 01F1 MOVW R30,R2
01C7 9104 LPM R16,0(Z)
01C8 DF51 RCALL _wr_lcd
01C9 9563 INC R22
01CA 3160 CPI R22,0x10
01CB F2E0 BCS 0x01A8
01CC 9543 INC R20
01CD 3240 CPI R20,0x20
01CE F408 BCC 0x01D0
01CF CFD6 RJMP 0x01A6
(0183) }
(0184) }
(0185) wr_lcd(0x36,1);
01D0 E021 LDI R18,1
01D1 E306 LDI R16,0x36
01D2 DF47 RCALL _wr_lcd
(0186) wr_lcd(Lcd_Set_Function_Basic,1); //30H--基本指令操作
01D3 E021 LDI R18,1
01D4 E300 LDI R16,0x30
01D5 DF44 RCALL _wr_lcd
01D6 940E02C6 CALL pop_gset3
01D8 9508 RET
_Lcd_clrbmp:
i --> R20
j --> R22
01D9 940E02CF CALL push_gset2
(0187) }
(0188)
(0189)
(0190)
(0191) /*********************************************************************************************************
(0192) ** 函数名称: void Lcd_clrbmp(void)
(0193) ** 功能描述: 清除bmp图片
(0194) ** 输 入:
(0195) ** 输 出:
(0196) ** 全局变量: 无
(0197) ** 调用模块: Lcd_scomm() Lcd_sdata()
(0198) ** 说明:
(0199) ** 注意:
(0200) ********************************************************************************************************/
(0201) void Lcd_clrbmp(void)
(0202) {
(0203) unsigned char i,j;
(0204) // wr_lcd(Lcd_Clear,1);
(0205) wr_lcd(Lcd_Set_Function_Basic+2,1);
01DB E021 LDI R18,1
01DC E302 LDI R16,0x32
01DD DF3C RCALL _wr_lcd
(0206) wr_lcd(Lcd_Set_Function_Extend,1);
01DE E021 LDI R18,1
01DF E304 LDI R16,0x34
01E0 DF39 RCALL _wr_lcd
(0207) for(i=0;i<32;i++)
01E1 2744 CLR R20
01E2 C01D RJMP 0x0200
(0208) {
(0209) for(j=0;j<16;j++)
01E3 2766 CLR R22
01E4 C018 RJMP 0x01FD
(0210) {
(0211) wr_lcd(Lcd_Set_Function_Basic+2,1);
01E5 E021 LDI R18,1
01E6 E302 LDI R16,0x32
01E7 DF32 RCALL _wr_lcd
(0212) wr_lcd(Lcd_Set_Function_Extend+2,1);
01E8 E021 LDI R18,1
01E9 E306 LDI R16,0x36
01EA DF2F RCALL _wr_lcd
(0213)
(0214) wr_lcd(0x80+i,1);
01EB E021 LDI R18,1
01EC 2F04 MOV R16,R20
01ED 5800 SUBI R16,0x80
01EE DF2B RCALL _wr_lcd
(0215) wr_lcd(0x80+j,1);
01EF E021 LDI R18,1
01F0 2F06 MOV R16,R22
01F1 5800 SUBI R16,0x80
01F2 DF27 RCALL _wr_lcd
(0216)
(0217) wr_lcd(Lcd_Set_Function_Basic+2,1);
01F3 E021 LDI R18,1
01F4 E302 LDI R16,0x32
01F5 DF24 RCALL _wr_lcd
(0218) wr_lcd(0x00,0);
01F6 2722 CLR R18
01F7 2700 CLR R16
01F8 DF21 RCALL _wr_lcd
(0219) wr_lcd(0x00,0);
01F9 2722 CLR R18
01FA 2700 CLR R16
01FB DF1E RCALL _wr_lcd
01FC 9563 INC R22
01FD 3160 CPI R22,0x10
01FE F330 BCS 0x01E5
01FF 9543 INC R20
0200 3240 CPI R20,0x20
0201 F308 BCS 0x01E3
(0220) }
(0221) }
(0222) wr_lcd(0x36,1);
0202 E021 LDI R18,1
0203 E306 LDI R16,0x36
0204 DF15 RCALL _wr_lcd
(0223) wr_lcd(Lcd_Set_Function_Basic,1); //30H--基本指令操作
0205 E021 LDI R18,1
0206 E300 LDI R16,0x30
0207 DF12 RCALL _wr_lcd
0208 940E02C3 CALL pop_gset2
020A 9508 RET
_Lcd_lineclr:
i --> R20
row --> R20
020B 940E02D1 CALL push_gset1
020D 2F40 MOV R20,R16
(0224) }
(0225)
(0226)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -