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

📄 no2.lst

📁 12864LCD液晶仿真
💻 LST
📖 第 1 页 / 共 3 页
字号:
__start:
__text_start:
      CA E5CF      LDI	R28,0x5F
      CB E0D4      LDI	R29,4
      CC BFCD      OUT	0x3D,R28
      CD BFDE      OUT	0x3E,R29
      CE 51CE      SUBI	R28,0x1E
      CF 40D0      SBCI	R29,0
      D0 EA0A      LDI	R16,0xAA
      D1 8308      STD	Y+0,R16
      D2 2400      CLR	R0
      D3 EAE0      LDI	R30,0xA0
      D4 E0F1      LDI	R31,1
      D5 E011      LDI	R17,1
      D6 3AE0      CPI	R30,0xA0
      D7 07F1      CPC	R31,R17
      D8 F011      BEQ	0x00DB
      D9 9201      ST	R0,Z+
      DA CFFB      RJMP	0x00D6
      DB 8300      STD	Z+0,R16
      DC E5E4      LDI	R30,0x54
      DD E0F0      LDI	R31,0
      DE E6A0      LDI	R26,0x60
      DF E0B0      LDI	R27,0
      E0 E011      LDI	R17,1
      E1 E000      LDI	R16,0
      E2 BF0B      OUT	0x3B,R16
      E3 39E4      CPI	R30,0x94
      E4 07F1      CPC	R31,R17
      E5 F021      BEQ	0x00EA
      E6 95C8      LPM
      E7 9631      ADIW	R30,1
      E8 920D      ST	R0,X+
      E9 CFF9      RJMP	0x00E3
      EA 940E 02D2 CALL	_main
_exit:
      EC CFFF      RJMP	_exit
FILE: D:\Proteus\Proteus练习\新建文件夹\NO2.C
(0001) #include <iom16v.h>
(0002) #include <macros.h>
(0003) 
(0004) #define uchar unsigned char
(0005) #define uint  unsigned int
(0006) #define LEFT 0
(0007) #define RIGHT 1
(0008) #define CMD 0
(0009) #define DATA 1
(0010) #define LCD_STATUS_BUSY 0x80
(0011) #define  START_LINE0   0xc0
(0012) #define  DISPLAY_ON    0x3f
(0013) #define  DISPLAY_OFF   0x3e
(0014) #define  PARA1         0x40
(0015) /*-----------------------------------------------------------------------
(0016) 延时函数
(0017) 系统时钟:8M
(0018) -----------------------------------------------------------------------*/
(0019) 
(0020) uchar  time_logo[5][32] = {
(0021) /*--  文字:  时  --*/
(0022) /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
(0023) 0x00,0xFC,0x44,0x44,0x44,0xFC,0x10,0x90,0x10,0x10,0x10,0xFF,0x10,0x10,0x10,0x00,
(0024) 0x00,0x07,0x04,0x04,0x04,0x07,0x00,0x00,0x03,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,
(0025) 
(0026) /*--  文字:  爱 --*/
(0027) /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
(0028) 0x40,0xB0,0x92,0x96,0x9A,0x92,0xF2,0x9E,0x92,0x91,0x99,0x95,0x91,0x50,0x30,0x00,
(0029) 0x00,0x00,0x40,0x30,0x8C,0x83,0x46,0x2A,0x12,0x2A,0x26,0x42,0xC0,0x40,0x00,0x00,
(0030) 
(0031) /*--  文字:  你 --*/
(0032) /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
(0033) 0x40,0x20,0xF8,0x07,0x40,0x20,0x18,0x0F,0x08,0xC8,0x08,0x08,0x28,0x18,0x00,0x00,
(0034) 0x00,0x00,0xFF,0x00,0x00,0x08,0x04,0x43,0x80,0x7F,0x00,0x01,0x06,0x0C,0x00,0x00,
(0035) /*--  文字:  我  --*/
(0036) /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
(0037) 0x20,0x24,0x24,0x24,0xfe,0x23,0x22,0x20,0xFF,0x20,0x22,0xac,0x20,0x30,0x20,0x00,
(0038) 0x00,0x08,0x48,0x84,0x7F,0x02,0x21,0x10,0x09,0x06,0x1A,0x61,0x80,0xE0,0x00,0x00,
(0039) 
(0040) };
(0041) 
(0042) uchar  menu[5][32] = {
(0043) /*--  文字: 一 --*/
(0044) /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
(0045) 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xc0,0x80,0x00,
(0046) 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
(0047) /*--  文字: 二 --*/
(0048) /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
(0049) 0x00,0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x008,0x0c,0x08,0x00,0x00,0x00,
(0050) 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00,
(0051) /*--  文字: 三 --*/
(0052) /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
(0053) 0x00,0x04,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0x084,0xc4,0x86,0x04,0x00,0x00,
(0054) 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x30,0x20,0x00,
(0055) /*--  文字: 四 --*/
(0056) /*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
(0057) 0x00,0xfc,0x04,0x04,0x04,0xfc,0x04,0x04,0x04,0xfc,0x004,0x04,0x04,0xfe,0x04,0x00,
(0058) 0x00,0x7f,0x20,0x28,0x24,0x23,0x20,0x20,0x20,0x21,0x20,0x22,0x22,0x7f,0x00,0x00,
(0059) 
(0060) };
(0061) 
(0062)  
(0063)  void delay_1us(void);                 //1us延时函数
(0064)  void delay_nus(unsigned int n);       //N us延时函数
(0065)  void delay_1ms(void) ;                //1ms延时函数
(0066)  void delay_nms(unsigned int n) ;      //N ms延时函数
(0067)  
(0068)  /***********************************************************************/
(0069)  /**********************************************************************/
(0070) void delay_1us(void)                 //1us延时函数
(0071)   {
(0072)    asm("nop");
_delay_1us:
      ED 0000      NOP
      EE 9508      RET
_delay_nus:
  i                    --> R10
  n                    --> R12
      EF 940E 031A CALL	push_xgset003C
      F1 0168      MOVW	R12,R16
(0073)   }
(0074) 
(0075) void delay_nus(unsigned int n)       //N us延时函数
(0076)   {
(0077)    unsigned int i=0;
      F2 24AA      CLR	R10
      F3 24BB      CLR	R11
(0078)    for (i=0;i<n;i++)
      F4 C004      RJMP	0x00F9
(0079)    delay_1us();
      F5 DFF7      RCALL	_delay_1us
      F6 01C5      MOVW	R24,R10
      F7 9601      ADIW	R24,1
      F8 015C      MOVW	R10,R24
      F9 14AC      CP	R10,R12
      FA 04BD      CPC	R11,R13
      FB F3C8      BCS	0x00F5
      FC 940C 0308 JMP	pop_xgset003C
(0080)   }
(0081)   
(0082) void delay_1ms(void)                 //1ms延时函数
(0083)   {
(0084)    unsigned int i;
(0085)    for (i=0;i<1140;i++);
_delay_1ms:
  i                    --> R16
      FE 2700      CLR	R16
      FF 2711      CLR	R17
     100 C002      RJMP	0x0103
     101 5F0F      SUBI	R16,0xFF
     102 4F1F      SBCI	R17,0xFF
     103 3704      CPI	R16,0x74
     104 E0E4      LDI	R30,4
     105 071E      CPC	R17,R30
     106 F3D0      BCS	0x0101
     107 9508      RET
_delay_nms:
  i                    --> R10
  n                    --> R12
     108 940E 031A CALL	push_xgset003C
     10A 0168      MOVW	R12,R16
(0086)   }
(0087)   
(0088) void delay_nms(unsigned int n)       //N ms延时函数
(0089)   {
(0090)    unsigned int i=0;
     10B 24AA      CLR	R10
     10C 24BB      CLR	R11
(0091)    for (i=0;i<n;i++)
     10D C004      RJMP	0x0112
(0092)    {
(0093)       delay_1ms();
     10E DFEF      RCALL	_delay_1ms
     10F 01C5      MOVW	R24,R10
     110 9601      ADIW	R24,1
     111 015C      MOVW	R10,R24
     112 14AC      CP	R10,R12
     113 04BD      CPC	R11,R13
     114 F3C8      BCS	0x010E
     115 940C 0308 JMP	pop_xgset003C
_delay:
  i                    --> R10
  j                    --> R12
  ms                   --> R16
     117 940E 031A CALL	push_xgset003C
(0094)    }   
(0095)   }
(0096)   
(0097)   void delay(uint ms)
(0098) {
(0099)         uint i,j;
(0100) 	for(i=0;i<ms;i++)
     119 24AA      CLR	R10
     11A 24BB      CLR	R11
     11B C00E      RJMP	0x012A
(0101) 	   {
(0102) 	   for(j=0;j<1141;j++);
     11C 24CC      CLR	R12
     11D 24DD      CLR	R13
     11E C003      RJMP	0x0122
     11F 01C6      MOVW	R24,R12
     120 9601      ADIW	R24,1
     121 016C      MOVW	R12,R24
     122 01C6      MOVW	R24,R12
     123 3785      CPI	R24,0x75
     124 E0E4      LDI	R30,4
     125 079E      CPC	R25,R30
     126 F3C0      BCS	0x011F
     127 01C5      MOVW	R24,R10
     128 9601      ADIW	R24,1
     129 015C      MOVW	R10,R24
     12A 16A0      CP	R10,R16
     12B 06B1      CPC	R11,R17
     12C F378      BCS	0x011C
     12D 940C 0308 JMP	pop_xgset003C
(0103)        }
(0104) }
(0105) void Lcd_Write_Byte(uchar temp)
(0106) {   
(0107)     PORTB|=BIT(0);
_Lcd_Write_Byte:
  temp                 --> R16
     12F 9AC0      SBI	0x18,0
(0108)     PORTB&=~BIT(1);    //W
     130 98C1      CBI	0x18,1
(0109)     PORTB|=BIT(4); //E使能
     131 9AC4      SBI	0x18,4
(0110)     DDRA=0xff; //a输出
     132 EF8F      LDI	R24,0xFF
     133 BB8A      OUT	0x1A,R24
(0111)     PORTA=temp;
     134 BB0B      OUT	0x1B,R16
(0112)     asm("nop");
     135 0000      NOP
(0113)     asm("nop");
     136 0000      NOP
(0114)     asm("nop");
     137 0000      NOP
(0115)     asm("nop");
     138 0000      NOP
(0116)     PORTB&=~BIT(4);	 
     139 98C4      CBI	0x18,4
(0117)     PORTA=0xff;
     13A BB8B      OUT	0x1B,R24
     13B 9508      RET
(0118) }
(0119) void Lcd_Write_COM(uchar COL)
(0120) {   
(0121)     PORTB&=~BIT(0);
_Lcd_Write_COM:
  COL                  --> R16
     13C 98C0      CBI	0x18,0
(0122)     PORTB&=~BIT(1);    //W
     13D 98C1      CBI	0x18,1
(0123)     PORTB|=BIT(4); //E使能
     13E 9AC4      SBI	0x18,4
(0124)     DDRA=0xff; //a输出
     13F EF8F      LDI	R24,0xFF
     140 BB8A      OUT	0x1A,R24
(0125)     PORTA=COL;
     141 BB0B      OUT	0x1B,R16
(0126)     asm("nop");
     142 0000      NOP
(0127)     asm("nop");
     143 0000      NOP
(0128)     asm("nop");
     144 0000      NOP
(0129)     asm("nop");
     145 0000      NOP
(0130)     PORTB&=~BIT(4);	 
     146 98C4      CBI	0x18,4
     147 9508      RET
_set_page_L:
  page                 --> R10
     148 92AA      ST	R10,-Y
     149 2EA0      MOV	R10,R16
(0131)  
(0132) }
(0133) 
(0134) 
(0135) void set_page_L(unsigned char page)	/*设置X地址 设置页*/  //0-7
(0136) {
(0137)    Lcd_Write_COM(0xb8|page);                     
     14A 2D0A      MOV	R16,R10
     14B 6B08      ORI	R16,0xB8
     14C DFEF      RCALL	_Lcd_Write_COM
     14D 90A9      LD	R10,Y+
     14E 9508      RET
_set_page_R:
  page                 --> R10
     14F 92AA      ST	R10,-Y
     150 2EA0      MOV	R10,R16
(0138) }
(0139) void set_page_R(unsigned char page)	/*设置X地址 设置页*/ //0-7
(0140) {
(0141)     Lcd_Write_COM(0xb8|page);                     
     151 2D0A      MOV	R16,R10
     152 6B08      ORI	R16,0xB8
     153 DFE8      RCALL	_Lcd_Write_COM
     154 90A9      LD	R10,Y+
     155 9508      RET
_set_col_addr_L:
  col                  --> R10
     156 92AA      ST	R10,-Y
     157 2EA0      MOV	R10,R16
(0142) }
(0143) 
(0144) void set_col_addr_L(unsigned char col) /*设置Y地址*/ //0-63
(0145) {
(0146)      
(0147)    Lcd_Write_COM(0x40|col);                     
     158 2D0A      MOV	R16,R10
     159 6400      ORI	R16,0x40
     15A DFE1      RCALL	_Lcd_Write_COM
     15B 90A9      LD	R10,Y+
     15C 9508      RET
_set_col_addr_R:
  col                  --> R10
     15D 92AA      ST	R10,-Y
     15E 2EA0      MOV	R10,R16
(0148) }
(0149) 
(0150) void set_col_addr_R(unsigned char col) /*设置Y地址*/ //0-63
(0151) {
(0152)     Lcd_Write_COM(0x40|col);                        
     15F 2D0A      MOV	R16,R10
     160 6400      ORI	R16,0x40
     161 DFDA      RCALL	_Lcd_Write_COM
     162 90A9      LD	R10,Y+
     163 9508      RET
_Lcd_Set_X_Y:
  y                    --> R12
  x                    --> R10

⌨️ 快捷键说明

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