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

📄 pcat.lst

📁 双龙AVR-MEGA128开发板的配套源码
💻 LST
📖 第 1 页 / 共 3 页
字号:
(0147) 0x00,0x00,0x00,0x00};
(0148) unsigned int adc1;
(0149) unsigned int adc2;
(0150) unsigned char adcval[6];
(0151) unsigned char keytime;
(0152) /*      AD转换程序     */
(0153) #pragma interrupt_handler adc_isr:IT_ADC
(0154) void adc_isr(void)
(0155)    {
(0156)     unsigned int temp=0;
    0675 2700      CLR	R16
    0676 2711      CLR	R17
    0677 C002      RJMP	0x067A
(0157) 	while(temp<6)
(0158) 	    temp++;
    0678 5F0F      SUBI	R16,0xFF
    0679 4F1F      SBCI	R17,0xFF
    067A 3006      CPI	R16,6
    067B E0E0      LDI	R30,0
    067C 071E      CPC	R17,R30
    067D F3D0      BCS	0x0678
(0159) 	temp=ADC;
    067E B104      IN	R16,P04
    067F B115      IN	R17,P05
(0160)     switch (ADMUX)
    0680 B127      IN	R18,P07
    0681 2733      CLR	R19
    0682 3020      CPI	R18,0
    0683 0723      CPC	R18,R19
    0684 F029      BEQ	0x068A
    0685 3021      CPI	R18,1
    0686 E0E0      LDI	R30,0
    0687 073E      CPC	R19,R30
    0688 F041      BEQ	0x0691
    0689 C00E      RJMP	0x0698
(0161) 	    {
(0162) 	     case 0x00:
(0163) 		     {
(0164)               adc1=temp;
    068A 93100133  STS	R17,_adc1+1
    068C 93000132  STS	R16,_adc1
(0165) 			  ADMUX=1;
    068E E081      LDI	R24,1
    068F B987      OUT	P07,R24
(0166) 			  break;
    0690 C009      RJMP	0x069A
(0167) 			 }
(0168) 	     case 0x01:
(0169) 		     {
(0170)               adc2=temp;
    0691 93100131  STS	R17,_adc2+1
    0693 93000130  STS	R16,_adc2
(0171) 			  ADMUX=0;
    0695 2422      CLR	R2
    0696 B827      OUT	P07,R2
(0172) 			  break;
    0697 C002      RJMP	0x069A
(0173) 			 }
(0174) 	     default :
(0175) 		     {
(0176) 			  ADMUX=0;
    0698 2422      CLR	R2
    0699 B827      OUT	P07,R2
(0177) 			 }			 
(0178) 		 }
(0179)    	ADCSR|=0x40;	 			 	 		 
    069A 9A36      SBI	P06,6
(0180)    } 
    069B 9029      LD	R2,Y+
    069C BE2F      OUT	P3F,R2
    069D 91E9      LD	R30,Y+
    069E 9189      LD	R24,Y+
    069F 9139      LD	R19,Y+
    06A0 9129      LD	R18,Y+
    06A1 9119      LD	R17,Y+
    06A2 9109      LD	R16,Y+
    06A3 9029      LD	R2,Y+
    06A4 9518      RETI
_adctoasc:
  char_p               --> R10
  i                    --> R12
  temp                 --> R14
  adc                  --> R10
    06A5 D671      RCALL	push_gset5
    06A6 0000      NOP
    06A7 2EA0      MOV	R10,R16
    06A8 2EB1      MOV	R11,R17
(0181) /*     AD结果转换成电压     */
(0182) #define vref   473
(0183) unsigned char * adctoasc(unsigned int adc)
(0184)     {
(0185) 	 unsigned int temp;
(0186) 	 unsigned char i;
(0187) 	 unsigned char *char_p;
(0188)      temp=(unsigned int)(((unsigned long)((unsigned long)adc*vref))/1024);
    06A9 2C2A      MOV	R2,R10
    06AA 2C3B      MOV	R3,R11
    06AB 2444      CLR	R4
    06AC 2455      CLR	R5
    06AD ED05      LDI	R16,0xD5
    06AE E016      LDI	R17,6
    06AF D677      RCALL	lpm32
    06B0 0000      NOP
    06B1 940E0E33  CALL	0xE33
    06B3 D6BA      RCALL	mpy32u
    06B4 0000      NOP
    06B5 E08A      LDI	R24,0xA
    06B6 E090      LDI	R25,0
    06B7 938A      ST	R24,-Y
    06B8 D67A      RCALL	lsr32
    06B9 0000      NOP
    06BA 2EE0      MOV	R14,R16
    06BB 2EF1      MOV	R15,R17
(0189)      for(i=0;i<3;i++)
    06BC 24CC      CLR	R12
    06BD C019      RJMP	0x06D7
(0190) 	    {
(0191) 		 adcval[3-i]=temp%10+0x30;
    06BE 2C2C      MOV	R2,R12
    06BF 2433      CLR	R3
    06C0 E0E3      LDI	R30,3
    06C1 E0F0      LDI	R31,0
    06C2 19E2      SUB	R30,R2
    06C3 09F3      SBC	R31,R3
    06C4 E28A      LDI	R24,0x2A
    06C5 E091      LDI	R25,1
    06C6 0FE8      ADD	R30,R24
    06C7 1FF9      ADC	R31,R25
    06C8 940E0E1A  CALL	0xE1A
    06CA D5E0      RCALL	mod16u
    06CB 0000      NOP
    06CC 2F80      MOV	R24,R16
    06CD 2F91      MOV	R25,R17
    06CE 96C0      ADIW	R24,0x30
    06CF 8380      STD	R24,0+Z
    06D0 940E0E1A  CALL	0xE1A
(0192) 		 temp=temp/10;
    06D2 D5DA      RCALL	div16u
    06D3 0000      NOP
    06D4 2EE0      MOV	R14,R16
    06D5 2EF1      MOV	R15,R17
(0193) 		}
    06D6 94C3      INC	R12
    06D7 2D8C      MOV	R24,R12
    06D8 3083      CPI	R24,3
    06D9 F320      BCS	0x06BE
(0194) 	 adcval[0]=adcval[1];
    06DA 9020012B  LDS	R2,_adcval+1
    06DC 9220012A  STS	R2,_adcval
(0195) 	 adcval[1]='.';	
    06DE E28E      LDI	R24,0x2E
    06DF 9380012B  STS	R24,_adcval+1
(0196) 	 adcval[4]='V';	
    06E1 E586      LDI	R24,0x56
    06E2 9380012E  STS	R24,0x12E
(0197) 	 adcval[5]=0;	
    06E4 2422      CLR	R2
    06E5 9220012F  STS	R2,0x12F
(0198) 	 char_p=adcval;
    06E7 E28A      LDI	R24,0x2A
    06E8 E091      LDI	R25,1
    06E9 2EA8      MOV	R10,R24
    06EA 2EB9      MOV	R11,R25
(0199) 	 return char_p;
    06EB 2D0A      MOV	R16,R10
    06EC 2D1B      MOV	R17,R11
    06ED D636      RCALL	pop_gset5
    06EE 0000      NOP
    06EF 9508      RET
(0200) 	}
(0201) /*     OCMJ4X8LCD初始化     */
(0202) void ocmj_init(void)
(0203)     {
(0204) 	 MCUCR=0;
_ocmj_init:
    06F0 2422      CLR	R2
    06F1 BE25      OUT	P35,R2
(0205) 	 DDRA=0xff;
    06F2 EF8F      LDI	R24,0xFF
    06F3 BB8A      OUT	P1A,R24
(0206) 	 PORTA=0xff;
    06F4 BB8B      OUT	P1B,R24
(0207) 	 DDRE=0x80;
    06F5 E880      LDI	R24,0x80
    06F6 B982      OUT	P02,R24
(0208) 	 PORTE=0xff;
    06F7 EF8F      LDI	R24,0xFF
    06F8 B983      OUT	P03,R24
(0209) 	 PORTC=0xff; 
    06F9 BB85      OUT	P15,R24
(0210) 	 DDRD=0x00;
    06FA BA21      OUT	P11,R2
(0211) 	 PORTD=0xff;
    06FB BB82      OUT	P12,R24
(0212) 	 clr_reset;//LCD复位
    06FC 98AB      CBI	P15,3
(0213) 	 delay_ms(10);
    06FD E00A      LDI	R16,0xA
    06FE E010      LDI	R17,0
    06FF D3BB      RCALL	_delay_ms
    0700 0000      NOP
(0214) 	 set_reset;
    0701 9AAB      SBI	P15,3
(0215) 	 clr_answer;
    0702 981F      CBI	P03,7
(0216) 	 delay_ms(10);
    0703 E00A      LDI	R16,0xA
    0704 E010      LDI	R17,0
    0705 D3B5      RCALL	_delay_ms
    0706 0000      NOP
(0217) 	 }
    0707 9508      RET
(0218) /*            写数据到LCD        */
(0219) void ocmj_write(unsigned char data)
(0220)     {
(0221) 	 while(ask!=0)
(0222) 	      ;
_ocmj_write:
  data                 --> R16
    0708 990E      SBIC	P01,6
    0709 CFFE      RJMP	_ocmj_write
(0223)      data_port=data;
    070A BB0B      OUT	P1B,R16
(0224)    	 wait;
(0225) 	 set_answer;
    070B 9A1F      SBI	P03,7
(0226) 	 wait;
(0227) 	 while(ask==0)
(0228) 	      ;		  
    070C 9B0E      SBIS	P01,6
    070D CFFE      RJMP	0x070C
(0229) 	 clr_answer; 
    070E 981F      CBI	P03,7
(0230)     }
    070F 9508      RET
_ico_tran:
  j                    --> R20
  i                    --> R22
  ico_p                --> R10
  y                    --> R12
  x                    --> R14
    0710 D606      RCALL	push_gset5
    0711 0000      NOP
    0712 2EC2      MOV	R12,R18
    0713 2EE0      MOV	R14,R16
    0714 84AA      LDD	R10,10+Y
    0715 84BB      LDD	R11,11+Y
(0231) /*         传送32*32ICO点阵数据到LCD       */
(0232) /*         x:0~15(字节为单位)  y:0~64      */
(0233) /*         ico_p:指向图形数据的指针        */	
(0234) void ico_tran(unsigned char x,unsigned char y,const unsigned char *ico_p)
(0235)      {
(0236) 	  unsigned char i,j;
(0237) 	  x+=4;
    0716 2D8E      MOV	R24,R14
    0717 5F8C      SUBI	R24,0xFC
    0718 2EE8      MOV	R14,R24
(0238) 	  for(j=0;j<32;j++)
    0719 2744      CLR	R20
    071A C01B      RJMP	0x0736
(0239) 	     {
(0240) 		  for(i=0;i<4;i++)
    071B 2766      CLR	R22
    071C C012      RJMP	0x072F
(0241) 		    {
(0242) 			 ocmj_write(0xf3);
    071D EF03      LDI	R16,0xF3
    071E DFE9      RCALL	_ocmj_write
(0243) 			 ocmj_write(x);
    071F 2D0E      MOV	R16,R14
    0720 DFE7      RCALL	_ocmj_write
(0244) 			 ocmj_write(y);
    0721 2D0C      MOV	R16,R12
    0722 DFE5      RCALL	_ocmj_write
(0245) 			 ocmj_write(*ico_p);
    0723 2DEA      MOV	R30,R10
    0724 2DFB      MOV	R31,R11
    0725 95C8      LPM
    0726 2D00      MOV	R16,R0
    0727 DFE0      RCALL	_ocmj_write
(0246) 			 ico_p++;
    0728 2D8A      MOV	R24,R10
    0729 2D9B      MOV	R25,R11
    072A 9601      ADIW	R24,1
    072B 2EA8      MOV	R10,R24
    072C 2EB9      MOV	R11,R25
(0247) 			 x++;
    072D 94E3      INC	R14
(0248) 			}
    072E 9563      INC	R22
    072F 3064      CPI	R22,4
    0730 F360      BCS	0x071D
(0249) 		  x-=4;
    0731 2D8E      MOV	R24,R14
    0732 5084      SUBI	R24,4
    0733 2EE8      MOV	R14,R24
(0250) 		  y++;	
    0734 94C3      INC	R12
(0251) 		 }
    0735 9543      INC	R20
    0736 3240      CPI	R20,0x20
    0737 F318      BCS	0x071B
(0252) 	 }
    0738 D5EB      RCALL	pop_gset5
    0739 0000      NOP
    073A 9508      RET
_cls:
  j                    --> R20
  i                    --> R10
  width                --> R12
  high                 --> R22
  y                    --> R14
  x                    --> Y+10
    073B D58B      RCALL	push_arg4
    073C 0000      NOP
    073D D5D9      RCALL	push_gset5
    073E 0000      NOP
    073F 2EE2      MOV	R14,R18
    0740 2EF3      MOV	R15,R19
    0741 856E      LDD	R22,14+Y
    0742 857F      LDD	R23,15+Y
    0743 88C8      LDD	R12,16+Y
    0744 88D9      LDD	R13,17+Y
(0253) /*      清除屏幕区域      */	 
(0254) void cls(unsigned x,unsigned y,unsigned char high,unsigned char width)
(0255)   {
(0256)    unsigned char i,j;
(0257)    x+=2;
    0745 858A      LDD	R24,10+Y
    0746 859B      LDD	R25,11+Y
    0747 9602      ADIW	R24,2
    0748 878A      STD	R24,10+Y
    0749 879B      STD	R25,11+Y
(0258)    for(j=0;j<high;j++)
    074A 2744      CLR	R20
    074B C023      RJMP	0x076F
(0259)       {
(0260)        for(i=0;i<width;i++)
    074C 24AA      CLR	R10
    074D C011      RJMP	0x075F
(0261)           {
(0262)             ocmj_write(0xf0);
    074E EF00      LDI	R16,0xF0
    074F DFB8      RCALL	_ocmj_write
(0263)             ocmj_write(x);
    0750 850A      LDD	R16,10+Y
    0751 851B      LDD	R17,11+Y
    0752 DFB5      RCALL	_ocmj_write
(0264)             ocmj_write(y);
    0753 2D0E      MOV	R16,R14
    0754 DFB3      RCALL	_ocmj_write
(0265)             ocmj_write(55);
    0755 E307      LDI	R16,0x37
    0756 DFB1      RCALL	_ocmj_write
(0266) 			ocmj_write(90);
    0757 E50A      LDI	R16,0x5A
    0758 DFAF      RCALL	_ocmj_write
(0267)             x++;
    0759 858A      LDD	R24,10+Y
    075A 859B      LDD	R25,11+Y
    075B 9601      ADIW	R24,1
    075C 878A      STD	R24,10+Y
    075D 879B      STD	R25,11+Y
(0268)            }
    075E 94A3      INC	R10
    075F 14AC      CP	R10,R12
    0760 F368      BCS	0x074E
(0269)        x-=width;
    0761 2C2C      MOV	R2,R12
    0762 2433      CLR	R3
    0763 840A      LDD	R0,10+Y
    0764 841B      LDD	R1,11+Y
    0765 1802      SUB	R0,R2
    0766 0813      SBC	R1,R3
    0767 860A      STD	R0,10+Y
    0768 861B      STD	R1,11+Y
(0270)        y++;	
    0769 2D8E      MOV	R24,R14
    076A 2D9F      MOV	R25,R15
    076B 9601      ADIW	R24,1
    076C 2EE8      MOV	R14,R24
    076D 2EF9      MOV	R15,R25
(0271)       }
    076E 9543      INC	R20
    076F 1746      CP	R20,R22
    0770 F2D8      BCS	0x074C
(0272)   }	 
    0771 D5B2      RCALL	pop_gset5
    0772 0000      NOP
    0773 9624      ADIW	R28,4
    0774 9508      RET
_bmp_tran:
  j                    --> R20
  i                    --> R10
  bmp_p                --> R12
  width                --> R14
  high                 --> R22
  y                    --> Y+12
  x                    --> Y+10
    0775 D551      RCALL	push_arg4
    0776 0000      NOP
    0777 D59F      RCALL	push_gset5
    0778 0000      NOP
    0779 856E      LDD	R22,14+Y
    077A 857F      LDD	R23,15+Y
    077B 88E8      LDD	R14,16+Y
    077C 88F9      LDD	R15,17+Y
    077D 88CA      LDD	R12,18+Y
    077E 88DB      LDD	R13,19+Y
(0273) /*         传送bmp点阵数据到LCD            */
(0274) /*         x:0~15(字节为单位)  y:0~64      */
(0275) /*         bmp_p:指向图形数据的指针        */	
(0276) /*         high:位图高度(点阵行为单位)     */
(0277) /*         width:位图宽度(以字节为单位)

⌨️ 快捷键说明

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