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

📄 12864.lst

📁 12864液晶程序奥神队教案看来是大会发送到符合卡口述的回复 阿水地方阿水地方阿水地方
💻 LST
📖 第 1 页 / 共 2 页
字号:
__start:
__text_start:
    00C2 E5CF      LDI	R28,0x5F
    00C3 E0D4      LDI	R29,4
    00C4 BFCD      OUT	0x3D,R28
    00C5 BFDE      OUT	0x3E,R29
    00C6 51C0      SUBI	R28,0x10
    00C7 40D0      SBCI	R29,0
    00C8 EA0A      LDI	R16,0xAA
    00C9 8308      STD	Y+0,R16
    00CA 2400      CLR	R0
    00CB E6E0      LDI	R30,0x60
    00CC E0F0      LDI	R31,0
    00CD E010      LDI	R17,0
    00CE 36E0      CPI	R30,0x60
    00CF 07F1      CPC	R31,R17
    00D0 F011      BEQ	0x00D3
    00D1 9201      ST	R0,Z+
    00D2 CFFB      RJMP	0x00CE
    00D3 8300      STD	Z+0,R16
    00D4 E8E4      LDI	R30,0x84
    00D5 E0F1      LDI	R31,1
    00D6 E6A0      LDI	R26,0x60
    00D7 E0B0      LDI	R27,0
    00D8 E011      LDI	R17,1
    00D9 38E4      CPI	R30,0x84
    00DA 07F1      CPC	R31,R17
    00DB F021      BEQ	0x00E0
    00DC 95C8      LPM
    00DD 9631      ADIW	R30,1
    00DE 920D      ST	R0,X+
    00DF CFF9      RJMP	0x00D9
    00E0 940E0198  CALL	_main
_exit:
    00E2 CFFF      RJMP	_exit
_delay:
  i                    --> R20
  j                    --> R22
  t                    --> R16
    00E3 940E01E8  CALL	push_gset2
FILE: D:\mega16学习板资料\例程\m16\12864\12864.H
(0001) #include "font.h"
(0002) 
(0003) #define	LCD_DI (1 <<6)			    	// PA6----DI
(0004) #define	LCD_RW (1 <<5)					// PA5----RW
(0005) #define	LCD_E (1 <<4)			    	// PA4----E
(0006) #define	LCD_PSB (1 << 3)	           	// PA3----CS1
(0007) #define	LCD_RST (1 << 1)				// PA1----RST
(0008) 
(0009) #define LCD_PORT  PORTA                 //PA口连接到了5个控制脚,具体定义如上
(0010) #define	LCD_SET_PSB()    (LCD_PORT |= LCD_PSB)	// 位置位,输出1
(0011) #define	LCD_SET_RST()    (LCD_PORT |= LCD_RST)
(0012) #define	LCD_SET_DI()     (LCD_PORT |= LCD_DI)
(0013) #define	LCD_SET_RW()     (LCD_PORT |= LCD_RW)
(0014) #define	LCD_SET_E()      (LCD_PORT |= LCD_E)
(0015) 
(0016) #define	LCD_CLEAR_PSB()  (LCD_PORT &= ~LCD_PSB)			// 位清零,输出0
(0017) #define	LCD_CLEAR_RST()  (LCD_PORT &= ~LCD_RST)
(0018) #define	LCD_CLEAR_DI()   (LCD_PORT &= ~LCD_DI)
(0019) #define	LCD_CLEAR_RW()   (LCD_PORT &= ~LCD_RW)
(0020) #define	LCD_CLEAR_E()    (LCD_PORT &= ~LCD_E)
(0021) #define	LCD_DATA_OUT	 PORTB				//LCD数据输出口
(0022) #define	LCD_DATA_IN 	 PINB				//LCD数据输出口
(0023) #define	LCD_DDR 	     DDRB				//LCD数据口方向
(0024) /* Define the register command code */
(0025) #define Disp_On  0x3f
(0026) #define Disp_Off 0x30
(0027) #define Col_Add  0x40
(0028) #define Page_Add 0xb8
(0029) #define Start_Line 0xc0
(0030) 
(0031) 
(0032) void delay(unsigned int t);
(0033) void write_com(unsigned char cmdcode);
(0034) void write_data(unsigned char Dispdata);
(0035) void init_lcd(void);
(0036) unsigned char read_data(void);
(0037) void DisplayWord(unsigned int Add,unsigned char xAdd,unsigned char yAdd,
(0038) unsigned char SelscP,unsigned char num,unsigned char flag);
(0039) void DisplayLine(unsigned int Add,unsigned char com,unsigned char line,unsigned char flag);
(0040) void ClearDisplay(void);
(0041) void Test(unsigned int lcd_data);
(0042) void Testlcd2(unsigned char lcd_datah,unsigned char lcd_datal);
(0043) /*------------------延时子程序-----------------------------*/
(0044) void delay(unsigned int t)
(0045) {
(0046) unsigned int i,j;
(0047) for(i=0;i<t;i++)
    00E5 2744      CLR	R20
    00E6 2755      CLR	R21
    00E7 C00B      RJMP	0x00F3
(0048) for(j=0;j<10;j++)
    00E8 2766      CLR	R22
    00E9 2777      CLR	R23
    00EA C002      RJMP	0x00ED
    00EB 5F6F      SUBI	R22,0xFF
    00EC 4F7F      SBCI	R23,0xFF
    00ED 306A      CPI	R22,0xA
    00EE E0E0      LDI	R30,0
    00EF 077E      CPC	R23,R30
    00F0 F3D0      BCS	0x00EB
    00F1 5F4F      SUBI	R20,0xFF
    00F2 4F5F      SBCI	R21,0xFF
    00F3 1740      CP	R20,R16
    00F4 0751      CPC	R21,R17
    00F5 F390      BCS	0x00E8
(0049) ;
(0050) }
    00F6 940E01CE  CALL	pop_gset2
    00F8 9508      RET
_write_com:
  cmdcode              --> R20
    00F9 940E01D1  CALL	push_gset1
    00FB 2F40      MOV	R20,R16
(0051) 
(0052) /*------------------写命令到LCD------------------------------*/
(0053) void write_com(unsigned char cmdcode)
(0054) {
(0055) 
(0056) LCD_CLEAR_DI();
    00FC 98DE      CBI	0x1B,6
(0057) LCD_CLEAR_RW();
    00FD 98DD      CBI	0x1B,5
(0058) LCD_DDR=0xff;
    00FE EF8F      LDI	R24,0xFF
    00FF BB87      OUT	0x17,R24
(0059) 
(0060) LCD_DATA_OUT=cmdcode;
    0100 BB48      OUT	0x18,R20
(0061) LCD_SET_E();
    0101 9ADC      SBI	0x1B,4
(0062) delay(100);
    0102 E604      LDI	R16,0x64
    0103 E010      LDI	R17,0
    0104 DFDE      RCALL	_delay
(0063) LCD_CLEAR_E();
    0105 98DC      CBI	0x1B,4
(0064) }
    0106 940E01D4  CALL	pop_gset1
    0108 9508      RET
_write_data:
  Dispdata             --> R20
    0109 940E01D1  CALL	push_gset1
    010B 2F40      MOV	R20,R16
(0065) 
(0066) /*-------------------写数据到LCD----------------------------*/
(0067) 
(0068) void write_data(unsigned char Dispdata)
(0069) {
(0070) 
(0071) LCD_SET_DI();
    010C 9ADE      SBI	0x1B,6
(0072) LCD_CLEAR_RW();
    010D 98DD      CBI	0x1B,5
(0073) LCD_DDR=0xff;
    010E EF8F      LDI	R24,0xFF
    010F BB87      OUT	0x17,R24
(0074) 
(0075) LCD_DATA_OUT=Dispdata;
    0110 BB48      OUT	0x18,R20
(0076) LCD_SET_E();
    0111 9ADC      SBI	0x1B,4
(0077) delay(100);
    0112 E604      LDI	R16,0x64
    0113 E010      LDI	R17,0
    0114 DFCE      RCALL	_delay
(0078) LCD_CLEAR_E();
    0115 98DC      CBI	0x1B,4
(0079) }
    0116 940E01D4  CALL	pop_gset1
    0118 9508      RET
_read_data:
  tmpin                --> R20
    0119 940E01D1  CALL	push_gset1
(0080) 
(0081) /*-------------------读LCD数据----------------------------*/
(0082) 
(0083) unsigned char read_data(void)
(0084) {
(0085) unsigned char tmpin;
(0086) LCD_DDR=0x0;
    011B 2422      CLR	R2
    011C BA27      OUT	0x17,R2
(0087) LCD_SET_DI();
    011D 9ADE      SBI	0x1B,6
(0088) LCD_SET_RW();
    011E 9ADD      SBI	0x1B,5
(0089) delay(0);
    011F 2700      CLR	R16
    0120 2711      CLR	R17
    0121 DFC1      RCALL	_delay
(0090) LCD_SET_E();
    0122 9ADC      SBI	0x1B,4
(0091) delay(0);
    0123 2700      CLR	R16
    0124 2711      CLR	R17
    0125 DFBD      RCALL	_delay
(0092) LCD_CLEAR_E();
    0126 98DC      CBI	0x1B,4
(0093) 
(0094) tmpin=LCD_DATA_IN;
    0127 B346      IN	R20,0x16
(0095) 
(0096) return tmpin;
    0128 2F04      MOV	R16,R20
    0129 940E01D4  CALL	pop_gset1
    012B 9508      RET
(0097) }
(0098) /*------------------初始化LCD屏--------------------------*/
(0099) void init_lcd(void)
(0100) {
(0101) LCD_SET_PSB();
_init_lcd:
    012C 9ADB      SBI	0x1B,3
(0102) delay(100);
    012D E604      LDI	R16,0x64
    012E E010      LDI	R17,0
    012F DFB3      RCALL	_delay
(0103) LCD_SET_RST();
    0130 9AD9      SBI	0x1B,1
(0104) delay(100);
    0131 E604      LDI	R16,0x64
    0132 E010      LDI	R17,0
    0133 DFAF      RCALL	_delay
(0105) 
(0106) write_com(0X30);
    0134 E300      LDI	R16,0x30
    0135 DFC3      RCALL	_write_com
(0107) delay(100);
    0136 E604      LDI	R16,0x64
    0137 E010      LDI	R17,0
    0138 DFAA      RCALL	_delay
(0108) write_com(0X30);
    0139 E300      LDI	R16,0x30
    013A DFBE      RCALL	_write_com
(0109) delay(100);
    013B E604      LDI	R16,0x64
    013C E010      LDI	R17,0
    013D DFA5      RCALL	_delay
(0110) write_com(0x0C);
    013E E00C      LDI	R16,0xC
    013F DFB9      RCALL	_write_com
(0111) delay(100);
    0140 E604      LDI	R16,0x64
    0141 E010      LDI	R17,0
    0142 DFA0      RCALL	_delay
(0112) write_com(0X01);
    0143 E001      LDI	R16,1
    0144 DFB4      RCALL	_write_com
(0113) delay(100);
    0145 E604      LDI	R16,0x64
    0146 E010      LDI	R17,0
    0147 DF9B      RCALL	_delay
(0114) write_com(0X06);
    0148 E006      LDI	R16,6
    0149 DFAF      RCALL	_write_com
(0115) delay(100);
    014A E604      LDI	R16,0x64
    014B E010      LDI	R17,0
(0116) }
    014C CF96      RJMP	_delay
_ClearDisplay:
  i                    --> R20
  j                    --> R22
    014D 940E01E8  CALL	push_gset2
(0117) 
(0118) /*void DisplayWord(unsigned int Add,unsigned char xAdd,unsigned char yAdd,
(0119) unsigned char SelscP,unsigned char num,unsigned char flag)//Add:显示数据的起始地址
(0120) { unsigned char i,m=0,dat;                                //xAdd,yAdd:显示位置
(0121)   switch (SelscP)
(0122)    {case 0:LCD_SET_CS1();
(0123)    		   LCD_SET_CS2();
(0124) 		   break;
(0125) 	case 1:LCD_SET_CS1();
(0126)    		   LCD_CLEAR_CS2();
(0127) 		   break;
(0128) 	case 2:LCD_CLEAR_CS1();
(0129)    		   LCD_SET_CS2();
(0130) 		   break;	   	   
(0131)    }                                                       //SelscP:选择屏1,2,3
(0132)   write_com(xAdd++); //x首地址                          //mun显示宽度,一般为16
(0133)   write_com(yAdd); //y首地址							  //flag:是否清字位1不清
(0134)   while(m<num+2)
(0135)   { for(i=0;i<num;i++)

⌨️ 快捷键说明

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