📄 ¿-
字号:
(0154) {
(0155) switch(x)
00172 2D6C MOV R22,R12
00173 2777 CLR R23
00174 3060 CPI R22,0
00175 0767 CPC R22,R23
00176 F069 BEQ 0x0184
00177 3061 CPI R22,1
00178 E0E0 LDI R30,0
00179 077E CPC R23,R30
0017A F079 BEQ 0x018A
0017B 3062 CPI R22,2
0017C E0E0 LDI R30,0
0017D 077E CPC R23,R30
0017E F089 BEQ 0x0190
0017F 3063 CPI R22,3
00180 E0E0 LDI R30,0
00181 077E CPC R23,R30
00182 F099 BEQ 0x0196
00183 C017 RJMP 0x019B
(0156) {
(0157) case 0:
(0158) Write_Command(0x80);
00184 E800 LDI R16,0x80
00185 DF29 RCALL _Write_Command
(0159) Write_Command(0x80+y);
00186 2F04 MOV R16,R20
00187 5800 SUBI R16,0x80
00188 DF26 RCALL _Write_Command
(0160) break;
00189 C011 RJMP 0x019B
(0161) case 1:
(0162) Write_Command(0x90);
0018A E900 LDI R16,0x90
0018B DF23 RCALL _Write_Command
(0163) Write_Command(0x90+y);
0018C 2F04 MOV R16,R20
0018D 5700 SUBI R16,0x70
0018E DF20 RCALL _Write_Command
(0164) break;
0018F C00B RJMP 0x019B
(0165) case 2:
(0166) Write_Command(0x88);
00190 E808 LDI R16,0x88
00191 DF1D RCALL _Write_Command
(0167) Write_Command(0x88+y);
00192 2F04 MOV R16,R20
00193 5708 SUBI R16,0x78
00194 DF1A RCALL _Write_Command
(0168) break;
00195 C005 RJMP 0x019B
(0169) case 3:
(0170) Write_Command(0x98);
00196 E908 LDI R16,0x98
00197 DF17 RCALL _Write_Command
(0171) Write_Command(0x98+y);
00198 2F04 MOV R16,R20
00199 5608 SUBI R16,0x68
0019A DF14 RCALL _Write_Command
(0172) break;
(0173) }
(0174) Write_one_char(dat);//写数据
0019B 2D0A MOV R16,R10
0019C DF71 RCALL _Write_one_char
0019D 940C 0336 JMP pop_xgsetF03C
_Lcd_puts_any:
i --> R10
p --> R12
y --> R20
x --> R14
0019F 940E 030A CALL push_xgsetF0FC
001A1 2F42 MOV R20,R18
001A2 2EE0 MOV R14,R16
001A3 84CA LDD R12,Y+10
001A4 84DB LDD R13,Y+11
(0175) }
(0176) //从指定的位置开始显示汉字或字符
(0177) void Lcd_puts_any(unsigned char x,unsigned char y,unsigned char *p)
(0178) {
(0179) unsigned char i=0;
001A5 24AA CLR R10
(0180) switch(x)
001A6 2D6E MOV R22,R14
001A7 2777 CLR R23
001A8 3060 CPI R22,0
001A9 0767 CPC R22,R23
001AA F069 BEQ 0x01B8
001AB 3061 CPI R22,1
001AC E0E0 LDI R30,0
001AD 077E CPC R23,R30
001AE F079 BEQ 0x01BE
001AF 3062 CPI R22,2
001B0 E0E0 LDI R30,0
001B1 077E CPC R23,R30
001B2 F089 BEQ 0x01C4
001B3 3063 CPI R22,3
001B4 E0E0 LDI R30,0
001B5 077E CPC R23,R30
001B6 F099 BEQ 0x01CA
001B7 C017 RJMP 0x01CF
(0181) {
(0182) case 0:
(0183) Write_Command(0x80);
001B8 E800 LDI R16,0x80
001B9 DEF5 RCALL _Write_Command
(0184) Write_Command(0x80+y);
001BA 2F04 MOV R16,R20
001BB 5800 SUBI R16,0x80
001BC DEF2 RCALL _Write_Command
(0185) break;
001BD C011 RJMP 0x01CF
(0186) case 1:
(0187) Write_Command(0x90);
001BE E900 LDI R16,0x90
001BF DEEF RCALL _Write_Command
(0188) Write_Command(0x90+y);
001C0 2F04 MOV R16,R20
001C1 5700 SUBI R16,0x70
001C2 DEEC RCALL _Write_Command
(0189) break;
001C3 C00B RJMP 0x01CF
(0190) case 2:
(0191) Write_Command(0x88);
001C4 E808 LDI R16,0x88
001C5 DEE9 RCALL _Write_Command
(0192) Write_Command(0x88+y);
001C6 2F04 MOV R16,R20
001C7 5708 SUBI R16,0x78
001C8 DEE6 RCALL _Write_Command
(0193) break;
001C9 C005 RJMP 0x01CF
(0194) case 3:
(0195) Write_Command(0x98);
001CA E908 LDI R16,0x98
001CB DEE3 RCALL _Write_Command
(0196) Write_Command(0x98+y);
001CC 2F04 MOV R16,R20
001CD 5608 SUBI R16,0x68
001CE DEE0 RCALL _Write_Command
(0197) break;
(0198) }
(0199) for(i=0;p[i]!='\0';i++)
001CF 24AA CLR R10
001D0 C007 RJMP 0x01D8
(0200) {
(0201) Write_one_char(p[i]);
001D1 2DEA MOV R30,R10
001D2 27FF CLR R31
001D3 0DEC ADD R30,R12
001D4 1DFD ADC R31,R13
001D5 8100 LD R16,Z
001D6 DF37 RCALL _Write_one_char
001D7 94A3 INC R10
001D8 2DEA MOV R30,R10
001D9 27FF CLR R31
001DA 0DEC ADD R30,R12
001DB 1DFD ADC R31,R13
001DC 8020 LD R2,Z
001DD 2022 TST R2
001DE F791 BNE 0x01D1
001DF 940C 02FF JMP pop_xgsetF0FC
FILE: E:\课件\128最小系统板\AVR程序\定时器\adc.c
(0001) #include"adc.h"
(0002) #include "12864.h" //包含头文件
(0003)
(0004) void mega128_adc(void)
(0005) {
(0006) DDRF=0X00;
_mega128_adc:
001E1 2422 CLR R2
001E2 9220 0061 STS 0x61,R2
(0007) PORTF=0X00;
001E4 9220 0062 STS 0x62,R2
(0008) DDRA=0X00;
001E6 BA2A OUT 0x1A,R2
(0009) PORTA=0X00;
001E7 BA2B OUT 0x1B,R2
(0010) ADMUX=0xd0;//F 差分 ADC0 ADC1 内部2.56V基准电压
001E8 ED80 LDI R24,0xD0
001E9 B987 OUT 0x07,R24
(0011) ADCSRA=0x86;//64分频 转换使能
001EA E886 LDI R24,0x86
001EB B986 OUT 0x06,R24
001EC 9508 RET
_adc_ready:
addate --> R10
001ED 92AA ST -Y,R10
001EE 92BA ST -Y,R11
(0012) }
(0013) uint adc_ready(void)
(0014) {
(0015) uint addate=0;
001EF 24AA CLR R10
001F0 24BB CLR R11
(0016) ADCSRA|=(1<<ADSC);//启动第一次转换
001F1 9A36 SBI 0x06,6
(0017) while(!(ADCSRA&(1<<ADIF)));//等待转换结束
001F2 9B34 SBIS 0x06,4
001F3 CFFE RJMP 0x01F2
(0018) ADCSRA&=~(1<<ADIF);//结束清零
001F4 9834 CBI 0x06,4
(0019) addate=ADCL;
001F5 B0A4 IN R10,0x04
001F6 24BB CLR R11
(0020) addate=addate+ADCH*256;
001F7 B125 IN R18,0x05
001F8 2733 CLR R19
001F9 E000 LDI R16,0
001FA E011 LDI R17,1
001FB 940E 02EF CALL empy16s
001FD 0EA0 ADD R10,R16
001FE 1EB1 ADC R11,R17
(0021) addate=addate*0.474;//数据恢复
001FF E80C LDI R16,0x8C
00200 E010 LDI R17,0
00201 940E 02DB CALL elpm32
00203 0118 MOVW R2,R16
00204 0129 MOVW R4,R18
00205 0185 MOVW R16,R10
00206 940E 037A CALL uint2fp
00208 933A ST -Y,R19
00209 932A ST -Y,R18
0020A 931A ST -Y,R17
0020B 930A ST -Y,R16
0020C 0181 MOVW R16,R2
0020D 0192 MOVW R18,R4
0020E 940E 047D CALL fpmule2
00210 940E 0348 CALL fpint
00212 0158 MOVW R10,R16
(0022) return addate;
00213 90B9 LD R11,Y+
00214 90A9 LD R10,Y+
00215 9508 RET
_display:
ge --> R20
shi --> R22
bai --> R10
num --> R12
i --> R14
00216 940E 030A CALL push_xgsetF0FC
(0023) }
(0024) void display(void)//测电压
(0025) {
(0026) uint num=0;
00218 24CC CLR R12
00219 24DD CLR R13
(0027) uchar bai=0,shi=0,ge=0,i=0;
0021A 24AA CLR R10
0021B 2766 CLR R22
0021C 2744 CLR R20
(0028) mega128_adc();//放入定时器中完成
0021D DFC3 RCALL _mega128_adc
(0029) for(i=100;i>0;i--)//测100次
0021E E684 LDI R24,0x64
0021F 2EE8 MOV R14,R24
00220 C004 RJMP 0x0225
(0030) {
(0031) num+=adc_ready();
00221 DFCB RCALL _adc_ready
00222 0EC0 ADD R12,R16
00223 1ED1 ADC R13,R17
00224 94EA DEC R14
00225 E080 LDI R24,0
00226 158E CP R24,R14
00227 F3C8 BCS 0x0221
(0032) }
(0033) num=num/100;
00228 E624 LDI R18,0x64
00229 E030 LDI R19,0
0022A 0186 MOVW R16,R12
0022B 940E 02C1 CALL div16u
0022D 0168 MOVW R12,R16
(0034) bai=num/100;
0022E E624 LDI R18,0x64
0022F E030 LDI R19,0
00230 940E 02C1 CALL div16u
00232 2EA0 MOV R10,R16
(0035) shi=num%100/10;
00233 E624 LDI R18,0x64
00234 E030 LDI R19,0
00235 0186 MOVW R16,R12
00236 940E 02BF CALL mod16u
00238 E02A LDI R18,0xA
00239 E030 LDI R19,0
0023A 940E 02C1 CALL div16u
0023C 2F60 MOV R22,R16
(0036) ge=num%10;
0023D E02A LDI R18,0xA
0023E E030 LDI R19,0
0023F 0186 MOVW R16,R12
00240 940E 02BF CALL mod16u
00242 2F40 MOV R20,R16
(0037) Write_Command(0x90);
00243 E900 LDI R16,0x90
00244 940E 00AF CALL _Write_Command
(0038) Write_Command(0x90+3);
00246 E903 LDI R16,0x93
00247 940E 00AF CALL _Write_Command
(0039) Write_one_char(bai+0x30);
00249 2D0A MOV R16,R10
0024A 5D00 SUBI R16,0xD0
0024B 940E 010E CALL _Write_one_char
(0040) Write_one_char('.');
0024D E20E LDI R16,0x2E
0024E 940E 010E CALL _Write_one_char
(0041) Write_Command(0x90+4);
00250 E904 LDI R16,0x94
00251 940E 00AF CALL _Write_Command
(0042) Write_one_char(shi+0x30);
00253 2F06 MOV R16,R22
00254 5D00 SUBI R16,0xD0
00255 940E 010E CALL _Write_one_char
(0043) Write_one_char(ge+0x30);
00257 2F04 MOV R16,R20
00258 5D00 SUBI R16,0xD0
00259 940E 010E CALL _Write_one_char
(0044) Write_Command(0x90+5);
0025B E905 LDI R16,0x95
0025C 940E 00AF CALL _Write_Command
(0045) Write_one_char('V');
0025E E506 LDI R16,0x56
0025F 940E 010E CALL _Write_one_char
00261 940C 02FF JMP pop_xgsetF0FC
FILE: E:\课件\128最小系统板\AVR程序\定时器\main.c
(0001) #include <iom128v.h>
(0002) #include <macros.h>
(0003) #include"adc.h"
(0004) #include "12864.h" //包含头文件
(0005)
(0006) #define uchar unsigned char
(0007) #define uint unsigned int
(0008) uchar count=0;
(0009)
(0010) void init_timer0(void)
(0011) {
(0012) CLI();
_init_timer0:
00263 94F8 BCLR 7
(0013) TCCR0=0X00;//32分频 定时溢出 关
00264 2422 CLR R2
00265 BE23 OUT 0x33,R2
(0014) ASSR&=~(1<<AS0);
00266 B780 IN R24,0x30
00267 7F87 ANDI R24,0xF7
00268 BF80 OUT 0x30,R24
(0015) TCNT0=0X02;
00269 E082 LDI R24,2
0026A BF82 OUT 0x32,R24
(0016) TCCR0=0X07;//256分频 定时溢出 1024
0026B E087 LDI R24,7
0026C BF83 OUT 0x33,R24
(0017) TIMSK|=(1<<TOIE0);
0026D B787 IN R24,0x37
0026E 6081 ORI R24,1
0026F BF87 OUT 0x37,R24
(0018) TIFR|=(1<<TOV0);
00270 B786 IN R24,0x36
00271 6081 ORI R24,1
00272 BF86 OUT 0x36,R24
(0019) SEI();
00273 9478 BSET 7
00274 9508 RET
_main:
00275 9722 SBIW R28,2
(0020) }
(0021) void main(void)
(0022) {
(0023) init_timer0();
00276 DFEC RCALL _init_timer0
(0024) LCD_init();
00277 940E 0099 CALL _LCD_init
(0025) Lcd_puts_any(0,0,"我骂我");
00279 E081 LDI R24,1
0027A E091 LDI R25,1
0027B 8399 STD Y+1,R25
0027C 8388 ST Y,R24
0027D 2722 CLR R18
0027E 2700 CLR R16
0027F 940E 019F CALL _Lcd_puts_any
(0026) while(1);
00281 CFFF RJMP 0x0281
00282 9622 ADIW R28,2
00283 9508 RET
_timer0_ovf_isr:
00284 920A ST -Y,R0
00285 921A ST -Y,R1
00286 922A ST -Y,R2
00287 923A ST -Y,R3
00288 924A ST -Y,R4
00289 925A ST -Y,R5
0028A 926A ST -Y,R6
0028B 927A ST -Y,R7
0028C 928A ST -Y,R8
0028D 929A ST -Y,R9
0028E 930A ST -Y,R16
0028F 931A ST -Y,R17
00290 932A ST -Y,R18
00291 933A ST -Y,R19
00292 938A ST -Y,R24
00293 939A ST -Y,R25
00294 93AA ST -Y,R26
00295 93BA ST -Y,R27
00296 93EA ST -Y,R30
00297 93FA ST -Y,R31
00298 B60F IN R0,0x3F
00299 920A ST -Y,R0
(0027) }
(0028)
(0029) #pragma interrupt_handler timer0_ovf_isr:17
(0030) void timer0_ovf_isr(void)
(0031) {
(0032) TCNT0=0X10;
0029A E180 LDI R24,0x10
0029B BF82 OUT 0x32,R24
(0033) count++;
0029C 9180 0100 LDS R24,count
0029E 5F8F SUBI R24,0xFF
0029F 9380 0100 STS count,R24
(0034) if(count==10)
002A1 308A CPI R24,0xA
002A2 F429 BNE 0x02A8
(0035) {
(0036) count=0;
002A3 2422 CLR R2
002A4 9220 0100 STS count,R2
(0037) display();//测电压
002A6 940E 0216 CALL _display
(0038) }
FILE: <library>
002A8 9009 LD R0,Y+
002A9 BE0F OUT 0x3F,R0
002AA 91F9 LD R31,Y+
002AB 91E9 LD R30,Y+
002AC 91B9 LD R27,Y+
002AD 91A9 LD R26,Y+
002AE 9199 LD R25,Y+
002AF 9189 LD R24,Y+
002B0 9139 LD R19,Y+
002B1 9129 LD R18,Y+
002B2 9119 LD R17,Y+
002B3 9109 LD R16,Y+
002B4 9099 LD R9,Y+
002B5 9089 LD R8,Y+
002B6 9079 LD R7,Y+
002B7 9069 LD R6,Y+
002B8 9059 LD R5,Y+
002B9 9049 LD R4,Y+
002BA 9039 LD R3,Y+
002BB 9029 LD R2,Y+
002BC 9019 LD R1,Y+
002BD 9009 LD R0,Y+
002BE 9518 RETI
mod16u:
002BF 9468 BSET 6
002C0 C001 RJMP xdiv16u
div16u:
002C1 94E8 BCLR 6
xdiv16u:
002C2 92EA ST -Y,R14
002C3 92FA ST -Y,R15
002C4 938A ST -Y,R24
002C5 24EE CLR R14
002C6 24FF CLR R15
002C7 E180 LDI R24,0x10
002C8 0F00 LSL R16
002C9 1F11 ROL R17
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -