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

📄 testadc.lst

📁 AVR-MEGA8单片机中使用AD转换的一个例子
💻 LST
📖 第 1 页 / 共 3 页
字号:
__text_start:
__start:
      29 E5CF      LDI	R28,0x5F
      2A E0D4      LDI	R29,4
      2B BFCD      OUT	0x3D,R28
      2C BFDE      OUT	0x3E,R29
      2D 52C0      SUBI	R28,0x20
      2E 40D0      SBCI	R29,0
      2F EA0A      LDI	R16,0xAA
      30 8308      STD	Y+0,R16
      31 2400      CLR	R0
      32 E6EB      LDI	R30,0x6B
      33 E0F0      LDI	R31,0
      34 E010      LDI	R17,0
      35 37E1      CPI	R30,0x71
      36 07F1      CPC	R31,R17
      37 F011      BEQ	0x003A
      38 9201      ST	R0,Z+
      39 CFFB      RJMP	0x0035
      3A 8300      STD	Z+0,R16
      3B E4E6      LDI	R30,0x46
      3C E0F0      LDI	R31,0
      3D E6A0      LDI	R26,0x60
      3E E0B0      LDI	R27,0
      3F E010      LDI	R17,0
      40 E000      LDI	R16,0
      41 BF0B      OUT	0x3B,R16
      42 35E1      CPI	R30,0x51
      43 07F1      CPC	R31,R17
      44 F021      BEQ	0x0049
      45 95C8      LPM
      46 9631      ADIW	R30,1
      47 920D      ST	R0,X+
      48 CFF9      RJMP	0x0042
      49 D1A3      RCALL	_main
_exit:
      4A CFFF      RJMP	_exit
FILE: D:\学习\AVRpro\Mega8程序\TestADC\LCDDrive.C
(0001) //*********************************************
(0002)  //MCU:ATMEL AVR MEGA8 ,晶振频率:8MHz,频率越高,播放Mp3越流畅
(0003)  //LCD:128*64
(0004)  //LCD型号:FYD12864-0402B
(0005)  //制作人:平顶山工学院计算机系,郭猛
(0006) //*********************************************
(0007) # include "iom8v.h"
(0008) # include "macros.h"
(0009) #include <math.h>
(0010) #include "FontModel.h"
(0011) #include "LCDFun.h"
(0012) 
(0013) //LCD驱动用到的变量:
(0014) uchar LCD_COM;		//LCD控制命令字
(0015) uchar LCD_DAT;		//LCD数据
(0016) //绘图方式下的坐标:
(0017) uchar AC_X;			//X坐标
(0018) uchar AC_Y;			//Y坐标
(0019) 
(0020) //延时1ms
(0021) void Delay_1ms(void)
(0022) {	 
(0023) 	 unsigned int j;
(0024) 	 for(j=1;j<(unsigned int)(XTAL*143-2);j++) NOP();
_Delay_1ms:
  j                    --> R16
      4B E001      LDI	R16,1
      4C E010      LDI	R17,0
      4D C003      RJMP	0x0051
      4E 0000      NOP
      4F 5F0F      SUBI	R16,0xFF
      50 4F1F      SBCI	R17,0xFF
      51 E786      LDI	R24,0x76
      52 E094      LDI	R25,4
      53 1708      CP	R16,R24
      54 0719      CPC	R17,R25
      55 F3C0      BCS	0x004E
      56 9508      RET
_Delay:
  i                    --> R10
  j                    --> R20
  n                    --> R12
      57 D22F      RCALL	push_xgset303C
      58 0168      MOVW	R12,R16
(0025) }
(0026) /*******************************************延时子程序**********************************************/
(0027) ///////////////////n的取值最好不要超过500!!!
(0028) void Delay(unsigned int n)
(0029) {
(0030) 	uchar i,j;
(0031) 	for(i=0;i<(uchar)(n/100);i++)
      59 24AA      CLR	R10
      5A C007      RJMP	0x0062
(0032) 	  for(j=0;j<100;j++) Delay_1ms();   //100mS
      5B 2744      CLR	R20
      5C C002      RJMP	0x005F
      5D DFED      RCALL	_Delay_1ms
      5E 9543      INC	R20
      5F 3644      CPI	R20,0x64
      60 F3E0      BCS	0x005D
      61 94A3      INC	R10
      62 E624      LDI	R18,0x64
      63 E030      LDI	R19,0
      64 0186      MOVW	R16,R12
      65 D1C9      RCALL	div16u
      66 16A0      CP	R10,R16
      67 F398      BCS	0x005B
      68 C225      RJMP	pop_xgset303C
(0033) }
(0034) 
(0035) //*************************************LCD背光控制***************************************
(0036) void LCD_AK_Control(uchar OnOff)			//On0FF=1,背光显示开;
(0037) {
(0038) 	if(OnOff) CLRPORT(LCD_AK); else SETPORT(LCD_AK);
_LCD_AK_Control:
  OnOff                --> R16
      69 2300      TST	R16
      6A F011      BEQ	0x006D
      6B 9893      CBI	0x12,3
      6C C001      RJMP	0x006E
      6D 9A93      SBI	0x12,3
      6E 9508      RET
_SendToSID:
  bitcode              --> R20
  i                    --> R10
  dat                  --> R18
  bitNum               --> R16
      6F 92AA      ST	R10,-Y
      70 934A      ST	R20,-Y
(0039) }
(0040) 
(0041) void SendToSID(unsigned char bitNum, unsigned char dat)//向串行数据线发送指定位数一个数据
(0042) {
(0043) 	unsigned char i,bitcode;
(0044) 	for(i=0;i<bitNum;i++)
      71 24AA      CLR	R10
      72 C00B      RJMP	0x007E
(0045) 	{
(0046) 	 	bitcode=dat & 0x80;
      73 2F42      MOV	R20,R18
      74 7840      ANDI	R20,0x80
(0047) 		if(bitcode!=0) SETPORT(SID); else CLRPORT(SID); //SID = dat & 0x80;
      75 F011      BEQ	0x0078
      76 9A96      SBI	0x12,6
      77 C001      RJMP	0x0079
      78 9896      CBI	0x12,6
(0048) 		dat = dat << 1;
      79 0F22      LSL	R18
(0049) 		CLRPORT(SCLK); 	  	 	//SCLK = 0;
      7A 9897      CBI	0x12,7
(0050) 		SETPORT(SCLK);	 		//SCLK = 1;
      7B 9A97      SBI	0x12,7
(0051) 		CLRPORT(SCLK);			//SCLK = 0; 
      7C 9897      CBI	0x12,7
      7D 94A3      INC	R10
      7E 16A0      CP	R10,R16
      7F F398      BCS	0x0073
      80 9149      LD	R20,Y+
      81 90A9      LD	R10,Y+
      82 9508      RET
_Write_LCD_Com:
  SynCode              --> R20
      83 934A      ST	R20,-Y
(0052) 	}
(0053) }
(0054) 
(0055) //*************************************写入LCD控制字******************************
(0056) void Write_LCD_Com(void)						//对LCD写入控制命令
(0057) {
(0058) 	//	SynCode为同步码
(0059) 	unsigned char SynCode;
(0060) 	CLRPORT(CS);	//CS=0;
      84 9895      CBI	0x12,5
(0061) 	SETPORT(CS);	//CS=1;
      85 9A95      SBI	0x12,5
(0062) 
(0063) 	SynCode = 0xFF;	 		 	//同步码
      86 EF4F      LDI	R20,0xFF
(0064) 	SendToSID(5,SynCode);
      87 2F24      MOV	R18,R20
      88 E005      LDI	R16,5
      89 DFE5      RCALL	_SendToSID
(0065) 
(0066) 	SynCode = 0x00;	 		 	//写入代码RW,RS,0,3位代码
      8A 2744      CLR	R20
(0067) 	SendToSID(3,SynCode);
      8B 2F24      MOV	R18,R20
      8C E003      LDI	R16,3
      8D DFE1      RCALL	_SendToSID
(0068) 
(0069) 	SynCode = LCD_COM & 0xF0;	//写入代码COM数据的高四位 要发送的数据格式是XXXX0000
      8E 9140 006E LDS	R20,LCD_COM
      90 7F40      ANDI	R20,0xF0
(0070) 	SendToSID(8,SynCode);
      91 2F24      MOV	R18,R20
      92 E008      LDI	R16,0x8
      93 DFDB      RCALL	_SendToSID
(0071) 
(0072) 	SynCode = LCD_COM & 0x0F;	//写入代码COM数据的低四位	0000XXXX
      94 9140 006E LDS	R20,LCD_COM
      96 704F      ANDI	R20,0xF
(0073) 	SynCode = SynCode<<4;    	//要发送的数据格式是XXXX0000
      97 2F84      MOV	R24,R20
      98 708F      ANDI	R24,0xF
      99 9582      SWAP	R24
      9A 2F48      MOV	R20,R24
(0074) 	SendToSID(8,SynCode);
      9B 2F28      MOV	R18,R24
      9C E008      LDI	R16,0x8
      9D DFD1      RCALL	_SendToSID
(0075) 	Delay_1ms() ;	//必要的延时
      9E DFAC      RCALL	_Delay_1ms
      9F 9149      LD	R20,Y+
      A0 9508      RET
_Write_LCD_Data:
  bitcode              --> R10
  iSynCode             --> R22
  SynCode              --> R20
      A1 D1D7      RCALL	push_xgsetF00C
(0076) }
(0077) 
(0078) //*************************************写入LCD数据**********************************
(0079) void Write_LCD_Data(void)						//对LCD写入8位数据
(0080) {
(0081) 	//	iSynCode为同步码计数器,同步码为5位,	SynCode为同步码
(0082) 	unsigned char iSynCode,SynCode;
(0083) 	uchar bitcode;
(0084) 	CLRPORT(CS);	//CS=0;
      A2 9895      CBI	0x12,5
(0085) 	SETPORT(CS);	//CS=1;
      A3 9A95      SBI	0x12,5
(0086) 
(0087) 	SynCode = 0xFF;	 //同步码
      A4 EF4F      LDI	R20,0xFF
(0088) 	SendToSID(5,SynCode);
      A5 2F24      MOV	R18,R20
      A6 E005      LDI	R16,5
      A7 DFC7      RCALL	_SendToSID
(0089) 	SynCode = 0x40;	 //写入代码RW,RS,0,3位代码
      A8 E440      LDI	R20,0x40
(0090) 	SendToSID(3,SynCode);
      A9 2F24      MOV	R18,R20
      AA E003      LDI	R16,3
      AB DFC3      RCALL	_SendToSID
(0091) 
(0092) 	SynCode = LCD_DAT & 0xF0;	 //写入代码COM数据的高四位 要发送的数据格式是XXXX0000
      AC 9140 006D LDS	R20,LCD_DAT
      AE 7F40      ANDI	R20,0xF0
(0093) 	for(iSynCode=0;iSynCode<8;iSynCode++)
      AF 2766      CLR	R22
      B0 C00D      RJMP	0x00BE
(0094) 	{
(0095) 		bitcode = SynCode & 0x80;
      B1 2F84      MOV	R24,R20
      B2 7880      ANDI	R24,0x80
      B3 2EA8      MOV	R10,R24
(0096) 		if(bitcode!=0) SETPORT(SID); else CLRPORT(SID);//SID = bitcode;	
      B4 2388      TST	R24
      B5 F011      BEQ	0x00B8
      B6 9A96      SBI	0x12,6
      B7 C001      RJMP	0x00B9
      B8 9896      CBI	0x12,6
(0097) 		SynCode = SynCode << 1;
      B9 0F44      LSL	R20
(0098) 		CLRPORT(SCLK); 	  	 	//SCLK = 0;
      BA 9897      CBI	0x12,7
(0099) 		SETPORT(SCLK);	 		//SCLK = 1;
      BB 9A97      SBI	0x12,7
(0100) 		CLRPORT(SCLK);			//SCLK = 0; 
      BC 9897      CBI	0x12,7
      BD 9563      INC	R22
      BE 3068      CPI	R22,0x8
      BF F388      BCS	0x00B1
(0101) 		
(0102) 	}
(0103) 	SynCode = LCD_DAT & 0x0F;	 //写入代码COM数据的低四位	0000XXXX
      C0 9140 006D LDS	R20,LCD_DAT
      C2 704F      ANDI	R20,0xF
(0104) 	SynCode = SynCode<<4;    //要发送的数据格式是XXXX0000
      C3 2F84      MOV	R24,R20
      C4 708F      ANDI	R24,0xF
      C5 9582      SWAP	R24
      C6 2F48      MOV	R20,R24
(0105) 	for(iSynCode=0;iSynCode<8;iSynCode++)
      C7 2766      CLR	R22
      C8 C00D      RJMP	0x00D6
(0106) 	{
(0107) 		bitcode = SynCode & 0x80;
      C9 2F84      MOV	R24,R20
      CA 7880      ANDI	R24,0x80
      CB 2EA8      MOV	R10,R24
(0108) 		if(bitcode!=0) SETPORT(SID); else CLRPORT(SID);//SID = bitcode;	
      CC 2388      TST	R24
      CD F011      BEQ	0x00D0
      CE 9A96      SBI	0x12,6
      CF C001      RJMP	0x00D1
      D0 9896      CBI	0x12,6
(0109) 		SynCode = SynCode << 1;
      D1 0F44      LSL	R20
(0110) 		CLRPORT(SCLK); 	  	 	//SCLK = 0;
      D2 9897      CBI	0x12,7
(0111) 		SETPORT(SCLK);	 		//SCLK = 1;
      D3 9A97      SBI	0x12,7
(0112) 		CLRPORT(SCLK);			//SCLK = 0; 
      D4 9897      CBI	0x12,7
      D5 9563      INC	R22
      D6 3068      CPI	R22,0x8
      D7 F388      BCS	0x00C9
(0113) 	}
(0114) 	Delay_1ms();
      D8 DF72      RCALL	_Delay_1ms
      D9 C1A6      RJMP	pop_xgsetF00C
(0115) }
(0116) 
(0117) //*************************************LCD屏幕初始化**************************************
(0118) //LCD接口:
(0119) //CS    <==>PD5;
(0120) //SID   <==>PD6;
(0121) //SCLK  <==>PD7;
(0122) //LCD_AK<==>PD3;		//背光控制,=0时打开背光
(0123) void LCD_Ini(void)				//初始化,并进入文本模式				
(0124) {
(0125) 	//LCD端口初始化,将PD7~PD5端口设置为输出方式
(0126) 	DDRD|=0xE0;
_LCD_Ini:
      DA B381      IN	R24,0x11
      DB 6E80      ORI	R24,0xE0
      DC BB81      OUT	0x11,R24
(0127) 	_NOP();
      DD 0000      NOP
(0128) 
(0129) 	LCD_COM =0x30;//功能设置为8BIT控制界面,基本指令集

⌨️ 快捷键说明

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