⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 disp.lst

📁 可以测试位图文件
💻 LST
📖 第 1 页 / 共 3 页
字号:
__start:
__text_start:
    052E EFCF      LDI	R28,0xFF
    052F E1D0      LDI	R29,0x10
    0530 BFCD      OUT	0x3D,R28
    0531 BFDE      OUT	0x3E,R29
    0532 51C0      SUBI	R28,0x10
    0533 40D0      SBCI	R29,0
    0534 EA0A      LDI	R16,0xAA
    0535 8308      STD	Y+0,R16
    0536 2400      CLR	R0
    0537 E0E0      LDI	R30,0
    0538 E0F1      LDI	R31,1
    0539 E011      LDI	R17,1
    053A 30E0      CPI	R30,0
    053B 07F1      CPC	R31,R17
    053C F011      BEQ	0x053F
    053D 9201      ST	R0,Z+
    053E CFFB      RJMP	0x053A
    053F 8300      STD	Z+0,R16
    0540 E5EC      LDI	R30,0x5C
    0541 E0FA      LDI	R31,0xA
    0542 E0A0      LDI	R26,0
    0543 E0B1      LDI	R27,1
    0544 E01A      LDI	R17,0xA
    0545 35EC      CPI	R30,0x5C
    0546 07F1      CPC	R31,R17
    0547 F021      BEQ	0x054C
    0548 95C8      LPM
    0549 9631      ADIW	R30,1
    054A 920D      ST	R0,X+
    054B CFF9      RJMP	0x0545
    054C 940E077D  CALL	_main
_exit:
    054E CFFF      RJMP	_exit
FILE: D:\DISP\HD61202.c
(0001) 
(0002) 
(0003) //关于12864的程序(ATMage64/HD61202)
(0004) 
(0005) 
(0006) //主程序:
(0007) 
(0008) /************************************************************
(0009)    LCD采用HD61202,192x64
(0010)    控制单片机ATMage64 8MHz
(0011) ************************************************************/
(0012) 
(0013) #include <iom64v.h>
(0014) #include <macros.h>
(0015) //#include <delay.h>
(0016) #include <stdio.h>
(0017) #include <D:\DISP\Hz.h>
(0018) 
(0019) #define BIT(x)	(1 << (x))
(0020) 
(0021) 
(0022) /*LCD引脚定义 PA0-7对应LCD DB0-DB7*/
(0023) #define CS1 	0
(0024) #define CS2 	1
(0025) #define CS3 	2
(0026) #define E   	3
(0027) #define RW  	4
(0028) #define RS  	5
(0029) #define LCD_LIGHT 6
(0030) 
(0031) //===================
(0032) void LCD_NOP(void)
(0033) {
(0034) unsigned char i;
(0035) for(i=0;i<50;i++);
_LCD_NOP:
  i                    --> R16
    054F 2700      CLR	R16
    0550 C001      RJMP	0x0552
    0551 9503      INC	R16
    0552 3302      CPI	R16,0x32
    0553 F3E8      BCS	0x0551
    0554 9508      RET
_Delay:
  j                    --> R20
  i                    --> R22
  x                    --> R16
    0555 940E07CC  CALL	push_gset2
(0036) }
(0037) 
(0038) //===================
(0039) void Delay(int x)
(0040) {
(0041) int i,j;
(0042) for(j=0;j<x;j++)
    0557 2744      CLR	R20
    0558 2755      CLR	R21
    0559 C00A      RJMP	0x0564
(0043) {
(0044) 	for(i=0;i<250;i++);
    055A 2766      CLR	R22
    055B 2777      CLR	R23
    055C 5F6F      SUBI	R22,0xFF
    055D 4F7F      SBCI	R23,0xFF
    055E 3F6A      CPI	R22,0xFA
    055F E0E0      LDI	R30,0
    0560 077E      CPC	R23,R30
    0561 F3D4      BLT	0x055C
    0562 5F4F      SUBI	R20,0xFF
    0563 4F5F      SBCI	R21,0xFF
    0564 1740      CP	R20,R16
    0565 0751      CPC	R21,R17
    0566 F39C      BLT	0x055A
    0567 940E07C0  CALL	pop_gset2
    0569 9508      RET
_LCD_Write_ComL:
  x                    --> R20
    056A 940E07CE  CALL	push_gset1
    056C 2F40      MOV	R20,R16
(0045) }
(0046) }
(0047) 
(0048) //===================
(0049) //LCD左半屏写命令字
(0050) //===================
(0051) void LCD_Write_ComL(unsigned char x)
(0052) {
(0053)   PORTC&=~BIT(CS1);
    056D 98A8      CBI	0x15,0
(0054)   PORTC|=BIT(CS2);
    056E 9AA9      SBI	0x15,1
(0055)   LCD_NOP();
    056F DFDF      RCALL	_LCD_NOP
(0056)   PORTC&=~BIT(RS);
    0570 98AD      CBI	0x15,5
(0057)   PORTC|=BIT(E);
    0571 9AAB      SBI	0x15,3
(0058)   LCD_NOP();
    0572 DFDC      RCALL	_LCD_NOP
(0059)   PORTC&=~BIT(RW);
    0573 98AC      CBI	0x15,4
(0060)   PORTA=x;
    0574 BB4B      OUT	0x1B,R20
(0061)   PORTC|=BIT(E);
    0575 9AAB      SBI	0x15,3
(0062)   PORTC&=~BIT(E);
    0576 98AB      CBI	0x15,3
(0063)   PORTC|=BIT(CS1);
    0577 9AA8      SBI	0x15,0
(0064)   PORTC|=BIT(CS2);
    0578 9AA9      SBI	0x15,1
    0579 940E07D1  CALL	pop_gset1
    057B 9508      RET
_LCD_Write_DatL:
  x                    --> R20
    057C 940E07CE  CALL	push_gset1
    057E 2F40      MOV	R20,R16
(0065) }
(0066) 
(0067) //===================
(0068) //LCD左半屏写数据
(0069) //===================
(0070) void LCD_Write_DatL(unsigned char x)
(0071) {
(0072)   PORTC&=~BIT(CS1);
    057F 98A8      CBI	0x15,0
(0073)   PORTC|=BIT(CS2);
    0580 9AA9      SBI	0x15,1
(0074)   LCD_NOP();
    0581 DFCD      RCALL	_LCD_NOP
(0075)   PORTC&=~BIT(RS);
    0582 98AD      CBI	0x15,5
(0076)   PORTC|=BIT(E);
    0583 9AAB      SBI	0x15,3
(0077)   LCD_NOP();
    0584 DFCA      RCALL	_LCD_NOP
(0078)   PORTC|=BIT(RS);
    0585 9AAD      SBI	0x15,5
(0079)   PORTC&=~BIT(RW);
    0586 98AC      CBI	0x15,4
(0080)   PORTA=x;
    0587 BB4B      OUT	0x1B,R20
(0081)   PORTC|=BIT(E);
    0588 9AAB      SBI	0x15,3
(0082)   PORTC&=~BIT(E);
    0589 98AB      CBI	0x15,3
(0083)   PORTC|=BIT(CS1);
    058A 9AA8      SBI	0x15,0
(0084)   PORTC|=BIT(CS2);
    058B 9AA9      SBI	0x15,1
    058C 940E07D1  CALL	pop_gset1
    058E 9508      RET
_LCD_Write_ComR:
  x                    --> R20
    058F 940E07CE  CALL	push_gset1
    0591 2F40      MOV	R20,R16
(0085) }
(0086) 
(0087) //===================
(0088) //LCD右半屏写命令字
(0089) //===================
(0090) void LCD_Write_ComR(unsigned char x)
(0091) {
(0092)   PORTC|=BIT(CS1);
    0592 9AA8      SBI	0x15,0
(0093)   PORTC&=~BIT(CS2);
    0593 98A9      CBI	0x15,1
(0094)   LCD_NOP();
    0594 DFBA      RCALL	_LCD_NOP
(0095)   PORTC&=~BIT(RS);
    0595 98AD      CBI	0x15,5
(0096)   PORTC|=BIT(E);
    0596 9AAB      SBI	0x15,3
(0097)   LCD_NOP();
    0597 DFB7      RCALL	_LCD_NOP
(0098)   PORTC&=~BIT(RW);
    0598 98AC      CBI	0x15,4
(0099)   PORTA=x;
    0599 BB4B      OUT	0x1B,R20
(0100)   PORTC|=BIT(E);
    059A 9AAB      SBI	0x15,3
(0101)   PORTC&=~BIT(E);
    059B 98AB      CBI	0x15,3
(0102)   PORTC|=BIT(CS1);
    059C 9AA8      SBI	0x15,0
(0103)   PORTC|=BIT(CS2);
    059D 9AA9      SBI	0x15,1
    059E 940E07D1  CALL	pop_gset1
    05A0 9508      RET
_LCD_Write_DatR:
  x                    --> R20
    05A1 940E07CE  CALL	push_gset1
    05A3 2F40      MOV	R20,R16
(0104) }
(0105) 
(0106) //===================
(0107) //LCD右半屏写数据
(0108) //===================
(0109) void LCD_Write_DatR(unsigned char x)
(0110) {
(0111)   PORTC|=BIT(CS1);
    05A4 9AA8      SBI	0x15,0
(0112)   PORTC&=~BIT(CS2);
    05A5 98A9      CBI	0x15,1
(0113)   LCD_NOP();
    05A6 DFA8      RCALL	_LCD_NOP
(0114)   PORTC&=~BIT(RS);
    05A7 98AD      CBI	0x15,5
(0115)   PORTC|=BIT(E);
    05A8 9AAB      SBI	0x15,3
(0116)   LCD_NOP();
    05A9 DFA5      RCALL	_LCD_NOP
(0117)   PORTC|=BIT(RS);
    05AA 9AAD      SBI	0x15,5
(0118)   PORTC&=~BIT(RW);
    05AB 98AC      CBI	0x15,4
(0119)   PORTA=x;
    05AC BB4B      OUT	0x1B,R20
(0120)   PORTC|=BIT(E);
    05AD 9AAB      SBI	0x15,3
(0121)   PORTC&=~BIT(E);
    05AE 98AB      CBI	0x15,3
(0122)   PORTC|=BIT(CS1);
    05AF 9AA8      SBI	0x15,0
(0123)   PORTC|=BIT(CS2);
    05B0 9AA9      SBI	0x15,1
    05B1 940E07D1  CALL	pop_gset1
    05B3 9508      RET
(0124) }
(0125) 
(0126) //LCD初始化
(0127) void LCD_Init(void)
(0128) {
(0129)   LCD_Write_ComL(0x3e); LCD_Write_ComR(0x3e);  //关闭显示器
_LCD_Init:
    05B4 E30E      LDI	R16,0x3E
    05B5 DFB4      RCALL	_LCD_Write_ComL
    05B6 E30E      LDI	R16,0x3E
    05B7 DFD7      RCALL	_LCD_Write_ComR
(0130)   LCD_Write_ComL(0x3f); LCD_Write_ComR(0x3f);  //打开显示器
    05B8 E30F      LDI	R16,0x3F
    05B9 DFB0      RCALL	_LCD_Write_ComL
    05BA E30F      LDI	R16,0x3F
    05BB DFD3      RCALL	_LCD_Write_ComR
(0131)   LCD_Write_ComL(0xc0); LCD_Write_ComR(0xc0);  //设置左右半屏起始行,从0行开始
    05BC EC00      LDI	R16,0xC0
    05BD DFAC      RCALL	_LCD_Write_ComL
    05BE EC00      LDI	R16,0xC0
    05BF DFCF      RCALL	_LCD_Write_ComR
    05C0 9508      RET
_LCD_Clr:
  j                    --> R20
  i                    --> R22
    05C1 940E07CC  CALL	push_gset2
(0132) }
(0133) 
(0134) 
(0135) //LCD清屏
(0136) void LCD_Clr(void)
(0137) {
(0138) unsigned char i,j;
(0139) 
(0140) for(j=0;j<8;j++)
    05C3 2744      CLR	R20
    05C4 C014      RJMP	0x05D9
(0141) {
(0142) 	LCD_Write_ComL(0xb8|j);  //左半屏页设置指令
    05C5 2F04      MOV	R16,R20
    05C6 6B08      ORI	R16,0xB8
    05C7 DFA2      RCALL	_LCD_Write_ComL
(0143)   	LCD_Write_ComL(0x40);    //左半屏列地址设置指令
    05C8 E400      LDI	R16,0x40
    05C9 DFA0      RCALL	_LCD_Write_ComL
(0144)   	LCD_Write_ComR(0xb8|j);  //右半屏页设置指令
    05CA 2F04      MOV	R16,R20
    05CB 6B08      ORI	R16,0xB8
    05CC DFC2      RCALL	_LCD_Write_ComR
(0145)   	LCD_Write_ComR(0x40);    //右半屏列地址设置指令
    05CD E400      LDI	R16,0x40
    05CE DFC0      RCALL	_LCD_Write_ComR
(0146)   	for(i=0; i<64; i++)
    05CF 2766      CLR	R22
    05D0 C005      RJMP	0x05D6
(0147)   	{
(0148)     		LCD_Write_DatL(0x00);  //左半屏写0;
    05D1 2700      CLR	R16
    05D2 DFA9      RCALL	_LCD_Write_DatL
(0149)     		LCD_Write_DatR(0x00);  //右半屏写0;
    05D3 2700      CLR	R16
    05D4 DFCC      RCALL	_LCD_Write_DatR
    05D5 9563      INC	R22
    05D6 3460      CPI	R22,0x40
    05D7 F3C8      BCS	0x05D1
    05D8 9543      INC	R20
    05D9 3048      CPI	R20,0x8
    05DA F350      BCS	0x05C5
    05DB 940E07C0  CALL	pop_gset2
    05DD 9508      RET
_LCD_WrCHr8x16:
  chr_m                --> R20
  i                    --> R22
  chrx                 --> Y+8
  y                    --> R10
  x                    --> R12
    05DE 940E07C8  CALL	push_gset4
    05E0 2EA2      MOV	R10,R18
    05E1 2EC0      MOV	R12,R16
(0150)   	}
(0151) }
(0152) }
(0153) 
(0154) //====================================================================
(0155) //功能: 显示8x16字符,位置按8x8一个点来定
(0156) // x:行坐标(x=(0--8))  y:列坐标(y=0--15)  chrx:显示字符
(0157) //====================================================================
(0158) void LCD_WrCHr8x16(unsigned char x,unsigned char y,unsigned char chrx)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -