📄 pcat.lst
字号:
(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 + -