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

📄 ad.lst

📁 基于ATMEGA16的AD转换的C程序源代码
💻 LST
📖 第 1 页 / 共 2 页
字号:
__text_start:
__start:
    002B E5CF      LDI	R28,0x5F
    002C E0D4      LDI	R29,4
    002D BFCD      OUT	0x3D,R28
    002E BFDE      OUT	0x3E,R29
    002F 51C0      SUBI	R28,0x10
    0030 40D0      SBCI	R29,0
    0031 EA0A      LDI	R16,0xAA
    0032 8308      STD	Y+0,R16
    0033 2400      CLR	R0
    0034 E6E1      LDI	R30,0x61
    0035 E0F0      LDI	R31,0
    0036 E010      LDI	R17,0
    0037 36E5      CPI	R30,0x65
    0038 07F1      CPC	R31,R17
    0039 F011      BEQ	0x003C
    003A 9201      ST	R0,Z+
    003B CFFB      RJMP	0x0037
    003C 8300      STD	Z+0,R16
    003D E5E4      LDI	R30,0x54
    003E E0F0      LDI	R31,0
    003F E6A0      LDI	R26,0x60
    0040 E0B0      LDI	R27,0
    0041 E010      LDI	R17,0
    0042 35E5      CPI	R30,0x55
    0043 07F1      CPC	R31,R17
    0044 F021      BEQ	0x0049
    0045 95C8      LPM
    0046 9631      ADIW	R30,1
    0047 920D      ST	R0,X+
    0048 CFF9      RJMP	0x0042
    0049 940E014F  CALL	_main
_exit:
    004B CFFF      RJMP	_exit
_delay:
  i                    --> R20
  n                    --> R16
    004C 940E017B  CALL	push_gset1
FILE: H:\bbi项目源程序\AD转换\adc_16\lcd.h
(0001) 
(0002) unsigned char ADtmp,ADbz=0;
(0003) #define LCD_DATAL PORTA&=~BIT(1)
(0004) #define LCD_DATAH PORTA|=BIT(1) 
(0005) #define LCD_CLKL PORTA&=~BIT(3)
(0006) #define LCD_CLKH PORTA|=BIT(3)
(0007) void delay(unsigned char n)
(0008) {	 
(0009) 	 unsigned char i;
(0010)  	 for(i=0;i<n;i++)                //延时
    004E 2744      CLR	R20
    004F C002      RJMP	0x0052
(0011) 	 {asm("nop");}
    0050 0000      NOP
    0051 9543      INC	R20
    0052 1740      CP	R20,R16
    0053 F3E0      BCS	0x0050
    0054 940E017E  CALL	pop_gset1
    0056 9508      RET
_lcd_out:
  s                    --> Y+1
  i                    --> R20
  send_byte            --> R22
    0057 940E0179  CALL	push_gset2
    0059 2F60      MOV	R22,R16
(0012) }
(0013) //*************************************************************************
(0014) 
(0015) //***************************************************************************
(0016) void lcd_out(unsigned char send_byte)
(0017) {    
(0018)     unsigned char i,s;
(0019)  	for (i=0;i<8;i++)
    005A 2744      CLR	R20
    005B C009      RJMP	0x0065
(0020) 	{
(0021) 	 if((send_byte&0x80)==0)
    005C FD67      SBRC	R22,7
    005D C002      RJMP	0x0060
(0022) 	 {
(0023) 	     LCD_DATAL;
    005E 98D9      CBI	0x1B,1
(0024) 	 }
    005F C001      RJMP	0x0061
(0025) 	 else
(0026) 	 {
(0027) 	     LCD_DATAH;
    0060 9AD9      SBI	0x1B,1
(0028) 	 }      //送数据
(0029) 	 LCD_CLKL;
    0061 98DB      CBI	0x1B,3
(0030) 	 LCD_CLKH;
    0062 9ADB      SBI	0x1B,3
(0031) 	 send_byte=send_byte<<1;
    0063 0F66      LSL	R22
    0064 9543      INC	R20
    0065 3048      CPI	R20,0x8
    0066 F3A8      BCS	0x005C
(0032) 	}
(0033) 	delay(256);
    0067 E000      LDI	R16,0
    0068 DFE3      RCALL	_delay
    0069 940E016D  CALL	pop_gset2
    006B 9508      RET
_WR_dat:
  s                    --> R20
  dat                  --> R22
    006C 940E0179  CALL	push_gset2
    006E 2F60      MOV	R22,R16
(0034) }
(0035) //***************************************************************************
(0036) 
(0037) void WR_dat(unsigned char dat)
(0038) {
(0039)      unsigned char s;
(0040) 	 s=dat&0xf0;
    006F 2F46      MOV	R20,R22
    0070 7F40      ANDI	R20,0xF0
(0041) 	lcd_out(0xfa);
    0071 EF0A      LDI	R16,0xFA
    0072 DFE4      RCALL	_lcd_out
(0042) 	 lcd_out(s);
    0073 2F04      MOV	R16,R20
    0074 DFE2      RCALL	_lcd_out
(0043) 	 s=dat&0x0f;
    0075 2F46      MOV	R20,R22
    0076 704F      ANDI	R20,0xF
(0044) 	 s<<=4;
    0077 2F84      MOV	R24,R20
    0078 708F      ANDI	R24,0xF
    0079 9582      SWAP	R24
    007A 2F48      MOV	R20,R24
(0045) 	 lcd_out(s);
    007B 2F08      MOV	R16,R24
    007C DFDA      RCALL	_lcd_out
    007D 940E016D  CALL	pop_gset2
    007F 9508      RET
_WR_control:
  s                    --> R20
  dat                  --> R22
    0080 940E0179  CALL	push_gset2
    0082 2F60      MOV	R22,R16
(0046) }
(0047) //**************************************************************************
(0048) void WR_control(unsigned char dat)
(0049) {
(0050)      unsigned char s;
(0051) 	 s=dat&0xf0;
    0083 2F46      MOV	R20,R22
    0084 7F40      ANDI	R20,0xF0
(0052) 	 lcd_out(0xf8);
    0085 EF08      LDI	R16,0xF8
    0086 DFD0      RCALL	_lcd_out
(0053) 	 lcd_out(s);
    0087 2F04      MOV	R16,R20
    0088 DFCE      RCALL	_lcd_out
(0054) 	 s=dat&0x0f;
    0089 2F46      MOV	R20,R22
    008A 704F      ANDI	R20,0xF
(0055) 	 s<<=4;
    008B 2F84      MOV	R24,R20
    008C 708F      ANDI	R24,0xF
    008D 9582      SWAP	R24
    008E 2F48      MOV	R20,R24
(0056) 	 lcd_out(s);
    008F 2F08      MOV	R16,R24
    0090 DFC6      RCALL	_lcd_out
    0091 940E016D  CALL	pop_gset2
    0093 9508      RET
(0057) }
(0058) //**************************************************************************
(0059) void lcd_control()
(0060) {
(0061) 	WR_control(0x30);
_lcd_control:
    0094 E300      LDI	R16,0x30
    0095 DFEA      RCALL	_WR_control
(0062) 	WR_control(0x0c);
    0096 E00C      LDI	R16,0xC
    0097 DFE8      RCALL	_WR_control
    0098 9508      RET
_lcd_clear:
  i                    --> R20
    0099 940E017B  CALL	push_gset1
(0063) }
(0064) //**************************************************************************
(0065) void lcd_clear()
(0066) {
(0067)   int i;
(0068)   WR_control(0x01);
    009B E001      LDI	R16,1
    009C DFE3      RCALL	_WR_control
(0069)   for(i=0;i<5000;i++)	//	延时5ms
    009D 2744      CLR	R20
    009E 2755      CLR	R21
(0070) 	{
(0071) 		asm("nop");
    009F 0000      NOP
(0072) 		asm("nop");
    00A0 0000      NOP
    00A1 5F4F      SUBI	R20,0xFF
    00A2 4F5F      SBCI	R21,0xFF
    00A3 3848      CPI	R20,0x88
    00A4 E1E3      LDI	R30,0x13
    00A5 075E      CPC	R21,R30
    00A6 F3C4      BLT	0x009F
    00A7 940E017E  CALL	pop_gset1
    00A9 9508      RET
_LCD_address:
  address              --> R20
  y                    --> R22
  x                    --> R20
    00AA 940E0179  CALL	push_gset2
    00AC 2F62      MOV	R22,R18
    00AD 2F40      MOV	R20,R16
(0073) 	} 
(0074) }
(0075) /*******************************************************/
(0076) /******   函数名称: LCD_set_xy()                  ******/
(0077) /******   功    能: 设置LCD显示坐标               ******/
(0078) /******   参    数: 显示字符串的位置,X:0-15,Y:0-1*****/
(0079) /******   返回值  : 无                            ******/
(0080) /*******************************************************/
(0081) void LCD_address( unsigned char x, unsigned char y )
(0082) {
(0083)  	unsigned char address;
(0084) 	switch(x)
    00AE 2755      CLR	R21
    00AF 3040      CPI	R20,0
    00B0 0745      CPC	R20,R21
    00B1 F069      BEQ	0x00BF
    00B2 3041      CPI	R20,1
    00B3 E0E0      LDI	R30,0
    00B4 075E      CPC	R21,R30
    00B5 F061      BEQ	0x00C2
    00B6 3042      CPI	R20,2
    00B7 E0E0      LDI	R30,0
    00B8 075E      CPC	R21,R30
    00B9 F059      BEQ	0x00C5
    00BA 3043      CPI	R20,3
    00BB E0E0      LDI	R30,0
    00BC 075E      CPC	R21,R30
    00BD F051      BEQ	0x00C8
    00BE C00C      RJMP	0x00CB
(0085) 	{
(0086) 	 	case 0:
(0087) 			   address = 0x80 + y;		   //计算显示地址
    00BF 2F46      MOV	R20,R22
    00C0 5840      SUBI	R20,0x80
(0088) 			   break;
    00C1 C00B      RJMP	0x00CD
(0089) 		case 1:
(0090) 			   address = 0x90 + y;		   //计算显示地址
    00C2 2F46      MOV	R20,R22
    00C3 5740      SUBI	R20,0x70
(0091) 			   break;
    00C4 C008      RJMP	0x00CD
(0092) 		case 2:
(0093) 			   address = 0x88 + y;		   //计算显示地址
    00C5 2F46      MOV	R20,R22
    00C6 5748      SUBI	R20,0x78
(0094) 			   break;
    00C7 C005      RJMP	0x00CD
(0095) 		case 3:
(0096) 			   address = 0x98 + y;		   //计算显示地址
    00C8 2F46      MOV	R20,R22
    00C9 5648      SUBI	R20,0x68
(0097) 			   break;
    00CA C002      RJMP	0x00CD
(0098) 		default:address = 0x80 + y;
    00CB 2F46      MOV	R20,R22
    00CC 5840      SUBI	R20,0x80
(0099) 	}
(0100) 	WR_control( address);	  	   	   		   //写地址命令
    00CD 2F04      MOV	R16,R20
    00CE DFB1      RCALL	_WR_control
    00CF 940E016D  CALL	pop_gset2
    00D1 9508      RET
_LCD_Write_string:
  s                    --> R20
  Y                    --> R10
  X                    --> R22
    00D2 940E0177  CALL	push_gset3
    00D4 2EA2      MOV	R10,R18
    00D5 2F60      MOV	R22,R16
    00D6 814E      LDD	R20,Y+6
    00D7 815F      LDD	R21,Y+7
(0101) }
(0102) //**************************************************************************
(0103) /*******************************************************/
(0104) /******   函数名称: LCD_write_string()            ******/
(0105) /******   功    能: 中英文字符串显示函数          ******/
(0106) /******   参    数: *s--英文字符串指针            ******/
(0107) /******             X、Y--显示字符串的位置        ******/
(0108) /******   返回值  : 无                            ******/
(0109) /*******************************************************/
(0110) void LCD_Write_string(unsigned char X,unsigned char Y,unsigned char *s)
(0111) {
(0112)     
(0113)  	LCD_address( X, Y );		   				//写显示地址
    00D8 2D2A      MOV	R18,R10
    00D9 2F06      MOV	R16,R22
    00DA DFCF      RCALL	_LCD_address
    00DB C005      RJMP	0x00E1
(0114)     while (*s) 	   	 						//是否到字符串尾
(0115)     {
(0116)      	WR_dat (*s );						//写显示数据
    00DC 01FA      MOVW	R30,R20
    00DD 8100      LDD	R16,Z+0
    00DE DF8D      RCALL	_WR_dat
(0117) 		s ++;								//字符串地址加1
    00DF 5F4F      SUBI	R20,0xFF
    00E0 4F5F      SBCI	R21,0xFF
    00E1 01FA      MOVW	R30,R20
    00E2 8020      LDD	R2,Z+0
    00E3 2022      TST	R2
    00E4 F7B9      BNE	0x00DC
    00E5 940E0170  CALL	pop_gset3
    00E7 9508      RET
(0118)  	}
(0119) }
(0120) 

⌨️ 快捷键说明

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