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

📄 ad.lst

📁 atmega16单片机AD转换源代码
💻 LST
📖 第 1 页 / 共 2 页
字号:
(0241) /*****************************************内部函数*****************************************/
(0242) 
(0243) //长时延函数
(0244) extern void long_delay(void)
(0245) {
(0246) 	unsigned char i;
(0247) 	for(i=0;i<80;i++);
_long_delay:
  i                    --> R16
    009A 2700      CLR	R16
    009B C001      RJMP	0x009D
    009C 9503      INC	R16
    009D 3500      CPI	R16,0x50
    009E F3E8      BCS	0x009C
(0248) }	
    009F 9508      RET
(0249) 
(0250) //短时延函数					
(0251) extern void short_delay(void)
(0252) {
(0253) 	unsigned char i;
(0254) 	for(i=0;i<46;i++);
_short_delay:
  i                    --> R16
    00A0 2700      CLR	R16
    00A1 C001      RJMP	0x00A3
    00A2 9503      INC	R16
    00A3 320E      CPI	R16,0x2E
    00A4 F3E8      BCS	0x00A2
(0255) }
    00A5 9508      RET
_delay10ms:
  i                    --> R20
  j                    --> R22
  k                    --> R10
  count                --> R16
    00A6 940E046A  CALL	push_gset3
(0256) 				
(0257) //10ms时延函数
(0258) void delay10ms(unsigned int count)
(0259) {
(0260) 	unsigned char i,j,k;
(0261)  	for (i=0;i<count;i++)
    00A8 2744      CLR	R20
    00A9 C00C      RJMP	0x00B6
(0262)       		for(j=0;j<100;j++)
    00AA 2766      CLR	R22
    00AB C007      RJMP	0x00B3
(0263)       			for(k=0;k<100;k++);
    00AC 24AA      CLR	R10
    00AD C001      RJMP	0x00AF
    00AE 94A3      INC	R10
    00AF 2D8A      MOV	R24,R10
    00B0 3684      CPI	R24,0x64
    00B1 F3E0      BCS	0x00AE
    00B2 9563      INC	R22
    00B3 3664      CPI	R22,0x64
    00B4 F3B8      BCS	0x00AC
    00B5 9543      INC	R20
    00B6 2E24      MOV	R2,R20
    00B7 2433      CLR	R3
    00B8 1620      CP	R2,R16
    00B9 0631      CPC	R3,R17
    00BA F378      BCS	0x00AA
(0264) }	
    00BB 940E0449  CALL	pop_gset3
    00BD 9508      RET
_send_byte:
  i                    --> R20
  out_byte             --> R22
    00BE 940E0466  CALL	push_gset2
    00C0 2F60      MOV	R22,R16
(0265) 	
(0266) /****************** **********************
(0267) 函数名:HD7279字节发送函数	
(0268) 功  能:HD7279发送一个字节
(0269) 输  入:一个字节
(0270) 返  回:无
(0271) 备  注:HD7279硬件函数
(0272) ******************************************/
(0273) extern void send_byte(unsigned char out_byte)
(0274) {	
(0275) 	unsigned char i;
(0276) 	
(0277) 	WR7279&=~clk7279;		//clk7279=0;
    00C1 98AA      CBI	0x15,2
(0278) 	WR7279&=~cs7279;		//cs7279=0
    00C2 98A9      CBI	0x15,1
(0279) 	long_delay();
    00C3 DFD6      RCALL	_long_delay
(0280) 	
(0281) 	for(i=0;i<8;i++)
    00C4 2744      CLR	R20
    00C5 C00B      RJMP	0x00D1
(0282) 	{
(0283) 		if(out_byte&0x80)
    00C6 FF67      SBRS	R22,7
    00C7 C002      RJMP	0x00CA
(0284) 		{
(0285) 			WR7279|=dat7279;	//dat7279=1;
    00C8 9AAB      SBI	0x15,3
(0286) 		 }
    00C9 C001      RJMP	0x00CB
(0287) 		 else
(0288) 		 {
(0289) 		 	WR7279&=~dat7279;	//dat7279=0;
    00CA 98AB      CBI	0x15,3
(0290) 		 }
(0291) 		 WR7279|=clk7279;		//clk7279=1;
    00CB 9AAA      SBI	0x15,2
(0292) 		 short_delay();
    00CC DFD3      RCALL	_short_delay
(0293) 		 WR7279&=~clk7279;		//clk7279=0;
    00CD 98AA      CBI	0x15,2
(0294) 		 short_delay();
    00CE DFD1      RCALL	_short_delay
(0295) 		 out_byte=out_byte<<1;
    00CF 0F66      LSL	R22
    00D0 9543      INC	R20
    00D1 3048      CPI	R20,0x8
    00D2 F398      BCS	0x00C6
(0296) 	 }
(0297) 	 WR7279|=dat7279;			//dat7279=1; 	 
    00D3 9AAB      SBI	0x15,3
(0298) }
    00D4 940E0446  CALL	pop_gset2
    00D6 9508      RET
_receive_byte:
  i                    --> R20
  in_byte              --> R22
    00D7 940E0466  CALL	push_gset2
(0299) 	
(0300) /****************** **********************
(0301) 函数名:HD7279字节接收函数	
(0302) 功  能:从HD7279接收一个字节
(0303) 输  入:无
(0304) 返  回:一个字节
(0305) 备  注:HD7279硬件函数
(0306) ******************************************/
(0307) extern unsigned char receive_byte(void)
(0308) {
(0309) 	unsigned char i,in_byte;
(0310) 	
(0311) 	WR7279|=clk7279;		//clk7279=1;
    00D9 9AAA      SBI	0x15,2
(0312) 	
(0313) 	DR7279&=~dat7279;			//改dat7279为输入
    00DA 98A3      CBI	0x14,3
(0314) 	
(0315) 	long_delay();
    00DB DFBE      RCALL	_long_delay
(0316) 	
(0317) 	for(i=0;i<8;i++)
    00DC 2744      CLR	R20
    00DD C009      RJMP	0x00E7
(0318) 	{	
(0319) 		WR7279|=clk7279;		//clk7279=1;
    00DE 9AAA      SBI	0x15,2
(0320) 		short_delay();
    00DF DFC0      RCALL	_short_delay
(0321) 		in_byte=in_byte<<1;
    00E0 0F66      LSL	R22
(0322) 		if(RD7279&dat7279)
    00E1 9B9B      SBIS	0x13,3
    00E2 C001      RJMP	0x00E4
(0323) 		{
(0324) 			in_byte=in_byte|0x01;
    00E3 6061      ORI	R22,1
(0325) 		}
(0326) 		WR7279&=~clk7279;		//clk7279=0;
    00E4 98AA      CBI	0x15,2
(0327) 		short_delay();
    00E5 DFBA      RCALL	_short_delay
    00E6 9543      INC	R20
    00E7 3048      CPI	R20,0x8
    00E8 F3A8      BCS	0x00DE
(0328) 	
(0329) 	}
(0330) 	DR7279|=dat7279;			//dat7279还原为输出口
    00E9 9AA3      SBI	0x14,3
(0331) 	return(in_byte);
    00EA 2F06      MOV	R16,R22
    00EB 940E0446  CALL	pop_gset2
    00ED 9508      RET
_num_change7279:
  X                    --> R20
    00EE 940E044F  CALL	push_gset1
    00F0 2F40      MOV	R20,R16
(0332) }
(0333) 
(0334) /****************** **********************
(0335) 函数名:HD7279按键等待接收函数	
(0336) 功  能:当完成一次按键,返回键值
(0337) 输  入:无
(0338) 返  回:键盘键值
(0339) 备  注:HD7279的控制函数
(0340) ******************************************/
(0341) extern unsigned char  num_change7279 (unsigned char X)
(0342)  {
(0343)    	switch (X)
    00F1 2755      CLR	R21
    00F2 3040      CPI	R20,0
    00F3 E0E0      LDI	R30,0
    00F4 075E      CPC	R21,R30
    00F5 F40C      BGE	0x00F7
    00F6 C034      RJMP	0x012B
    00F7 E18B      LDI	R24,0x1B
    00F8 E090      LDI	R25,0
    00F9 1784      CP	R24,R20
    00FA 0795      CPC	R25,R21
    00FB F40C      BGE	0x00FD
    00FC C02E      RJMP	0x012B
    00FD E002      LDI	R16,2
    00FE E010      LDI	R17,0
    00FF 019A      MOVW	R18,R20
    0100 940E0406  CALL	empy16s
    0102 01F8      MOVW	R30,R16
    0103 E488      LDI	R24,0x48
    0104 E090      LDI	R25,0
    0105 0FE8      ADD	R30,R24
    0106 1FF9      ADC	R31,R25
    0107 9005      LPM	R0,Z+
    0108 9014      LPM	R1,0(Z)
    0109 01F0      MOVW	R30,R0
    010A 9409      IJMP
(0344) 	{
(0345) 		case  ONE 	: return 0X01;
    010B E001      LDI	R16,1
    010C C01F      RJMP	0x012C
(0346) 		case  TWO 	: return 0X02;
    010D E002      LDI	R16,2
    010E C01D      RJMP	0x012C
(0347) 		case  THREE 	: return 0X03;
    010F E003      LDI	R16,3
    0110 C01B      RJMP	0x012C
(0348) 		case  FOUR 	: return 0X04;
    0111 E004      LDI	R16,4
    0112 C019      RJMP	0x012C
(0349) 		case  FIVE 	: return 0X05;
    0113 E005      LDI	R16,5
    0114 C017      RJMP	0x012C
(0350) 		case  SIX  	: return 0X06;
    0115 E006      LDI	R16,6
    0116 C015      RJMP	0x012C
(0351) 		case  SEVEN 	: return 0X07;
    0117 E007      LDI	R16,7
    0118 C013      RJMP	0x012C
(0352) 		case  EIGHT 	: return 0X08;
    0119 E008      LDI	R16,0x8
    011A C011      RJMP	0x012C
(0353) 		case  NINE 	: return 0X09;
    011B E009      LDI	R16,0x9
    011C C00F      RJMP	0x012C
(0354) 		case  ZERO 	: return 0X00;
    011D 2700      CLR	R16
    011E C00D      RJMP	0x012C
(0355) 		case  AAAA  	: return 0x0A;
    011F E00A      LDI	R16,0xA
    0120 C00B      RJMP	0x012C
(0356) 		case  BBBB 	: return 0x0B;
    0121 E00B      LDI	R16,0xB
    0122 C009      RJMP	0x012C
(0357) 		case  CCCC 	: return 0x0C;
    0123 E00C      LDI	R16,0xC
    0124 C007      RJMP	0x012C
(0358) 		case  DDDD 	: return 0x0D;
    0125 E00D      LDI	R16,0xD
    0126 C005      RJMP	0x012C
(0359) 		case  EEEE 	: return 0x0E;
    0127 E00E      LDI	R16,0xE
    0128 C003      RJMP	0x012C
(0360) 		case  FFFF 	: return 0x0F;
    0129 E00F      LDI	R16,0xF
    012A C001      RJMP	0x012C
(0361) 		default 	: return 0xFF;
    012B EF0F      LDI	R16,0xFF
    012C 940E0452  CALL	pop_gset1
    012E 9508      RET
_dis_data:
  temp_char            --> R10
  i                    --> R12
  num                  --> Y+10
  dig_end              --> R14
  dig_start            --> R10
    012F 940E0472  CALL	push_gset5
    0131 2EE2      MOV	R14,R18
    0132 2EA0      MOV	R10,R16
(0362) 	}
(0363) }
(0364) 
(0365) 
(0366) 		
(0367) 
(0368) 
(0369) /****************** HD7279测试函数*************************
(0370) 
(0371) //	作用:测试函数
(0372) extern void test_7279(void)
(0373) {
(0374) 	unsigned long wait_cnter;
(0375) 	unsigned long tmr,j,k;
(0376) 	unsigned char key7279_number;
(0377) 	init_7279();
(0378) 	while(1)
(0379) 	{
(0380) 		for(tmr=0;tmr<0xf000;tmr++);	//上电延时
(0381) 		send_byte(CMD_RESET);		//复位HD7279
(0382) 
(0383) 		//测试指令演示
(0384) 
(0385) 		send_byte(CMD_TEST);
(0386) 		for(j=0;j<3;j++)		//延时约3秒
(0387) 		{	
(0388) 			delay10ms(100);
(0389) 		}
(0390) 		send_byte(CMD_RESET);		//清除显示
(0391) 		
(0392) 	
(0393) 		{	
(0394) 		 write7279(DECODE0,0x80);
(0395) 		 write7279(DECODE0+1,0x81);
(0396) 		 write7279(DECODE0+2,0x82);
(0397) 		 write7279(DECODE0+3,0x83);
(0398) 		 write7279(DECODE0+4,0x84);
(0399) 		 write7279(DECODE0+5,0x85);
(0400) 		 write7279(DECODE0+6,0x86);
(0401) 		 write7279(DECODE0+7,0x87);
(0402) 		 }
(0403) 		 
(0404) 		delay10ms(200);
(0405) 
(0406) //闪烁指令及键盘接口测试,将用户按键的键码显示出来,如果10秒内无按键或按S0键即进入下一步演示
(0407) 		wait_cnter=0;
(0408) 		key7279_number=0xff;
(0409) 		write7279(BLINKCTL,0xfc);			//第1

⌨️ 快捷键说明

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