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

📄 cac.lst

📁 我写的L297步进电机的驱动
💻 LST
📖 第 1 页 / 共 3 页
字号:
__text_start:
__start:
    0060 EFCF      LDI	R28,0xFF
    0061 E0DF      LDI	R29,0xF
    0062 BFCD      OUT	0x3D,R28
    0063 BFDE      OUT	0x3E,R29
    0064 51C0      SUBI	R28,0x10
    0065 40D0      SBCI	R29,0
    0066 EA0A      LDI	R16,0xAA
    0067 8308      STD	Y+0,R16
    0068 2400      CLR	R0
    0069 E7EF      LDI	R30,0x7F
    006A E0F0      LDI	R31,0
    006B E010      LDI	R17,0
    006C 37EF      CPI	R30,0x7F
    006D 07F1      CPC	R31,R17
    006E F011      BEQ	0x0071
    006F 9201      ST	R0,Z+
    0070 CFFB      RJMP	0x006C
    0071 8300      STD	Z+0,R16
    0072 EAE0      LDI	R30,0xA0
    0073 E0F0      LDI	R31,0
    0074 E6A0      LDI	R26,0x60
    0075 E0B0      LDI	R27,0
    0076 E010      LDI	R17,0
    0077 3BEF      CPI	R30,0xBF
    0078 07F1      CPC	R31,R17
    0079 F021      BEQ	0x007E
    007A 95C8      LPM
    007B 9631      ADIW	R30,1
    007C 920D      ST	R0,X+
    007D CFF9      RJMP	0x0077
    007E 940E0204  CALL	_main
_exit:
    0080 CFFF      RJMP	_exit
FILE: E:\单片机\PROJECT\高精度三维太阳自动跟踪器\程序\传感器控制\lcm12864.h
(0001) //ICC-AVR application builder
(0002) // Target : ATMEGA16
(0003) // Crystal: 1Mhz
(0004) // YM12864R (ST7920) 驱动
(0005) // 地址:    第一行:     0x80-0x87
(0006) //          第二行:     0x90-0x97
(0007) //          第三行:     0x88-0x8f
(0008) //          第四行:     0x98-0x9f
(0009) //   cacliu   2007.10.6
(0010) //程序调用指令:
(0011) //Send_CMD();
(0012) //Send_DATA();
(0013) //LCM_init();
(0014) //LCD_CLR();
(0015) //DisHZ(unsigned int LCD_COMMAND,unsigned int x, unsigned char *HZS);
(0016) //DisBMP(const unsigned char *img);
(0017) //****************************************
(0018) 
(0019) 
(0020) #define     uint       unsigned int
(0021) 
(0022) #define        Set_CLK    PORTB |= (1 <<4)    //PORTB|=0x10
(0023) #define        Clr_CLK    PORTB &= ~(1 <<4)   //PORTB&=~0x10
(0024) #define        Set_DAT    PORTB |= (1 << 6)   //PORTB|=0x40
(0025) #define        Clr_DAT    PORTB &= ~(1 << 6)  //PORTB&=~0x40
(0026) #define        Set_CS     PORTB |= (1 << 5)   //PORTB|=0x20
(0027) #define        Clr_CS     PORTB &= ~(1 << 5)  //PORTB&=~0x20
(0028) #define        DATOUT         DDRB|=0x80  
(0029) #define        DATIN          DDRB&=~0x80
(0030) #define        DAT_High       PINB&0x80
(0031) //****************************************
(0032) void    delayus(char    us)
(0033) {
(0034)     for (;us!=0;us--)
_delayus:
  us                   --> R16
    0081 C002      RJMP	0x0084
(0035)         {WDR();}
    0082 95A8      WDR
    0083 950A      DEC	R16
    0084 2300      TST	R16
    0085 F7E1      BNE	0x0082
    0086 9508      RET
_delayms:
  i                    --> R20
  ms                   --> R16
    0087 940E02D4  CALL	push_gset1
(0036)     }
(0037) //****************************************
(0038) void    delayms(uint ms)
(0039) {
(0040)     uint    i;
(0041) 
(0042)     for (;ms!=0;ms--)
    0089 C00C      RJMP	0x0096
(0043)         {for (i=461;i!=0;i--)
    008A EC4D      LDI	R20,0xCD
    008B E051      LDI	R21,1
    008C C004      RJMP	0x0091
(0044)             {WDR();WDR();}
    008D 95A8      WDR
    008E 95A8      WDR
    008F 5041      SUBI	R20,1
    0090 4050      SBCI	R21,0
    0091 3040      CPI	R20,0
    0092 0745      CPC	R20,R21
    0093 F7C9      BNE	0x008D
    0094 5001      SUBI	R16,1
    0095 4010      SBCI	R17,0
    0096 3000      CPI	R16,0
    0097 0701      CPC	R16,R17
    0098 F789      BNE	0x008A
    0099 940E02D7  CALL	pop_gset1
    009B 9508      RET
_data_trans:
  i                    --> R20
  data                 --> R16
    009C 940E02D4  CALL	push_gset1
(0045)         }
(0046) 
(0047) }
(0048) 
(0049) //---------------------------------------------------------
(0050) void    data_trans(char data)
(0051) {
(0052)     char i;
(0053) 
(0054)     for (i=8;i!=0;i--)
    009E E048      LDI	R20,0x8
    009F C009      RJMP	0x00A9
(0055)         {if (data&0x80)Set_DAT;
    00A0 FF07      SBRS	R16,7
    00A1 C002      RJMP	0x00A4
    00A2 9AC6      SBI	0x18,6
    00A3 C001      RJMP	0x00A5
(0056)             else Clr_DAT;
    00A4 98C6      CBI	0x18,6
(0057)         Clr_CLK;
    00A5 98C4      CBI	0x18,4
(0058)         data<<=1;
    00A6 0F00      LSL	R16
(0059)         Set_CLK;
    00A7 9AC4      SBI	0x18,4
    00A8 954A      DEC	R20
    00A9 2344      TST	R20
    00AA F7A9      BNE	0x00A0
    00AB 940E02D7  CALL	pop_gset1
    00AD 9508      RET
_Send_CMD:
  temp                 --> R20
  com                  --> R22
    00AE 940E02D2  CALL	push_gset2
    00B0 2F60      MOV	R22,R16
(0060)         }
(0061) }
(0062) //---------------------------------------------------------
(0063) void   Send_CMD(char   com)
(0064) {
(0065)     char    temp;
(0066) 
(0067) Set_CS;
    00B1 9AC5      SBI	0x18,5
(0068)     temp=0xF8;
    00B2 EF48      LDI	R20,0xF8
(0069)     data_trans(temp);
    00B3 2F04      MOV	R16,R20
    00B4 DFE7      RCALL	_data_trans
(0070)     temp=com&0xF0;
    00B5 2F46      MOV	R20,R22
    00B6 7F40      ANDI	R20,0xF0
(0071)     data_trans(temp);
    00B7 2F04      MOV	R16,R20
    00B8 DFE3      RCALL	_data_trans
(0072)     temp=com&0x0F;temp<<=4;
    00B9 2F46      MOV	R20,R22
    00BA 704F      ANDI	R20,0xF
    00BB 2F84      MOV	R24,R20
    00BC 708F      ANDI	R24,0xF
    00BD 9582      SWAP	R24
    00BE 2F48      MOV	R20,R24
(0073)     data_trans(temp);
    00BF 2F08      MOV	R16,R24
    00C0 DFDB      RCALL	_data_trans
(0074) Clr_CS;
    00C1 98C5      CBI	0x18,5
(0075) delayus(70);
    00C2 E406      LDI	R16,0x46
    00C3 DFBD      RCALL	_delayus
    00C4 940E02C0  CALL	pop_gset2
    00C6 9508      RET
_LCD_Set_DDRAM:
  addr                 --> R20
    00C7 940E02D4  CALL	push_gset1
    00C9 2F40      MOV	R20,R16
(0076) }
(0077) //---------------------------------------
(0078) void    LCD_Set_DDRAM(char addr)
(0079) {Send_CMD(addr);}
    00CA 2F04      MOV	R16,R20
    00CB DFE2      RCALL	_Send_CMD
    00CC 940E02D7  CALL	pop_gset1
    00CE 9508      RET
(0080) 
(0081) void    LCD_HOME(void)
(0082) {Send_CMD(0x02);}
_LCD_HOME:
    00CF E002      LDI	R16,2
    00D0 DFDD      RCALL	_Send_CMD
    00D1 9508      RET
(0083) 
(0084) void    LCD_CLR(void)
(0085) {Send_CMD(0x01);delayms(2);}
_LCD_CLR:
    00D2 E001      LDI	R16,1
    00D3 DFDA      RCALL	_Send_CMD
    00D4 E002      LDI	R16,2
    00D5 E010      LDI	R17,0
    00D6 DFB0      RCALL	_delayms
    00D7 9508      RET
_Send_DATA:
  temp                 --> R20
  data                 --> R22
    00D8 940E02D2  CALL	push_gset2
    00DA 2F60      MOV	R22,R16
(0086) //----------------------------------------------------------
(0087) void    Send_DATA(char data)
(0088) {
(0089)     char    temp;
(0090) Set_CS;
    00DB 9AC5      SBI	0x18,5
(0091)     temp=0xFA;
    00DC EF4A      LDI	R20,0xFA
(0092)     data_trans(temp);
    00DD 2F04      MOV	R16,R20
    00DE DFBD      RCALL	_data_trans
(0093)     temp=data&0xF0;
    00DF 2F46      MOV	R20,R22
    00E0 7F40      ANDI	R20,0xF0
(0094)     data_trans(temp);
    00E1 2F04      MOV	R16,R20
    00E2 DFB9      RCALL	_data_trans
(0095)     temp=data&0x0F;temp<<=4;
    00E3 2F46      MOV	R20,R22
    00E4 704F      ANDI	R20,0xF
    00E5 2F84      MOV	R24,R20
    00E6 708F      ANDI	R24,0xF
    00E7 9582      SWAP	R24
    00E8 2F48      MOV	R20,R24
(0096)     data_trans(temp);
    00E9 2F08      MOV	R16,R24
    00EA DFB1      RCALL	_data_trans
(0097) Clr_CS;
    00EB 98C5      CBI	0x18,5
(0098) delayus(40);
    00EC E208      LDI	R16,0x28
    00ED DF93      RCALL	_delayus
    00EE 940E02C0  CALL	pop_gset2
    00F0 9508      RET
_LCD_set_xy:
  address              --> R20
  y                    --> R10
  x                    --> R22
    00F1 940E02D0  CALL	push_gset3
    00F3 2EA2      MOV	R10,R18
    00F4 2F60      MOV	R22,R16
(0099) }
(0100) 
(0101) //--------------设置XY-----------------//
(0102) 
(0103) void LCD_set_xy( unsigned char x, unsigned char y )  //写地址函数
(0104) {
(0105)     unsigned char address;
(0106)     if (y == 0) address = 0x80 + x;
    00F5 20AA      TST	R10
    00F6 F419      BNE	0x00FA
    00F7 2F46      MOV	R20,R22
    00F8 5840      SUBI	R20,0x80
    00F9 C00E      RJMP	0x0108
(0107)     else  if(y == 1) address = 0x90 + x;
    00FA 2D8A      MOV	R24,R10
    00FB 3081      CPI	R24,1
    00FC F419      BNE	0x0100
    00FD 2F46      MOV	R20,R22
    00FE 5740      SUBI	R20,0x70
    00FF C008      RJMP	0x0108
(0108) 		  else if(y == 2) address = 0x88 + x;
    0100 2D8A      MOV	R24,R10
    0101 3082      CPI	R24,2
    0102 F419      BNE	0x0106
    0103 2F46      MOV	R20,R22
    0104 5748      SUBI	R20,0x78
    0105 C002      RJMP	0x0108
(0109) 		  	   else address = 0x98 + x;	
    0106 2F46      MOV	R20,R22
    0107 5648      SUBI	R20,0x68
(0110)     Send_CMD(address);
    0108 2F04      MOV	R16,R20
    0109 DFA4      RCALL	_Send_CMD
    010A 940E02C3  CALL	pop_gset3
    010C 9508      RET
(0111) }
(0112) //************************************************************
(0113) //----------------------------------------
(0114) //************************************************************
(0115) void    LCM_init(void)
(0116) {
(0117) delayms(50);
_LCM_init:
    010D E302      LDI	R16,0x32
    010E E010      LDI	R17,0
    010F DF77      RCALL	_delayms
(0118) Send_CMD(0x20);//Function Set命令必须发送两次
    0110 E200      LDI	R16,0x20
    0111 DF9C      RCALL	_Send_CMD
(0119) Send_CMD(0x20);
    0112 E200      LDI	R16,0x20
    0113 DF9A      RCALL	_Send_CMD
(0120) Send_CMD(0x0C);//整体显示ON,游标OFF,
    0114 E00C      LDI	R16,0xC
    0115 DF98      RCALL	_Send_CMD
(0121) LCD_CLR();        //CLR
    0116 DFBB      RCALL	_LCD_CLR
(0122) Send_CMD(0x06);//AC++
    0117 E006      LDI	R16,6
    0118 DF95      RCALL	_Send_CMD
    0119 9508      RET
_DisHZ:
  i                    --> R20
  HZS                  --> R22
  x                    --> R10
  LCD_COMMAND          --> R20
    011A 940E02D0  CALL	push_gset3
    011C 0159      MOVW	R10,R18
    011D 01A8      MOVW	R20,R16
    011E 816E      LDD	R22,Y+6
    011F 817F      LDD	R23,Y+7
(0123) }
(0124) //************************************************************
(0125) //自定义全角字符,最多4个,保存在CGRAM中
(0126) char    const    font_wd[]=    //℃
(0127) {0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x0A,0xF0,0x05,0x88,0x03,0x00,0x02,0x00,

⌨️ 快捷键说明

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