?? lcd12864_st7920.lst
字號:
030A 8445 LDD R4,Z+13
030B 8456 LDD R5,Z+14
030C 1542 CP R20,R2
030D 0553 CPC R21,R3
030E 0564 CPC R22,R4
030F 0575 CPC R23,R5
0310 F418 BCC 0x0314
(0169) effectLen=2;
0311 E082 LDI R24,2
0312 2EC8 MOV R12,R24
0313 C002 RJMP 0x0316
(0170) else
(0171) effectLen=1;
0314 24CC CLR R12
0315 94C3 INC R12
(0172) speaData(dat,effectLen);
0316 82C8 STD Y+0,R12
0317 01FE MOVW R30,R28
0318 8503 LDD R16,Z+11
0319 8514 LDD R17,Z+12
031A 8525 LDD R18,Z+13
031B 8536 LDD R19,Z+14
031C DD3D RCALL _speaData
(0173)
(0174) lcd_set_xy(x,y);
031D 2D2E MOV R18,R14
031E 2D0A MOV R16,R10
031F DF10 RCALL _lcd_set_xy
(0175) delay50us(40);
0320 E208 LDI R16,0x28
0321 E010 LDI R17,0
0322 DEBE RCALL _delay50us
(0176) if(length>effectLen)
0323 840F LDD R0,Y+15
0324 14C0 CP R12,R0
0325 F478 BCC 0x0335
(0177) {
(0178) for(i=length-effectLen-1;i>=0;i--)
0326 2D80 MOV R24,R0
0327 198C SUB R24,R12
0328 5081 SUBI R24,1
0329 2EA8 MOV R10,R24
032A C007 RJMP 0x0332
(0179) {
(0180) lcd_wrDat(' '&0xF0,(' '&0x0F)<<4);
032B 2722 CLR R18
032C E200 LDI R16,0x20
032D DEF5 RCALL _lcd_wrDat
(0181) delay50us(40);
032E E208 LDI R16,0x28
032F E010 LDI R17,0
0330 DEB0 RCALL _delay50us
0331 94AA DEC R10
0332 2D8A MOV R24,R10
0333 3080 CPI R24,0
0334 F7B4 BGE 0x032B
(0182) }
(0183) }
(0184) for(i=effectLen-1;i>=0;i--)
0335 2D8C MOV R24,R12
0336 5081 SUBI R24,1
0337 2EA8 MOV R10,R24
0338 C01E RJMP 0x0357
(0185) {
(0186) lcd_wrDat( (dataElem[i]+0x30)&0xF0 ,( (dataElem[i]+0x30)&0x0F )<<4 );
0339 E78D LDI R24,0x7D
033A E090 LDI R25,0
033B 2DEA MOV R30,R10
033C 27FF CLR R31
033D FDE7 SBRC R30,7
033E 95F0 COM R31
033F 0FE8 ADD R30,R24
0340 1FF9 ADC R31,R25
0341 8180 LDD R24,Z+0
0342 2799 CLR R25
0343 96C0 ADIW R24,0x30
0344 2F28 MOV R18,R24
0345 702F ANDI R18,0xF
0346 7030 ANDI R19,0
0347 0F22 LSL R18
0348 1F33 ROL R19
0349 0F22 LSL R18
034A 1F33 ROL R19
034B 0F22 LSL R18
034C 1F33 ROL R19
034D 0F22 LSL R18
034E 1F33 ROL R19
034F 2F08 MOV R16,R24
0350 7F00 ANDI R16,0xF0
0351 7010 ANDI R17,0
0352 DED0 RCALL _lcd_wrDat
(0187) delay50us(40);
0353 E208 LDI R16,0x28
0354 E010 LDI R17,0
0355 DE8B RCALL _delay50us
0356 94AA DEC R10
0357 2D8A MOV R24,R10
0358 3080 CPI R24,0
0359 F6FC BGE 0x0339
035A 9621 ADIW R28,1
035B 940E0483 CALL pop_gset5
035D 9508 RET
_lcd_puts:
str --> R20
y --> R10
x --> R22
035E 940E048A CALL push_gset3
0360 2EA2 MOV R10,R18
0361 2F60 MOV R22,R16
0362 814E LDD R20,Y+6
0363 815F LDD R21,Y+7
(0188) }
(0189) }
(0190)
(0191) void lcd_puts(uint8 x,uint8 y,uint8 *str)
(0192) {
(0193) lcd_set_xy(x,y);
0364 2D2A MOV R18,R10
0365 2F06 MOV R16,R22
0366 DEC9 RCALL _lcd_set_xy
(0194) delay50us(20);
0367 E104 LDI R16,0x14
0368 E010 LDI R17,0
0369 DE77 RCALL _delay50us
036A C00F RJMP 0x037A
(0195) while(*str)
(0196) {
(0197) lcd_wrDat((*(str))&0xF0,((*(str))&0x0F)<<4);
036B 01FA MOVW R30,R20
036C 8020 LDD R2,Z+0
036D 2433 CLR R3
036E 2D22 MOV R18,R2
036F 702F ANDI R18,0xF
0370 702F ANDI R18,0xF
0371 9522 SWAP R18
0372 2D02 MOV R16,R2
0373 7F00 ANDI R16,0xF0
0374 DEAE RCALL _lcd_wrDat
(0198) str++;
0375 5F4F SUBI R20,0xFF
0376 4F5F SBCI R21,0xFF
(0199) delay50us(20);
0377 E104 LDI R16,0x14
0378 E010 LDI R17,0
0379 DE67 RCALL _delay50us
037A 01FA MOVW R30,R20
037B 8020 LDD R2,Z+0
037C 2022 TST R2
037D F769 BNE 0x036B
037E 940E047D CALL pop_gset3
0380 9508 RET
_lcd_puts_:
dlyMs --> R20
str --> R22
y --> R12
x --> R10
0381 940E0488 CALL push_gset4
0383 2EC2 MOV R12,R18
0384 2EA0 MOV R10,R16
0385 8568 LDD R22,Y+8
0386 8579 LDD R23,Y+9
0387 854A LDD R20,Y+10
(0200) }
(0201) }
(0202)
(0203) void lcd_puts_(uint8 x,uint8 y,uint8 *str,uint8 dlyMs)
(0204) {
(0205) lcd_set_xy(x,y);
0388 2D2C MOV R18,R12
0389 2D0A MOV R16,R10
038A DEA5 RCALL _lcd_set_xy
(0206) delay50us(20);
038B E104 LDI R16,0x14
038C E010 LDI R17,0
038D DE53 RCALL _delay50us
038E C00F RJMP 0x039E
(0207) while(*str)
(0208) {
(0209) lcd_wrDat((*(str))&0xF0,((*(str))&0x0F)<<4);
038F 01FB MOVW R30,R22
0390 8020 LDD R2,Z+0
0391 2433 CLR R3
0392 2D22 MOV R18,R2
0393 702F ANDI R18,0xF
0394 702F ANDI R18,0xF
0395 9522 SWAP R18
0396 2D02 MOV R16,R2
0397 7F00 ANDI R16,0xF0
0398 DE8A RCALL _lcd_wrDat
(0210) str++;
0399 5F6F SUBI R22,0xFF
039A 4F7F SBCI R23,0xFF
(0211) delay50ms(dlyMs);
039B 2F04 MOV R16,R20
039C 2711 CLR R17
039D DE55 RCALL _delay50ms
039E 01FB MOVW R30,R22
039F 8020 LDD R2,Z+0
03A0 2022 TST R2
03A1 F769 BNE 0x038F
03A2 940E0480 CALL pop_gset4
03A4 9508 RET
(0212) }
(0213) }
(0214)
(0215) void lcd_clr()
(0216) {
(0217) lcd_wrCmd(0x00,0x10); //顯示右移
_lcd_clr:
03A5 E120 LDI R18,0x10
03A6 2700 CLR R16
03A7 DE6E RCALL _lcd_wrCmd
(0218) delay50us(200);
03A8 EC08 LDI R16,0xC8
03A9 E010 LDI R17,0
03AA DE36 RCALL _delay50us
03AB 9508 RET
(0219) }
(0220)
(0221) void lcd_init(void)
(0222) {
(0223) SPI_init();
_lcd_init:
03AC DE5C RCALL _SPI_init
(0224) //OUT_LCD_CS; //若LCD_CS
(0225) //SET_LCD_CS;
(0226) delay50ms(1);
03AD E001 LDI R16,1
03AE E010 LDI R17,0
03AF DE43 RCALL _delay50ms
(0227) lcd_wrCmd(0x30,0x30); //使用8位控制界面,使用基本指令集
03B0 E320 LDI R18,0x30
03B1 E300 LDI R16,0x30
03B2 DE63 RCALL _lcd_wrCmd
(0228) //lcd_wrCmd(0x00,0xF0); //整體顯示ON
(0229) lcd_wrCmd(0x00,0xC0); //整體顯示ON
03B3 EC20 LDI R18,0xC0
03B4 2700 CLR R16
03B5 DE60 RCALL _lcd_wrCmd
(0230) lcd_wrCmd(0x00,0x10); //清屏
03B6 E120 LDI R18,0x10
03B7 2700 CLR R16
03B8 DE5D RCALL _lcd_wrCmd
(0231) //lcd_wrCmd(0x10,0x00); //光標(biāo)
(0232) lcd_wrCmd(0x00,0x60);
03B9 E620 LDI R18,0x60
03BA 2700 CLR R16
03BB DE5A RCALL _lcd_wrCmd
(0233) //lcd_wrCmd(0x00,0x70); //顯示右移
(0234) delay50ms(1); //不可省去?。。? 03BC E001 LDI R16,1
03BD E010 LDI R17,0
03BE DE34 RCALL _delay50ms
03BF 9508 RET
_main:
03C0 9722 SBIW R28,2
FILE: E:\微雪電子CD1\產(chǎn)品資料\開發(fā)板實(shí)驗(yàn)板\SMK系列\(zhòng)SMK1632\實(shí)驗(yàn)教程\外圍模塊相關(guān)實(shí)驗(yàn)\LCD128~1\LCD12864_ST7920\LCD12864_ST7920.C
(0001) /*********************************************************************
(0002) 微 雪 電 子 WaveShare http://www.waveShare.net
(0003)
(0004) 目 的: 建立操作LCD12864_ST7920液晶的示例程序
(0005)
(0006) 目標(biāo)系統(tǒng): 基于任何AVR單片機(jī)
(0007)
(0008) 應(yīng)用軟件: ICCAVR
(0009)
(0010) 版 本: Version 1.0
(0011)
(0012) 圓版時(shí)間: 2005-06-25
(0013)
(0014) 開發(fā)人員: SEE
(0015)
(0016) 說 明: 若用于商業(yè)用途,請保留此段文字或注明代碼來源
(0017)
(0018) 深 圳 市 微 雪 電 子 有 限 公 司 保 留 所 有 的 版 權(quán)
(0019) *********************************************************************/
(0020)
(0021) /*01010101010101010101010101010101010101010101010101010101010101010101
(0022) ----------------------------------------------------------------------
(0023) 版本更新記錄:
(0024)
(0025) ----------------------------------------------------------------------
(0026) 實(shí)驗(yàn)內(nèi)容:
(0027) 初始化、讀寫Lcd12864_ST7920。
(0028) ----------------------------------------------------------------------
(0029) 硬件連接:
(0030) LCD12864_ST7920 ATmega16
(0031) 1.GND -------- GND
(0032) 2.VCC -------- VCC
(0033) 3.V0 -------- V0
(0034) 4.RS(CS) -------- VCC
(0035) 5.R/W(SID) -------- MOSI/PB5
(0036) 6.E(SCLK) -------- SCK/PB7
(0037) 7.D0 -------- NC
(0038) 8.D1 -------- NC
(0039) 9.D2 -------- NC
(0040) 10.D3 -------- NC
(0041) 11.D4 -------- NC
(0042) 12.D5 -------- NC
(0043) 13.D6 -------- NC
(0044) 14.D7 -------- NC
(0045) 15.PSB -------- GND
(0046) 16.NC -------- NC
(0047) 17.RST -------- NC
(0048) 18.NC -------- NC
(0049) 19.LED+ -------- VCC
(0050) 20.LED- -------- GND
(0051)
(0052) 操作步驟:
(0053) (1)編譯燒寫該程序到ATmega16,斷開電源
(0054) (2)若使用ISP接口燒寫程序,請斷開ISP燒寫器
(0055) (由于本示例程序使用的是ATmega16的SPI接口,剛好是ISP燒寫器的燒寫口)
(0056) (3)將LCD12864_ST7920插入主板的Lcd12864插槽
(0057) (4)使用連接線將LCD12864_ST7920的以下引針接口連接到MCU:
(0058) (由于SMK1632已經(jīng)做好了大部分的硬件連接,您只需連接以下數(shù)據(jù)端口)
(0059) LCD12864_ST7920 ATmega16
(0060) 4.RS(CS) -------- VCC
(0061) 5.R/W(SID) -------- MOSI/PB5
(0062) 6.E(SCLK) -------- SCK/PB7
(0063) 15.PSB -------- GND
(0064) (5)上電,如果操作正確,這時(shí)您可以看到顯示的內(nèi)容了
(0065)
(0066) ----------------------------------------------------------------------
(0067) 注意事項(xiàng):
(0068) (1)若有加載庫函數(shù),請將光盤根目錄下的“庫函數(shù)”下的“ICC_H”文件夾拷到D盤
(0069) (2)請?jiān)敿?xì)閱讀:光盤根目錄下的“產(chǎn)品資料\開發(fā)板實(shí)驗(yàn)板\SMK系列\(zhòng)SMK1632\說明資料”
(0070) ----------------------------------------------------------------------
(0071) 10101010101010101010101010101010101010101010101010101010101010101010*/
(0072)
(0073) #include <iom16v.h>
(0074)
(0075) #include "D:\ICC_H\LCD12864_ST7920.H"
(0076)
(0077) /*--------------------------------------------------------------------
(0078) 函數(shù)名稱:
(0079) 函數(shù)功能:
(0080) 注意事項(xiàng):
(0081) 提示說明:
(0082) 輸 入:
(0083) 返 回:
(0084) --------------------------------------------------------------------*/
(0085) void main()
(0086) {
(0087) SEI();
03C1 9478 BSET 7
(0088) lcd_init();
03C2 DFE9 RCALL _lcd_init
(0089) lcd_puts(1,1," WaveShare.net");
03C3 E68D LDI R24,0x6D
03C4 E090 LDI R25,0
03C5 8399 STD Y+1,R25
03C6 8388 STD Y+0,R24
03C7 E021 LDI R18,1
03C8 E001 LDI R16,1
03C9 DF94 RCALL _lcd_puts
(0090) lcd_puts(3,1," 微雪電子");
03CA E680 LDI R24,0x60
03CB E090 LDI R25,0
03CC 8399 STD Y+1,R25
03CD 8388 STD Y+0,R24
03CE E021 LDI R18,1
03CF E003 LDI R16,3
03D0 DF8D RCALL _lcd_puts
(0091) while(1);
FILE: <library>
03D1 CFFF RJMP 0x03D1
03D2 9622 ADIW R28,2
03D3 9508 RET
push_arg4:
03D4 933A ST R19,-Y
03D5 932A ST R18,-Y
push_arg2:
03D6 931A ST R17,-Y
03D7 930A ST R16,-Y
03D8 9508 RET
div32u:
03D9 94E8 BCLR 6
03DA C001 RJMP 0x03DC
mod32u:
03DB 9468 BSET 6
03DC D02F RCALL long_div_prolog
03DD 24CC CLR R12
03DE C008 RJMP 0x03E7
div32s:
03DF 94E8 BCLR 6
03E0 C001 RJMP 0x03E2
mod32s:
03E1 9468 BSET 6
03E2 D029 RCALL
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -