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

📄 st7920.lst

📁 一个有关st7920控制器的测试程序和驱动程序的12864LCD的例程
💻 LST
📖 第 1 页 / 共 3 页
字号:
__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 + -