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

📄 1602.lst

📁 16个单片机c语言实验程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
__text_start:
__start:
      53 EFCF      LDI	R28,0xFF
      54 E1D0      LDI	R29,0x10
      55 BFCD      OUT	0x3D,R28
      56 BFDE      OUT	0x3E,R29
      57 51CE      SUBI	R28,0x1E
      58 40D0      SBCI	R29,0
      59 EA0A      LDI	R16,0xAA
      5A 8308      STD	Y+0,R16
      5B 2400      CLR	R0
      5C E1E9      LDI	R30,0x19
      5D E0F1      LDI	R31,1
      5E E011      LDI	R17,1
      5F 31E9      CPI	R30,0x19
      60 07F1      CPC	R31,R17
      61 F011      BEQ	0x0064
      62 9201      ST	R0,Z+
      63 CFFB      RJMP	0x005F
      64 8300      STD	Z+0,R16
      65 E8EC      LDI	R30,0x8C
      66 E0F0      LDI	R31,0
      67 E0A0      LDI	R26,0
      68 E0B1      LDI	R27,1
      69 E010      LDI	R17,0
      6A E000      LDI	R16,0
      6B BF0B      OUT	0x3B,R16
      6C 3AE5      CPI	R30,0xA5
      6D 07F1      CPC	R31,R17
      6E F021      BEQ	0x0073
      6F 95C8      LPM
      70 9631      ADIW	R30,1
      71 920D      ST	R0,X+
      72 CFF9      RJMP	0x006C
      73 940E 0200 CALL	_main
_exit:
      75 CFFF      RJMP	_exit
FILE: D:\16实验程序\1602液晶\1602.h
(0001) #define uchar unsigned char 
(0002) #define uint unsigned int 
(0003) 
(0004) #define RS 5
(0005) #define RW 6
(0006) #define EN 7
(0007) 
(0008) void s_ms(uint ms)
(0009) {
(0010) 	for(;ms>1;ms--);
_s_ms:
  ms                   --> R16
      76 C002      RJMP	0x0079
      77 5001      SUBI	R16,1
      78 4010      SBCI	R17,0
      79 E081      LDI	R24,1
      7A E090      LDI	R25,0
      7B 1780      CP	R24,R16
      7C 0791      CPC	R25,R17
      7D F3C8      BCS	0x0077
      7E 9508      RET
_busy:
  temp                 --> R20
      7F 934A      ST	R20,-Y
(0011) }	
(0012) 
(0013) //查忙
(0014) void busy(void)
(0015) {
(0016)     uchar temp;
(0017) 	s_ms(500);
      80 EF04      LDI	R16,0xF4
      81 E011      LDI	R17,1
      82 DFF3      RCALL	_s_ms
(0018) 	PORTA&=~(1<<RS);    //RS=0
      83 98DD      CBI	0x1B,5
(0019) 	s_ms(500);
      84 EF04      LDI	R16,0xF4
      85 E011      LDI	R17,1
      86 DFEF      RCALL	_s_ms
(0020) 	PORTA|=(1<<RW);     //RW=1
      87 9ADE      SBI	0x1B,6
(0021) 	s_ms(500);
      88 EF04      LDI	R16,0xF4
      89 E011      LDI	R17,1
      8A DFEB      RCALL	_s_ms
      8B C01A      RJMP	0x00A6
(0022) 	while(temp)
(0023) 	{
(0024) 		PORTA|=(1<<EN); //EN=1
      8C 9ADF      SBI	0x1B,7
(0025) 		s_ms(500);
      8D EF04      LDI	R16,0xF4
      8E E011      LDI	R17,1
      8F DFE6      RCALL	_s_ms
(0026) 		DDRD=0x00;      //A口变输入
      90 2422      CLR	R2
      91 BA21      OUT	0x11,R2
(0027) 		PORTD=0xff;     //上拉使能
      92 EF8F      LDI	R24,0xFF
      93 BB82      OUT	0x12,R24
(0028) 		s_ms(500);
      94 EF04      LDI	R16,0xF4
      95 E011      LDI	R17,1
      96 DFDF      RCALL	_s_ms
(0029) 		temp = PIND&0x80;    //读取A口
      97 B340      IN	R20,0x10
      98 7840      ANDI	R20,0x80
(0030) 		s_ms(500);      
      99 EF04      LDI	R16,0xF4
      9A E011      LDI	R17,1
      9B DFDA      RCALL	_s_ms
(0031) 		DDRD=0xff;      
      9C EF8F      LDI	R24,0xFF
      9D BB81      OUT	0x11,R24
(0032) 		PORTD=0xff;        //A口变输出
      9E BB82      OUT	0x12,R24
(0033) 		s_ms(500);
      9F EF04      LDI	R16,0xF4
      A0 E011      LDI	R17,1
      A1 DFD4      RCALL	_s_ms
(0034) 		PORTA&=~(1<<EN);   //EN=0
      A2 98DF      CBI	0x1B,7
(0035) 		s_ms(500);
      A3 EF04      LDI	R16,0xF4
      A4 E011      LDI	R17,1
      A5 DFD0      RCALL	_s_ms
      A6 2344      TST	R20
      A7 F721      BNE	0x008C
      A8 9149      LD	R20,Y+
      A9 9508      RET
_writecom:
  com                  --> R10
      AA 92AA      ST	R10,-Y
      AB 2EA0      MOV	R10,R16
(0036) 	}
(0037) }
(0038) 
(0039) //写指令
(0040) void writecom(uchar	com)
(0041) {
(0042) 	busy();
      AC DFD2      RCALL	_busy
(0043) 	s_ms(500);
      AD EF04      LDI	R16,0xF4
      AE E011      LDI	R17,1
      AF DFC6      RCALL	_s_ms
(0044) 	PORTA&=~(1<<RS);   //RS=0
      B0 98DD      CBI	0x1B,5
(0045) 	s_ms(500);
      B1 EF04      LDI	R16,0xF4
      B2 E011      LDI	R17,1
      B3 DFC2      RCALL	_s_ms
(0046) 	PORTA&=~(1<<RW);   //RW=0
      B4 98DE      CBI	0x1B,6
(0047) 	s_ms(500);
      B5 EF04      LDI	R16,0xF4
      B6 E011      LDI	R17,1
      B7 DFBE      RCALL	_s_ms
(0048) 	PORTA|=(1<<EN);    //EN=1
      B8 9ADF      SBI	0x1B,7
(0049) 	s_ms(500);
      B9 EF04      LDI	R16,0xF4
      BA E011      LDI	R17,1
      BB DFBA      RCALL	_s_ms
(0050) 	PORTD = com;       //输出指令
      BC BAA2      OUT	0x12,R10
(0051) 	s_ms(500);
      BD EF04      LDI	R16,0xF4
      BE E011      LDI	R17,1
      BF DFB6      RCALL	_s_ms
(0052) 	PORTA&=~(1<<EN);   //EN=0
      C0 98DF      CBI	0x1B,7
(0053) 	s_ms(500);
      C1 EF04      LDI	R16,0xF4
      C2 E011      LDI	R17,1
      C3 DFB2      RCALL	_s_ms
      C4 90A9      LD	R10,Y+
      C5 9508      RET
(0054) }
(0055) 
(0056) //1602初始化
(0057) void	LcdInit(void)
(0058) {
(0059)     DDRD = 0xff; 
_LcdInit:
      C6 EF8F      LDI	R24,0xFF
      C7 BB81      OUT	0x11,R24
(0060)     PORTD = 0x00; 
      C8 2422      CLR	R2
      C9 BA22      OUT	0x12,R2
(0061) 	writecom(0x38);
      CA E308      LDI	R16,0x38
      CB DFDE      RCALL	_writecom
(0062) 	s_ms(1000);
      CC EE08      LDI	R16,0xE8
      CD E013      LDI	R17,3
      CE DFA7      RCALL	_s_ms
(0063) 	writecom(0x01);
      CF E001      LDI	R16,1
      D0 DFD9      RCALL	_writecom
(0064) 	s_ms(1000);
      D1 EE08      LDI	R16,0xE8
      D2 E013      LDI	R17,3
      D3 DFA2      RCALL	_s_ms
(0065) 	s_ms(1000);
      D4 EE08      LDI	R16,0xE8
      D5 E013      LDI	R17,3
      D6 DF9F      RCALL	_s_ms
(0066) 	s_ms(1000);
      D7 EE08      LDI	R16,0xE8
      D8 E013      LDI	R17,3
      D9 DF9C      RCALL	_s_ms
(0067) 	s_ms(1000);
      DA EE08      LDI	R16,0xE8
      DB E013      LDI	R17,3
      DC DF99      RCALL	_s_ms
(0068) 	s_ms(1000);
      DD EE08      LDI	R16,0xE8
      DE E013      LDI	R17,3
      DF DF96      RCALL	_s_ms
(0069) 	s_ms(1000);
      E0 EE08      LDI	R16,0xE8
      E1 E013      LDI	R17,3
      E2 DF93      RCALL	_s_ms
(0070) 	s_ms(1000);
      E3 EE08      LDI	R16,0xE8
      E4 E013      LDI	R17,3
      E5 DF90      RCALL	_s_ms
(0071) 	writecom(0x02);
      E6 E002      LDI	R16,2
      E7 DFC2      RCALL	_writecom
(0072) 	s_ms(1000);
      E8 EE08      LDI	R16,0xE8
      E9 E013      LDI	R17,3
      EA DF8B      RCALL	_s_ms
(0073) 	writecom(0x06);
      EB E006      LDI	R16,6
      EC DFBD      RCALL	_writecom
(0074) 	s_ms(1000);
      ED EE08      LDI	R16,0xE8
      EE E013      LDI	R17,3
      EF DF86      RCALL	_s_ms
(0075) 	writecom(0x0c);
      F0 E00C      LDI	R16,0xC
      F1 DFB8      RCALL	_writecom
(0076) 	s_ms(1000);
      F2 EE08      LDI	R16,0xE8
      F3 E013      LDI	R17,3
      F4 DF81      RCALL	_s_ms
(0077) 	writecom(0x38);	
      F5 E308      LDI	R16,0x38
      F6 DFB3      RCALL	_writecom
(0078) 	s_ms(1000);
      F7 EE08      LDI	R16,0xE8
      F8 E013      LDI	R17,3
      F9 DF7C      RCALL	_s_ms
      FA 9508      RET
_writedata:
  data                 --> R10
      FB 92AA      ST	R10,-Y
      FC 2EA0      MOV	R10,R16
(0079) }	
(0080) 
(0081) //写数据
(0082) void	writedata(uchar data)
(0083) {
(0084) 	busy();
      FD DF81      RCALL	_busy
(0085) 	s_ms(500);
      FE EF04      LDI	R16,0xF4
      FF E011      LDI	R17,1
     100 DF75      RCALL	_s_ms
(0086) 	PORTA|=(1<<RS);   //RS=1
     101 9ADD      SBI	0x1B,5
(0087) 	s_ms(500);
     102 EF04      LDI	R16,0xF4
     103 E011      LDI	R17,1
     104 DF71      RCALL	_s_ms
(0088) 	PORTA&=~(1<<RW);   //RW=0
     105 98DE      CBI	0x1B,6
(0089) 	s_ms(500);
     106 EF04      LDI	R16,0xF4
     107 E011      LDI	R17,1
     108 DF6D      RCALL	_s_ms
(0090) 	PORTA|=(1<<EN);    //EN=1
     109 9ADF      SBI	0x1B,7
(0091) 	s_ms(500);
     10A EF04      LDI	R16,0xF4
     10B E011      LDI	R17,1
     10C DF69      RCALL	_s_ms
(0092) 	PORTD = data;      //输出数据
     10D BAA2      OUT	0x12,R10
(0093) 	s_ms(500);
     10E EF04      LDI	R16,0xF4
     10F E011      LDI	R17,1
     110 DF65      RCALL	_s_ms
(0094) 	PORTA&=~(1<<EN);   //EN=0
     111 98DF      CBI	0x1B,7
(0095) 	s_ms(500);
     112 EF04      LDI	R16,0xF4
     113 E011      LDI	R17,1
     114 DF61      RCALL	_s_ms
     115 90A9      LD	R10,Y+
     116 9508      RET
_readdata:
  temp                 --> R10
     117 92AA      ST	R10,-Y
(0096) }
(0097) 
(0098) 
(0099) //读数据
(0100) uchar	readdata(void)
(0101) {
(0102) 	uchar temp;
(0103) 	busy();
     118 DF66      RCALL	_busy
(0104) 	s_ms(500);
     119 EF04      LDI	R16,0xF4
     11A E011      LDI	R17,1
     11B DF5A      RCALL	_s_ms
(0105) 	PORTA|=(1<<RS);  //RS=1
     11C 9ADD      SBI	0x1B,5
(0106) 	s_ms(500);
     11D EF04      LDI	R16,0xF4
     11E E011      LDI	R17,1
     11F DF56      RCALL	_s_ms
(0107) 	PORTA|=(1<<RW);  //RW=1
     120 9ADE      SBI	0x1B,6
(0108) 	s_ms(500);
     121 EF04      LDI	R16,0xF4
     122 E011      LDI	R17,1
     123 DF52      RCALL	_s_ms
(0109) 	PORTA|=(1<<EN);  //EN=1
     124 9ADF      SBI	0x1B,7
(0110) 	s_ms(500);
     125 EF04      LDI	R16,0xF4
     126 E011      LDI	R17,1
     127 DF4E      RCALL	_s_ms
(0111) 	DDRD=0x00;       //A端口变输入
     128 2422      CLR	R2
     129 BA21      OUT	0x11,R2
(0112) 	s_ms(500);
     12A EF04      LDI	R16,0xF4
     12B E011      LDI	R17,1
     12C DF49      RCALL	_s_ms
(0113) 	temp = PIND;     //读A端口
     12D B2A0      IN	R10,0x10
(0114) 	s_ms(500);
     12E EF04      LDI	R16,0xF4
     12F E011      LDI	R17,1
     130 DF45      RCALL	_s_ms
(0115) 	DDRD=0xff;       //A端口变输出
     131 EF8F      LDI	R24,0xFF
     132 BB81      OUT	0x11,R24
(0116) 	s_ms(500);
     133 EF04      LDI	R16,0xF4
     134 E011      LDI	R17,1
     135 DF40      RCALL	_s_ms
(0117) 	PORTA&=~(1<<EN); //EN=0
     136 98DF      CBI	0x1B,7
(0118) 	s_ms(500);
     137 EF04      LDI	R16,0xF4
     138 E011      LDI	R17,1
     139 DF3C      RCALL	_s_ms
(0119) 	return temp;	
     13A 2D0A      MOV	R16,R10
     13B 90A9      LD	R10,Y+
     13C 9508      RET
_WriteCGRAM:
  t                    --> R10
  i                    --> R20
  pBuffer              --> R22
  num                  --> R10
     13D 940E 0222 CALL	push_xgsetF00C
     13F 01B9      MOVW	R22,R18
     140 0158      MOVW	R10,R16
(0120) }
(0121) 
(0122) //=================================================
(0123) // 描述: 写LCD内部CGRAM函数
(0124) // 入口: ‘num’要写的数据个数
(0125) //        ‘pbuffer’要写的数据的首地址
(0126) // 出口: 无
(0127) //================================================
(0128) void	WriteCGRAM(uint	num, const uint	*pBuffer)
(0129) {
(0130) 	uint	i,t;
(0131) 	writecom(0x40);
     141 E400      LDI	R16,0x40
     142 DF67      RCALL	_writecom
(0132) 	PORTA|=(1<<RS);
     143 9ADD      SBI	0x1B,5
(0133) 	PORTA&=~(1<<RW);
     144 98DE      CBI	0x1B,6
(0134) 	for(i=num;i!=0;i--)

⌨️ 快捷键说明

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