📄 spi.lst
字号:
(0155) LCD_write_char( address, 0 );
010C 2722 CLR R18
010D 2733 CLR R19
010E 2F04 MOV R16,R20
010F 2711 CLR R17
0110 DF87 RCALL _LCD_write_char
0111 940E0326 CALL pop_gset2
0113 9508 RET
_LCD_write_string:
s --> R20
Y --> R10
X --> R22
0114 940E0333 CALL push_gset3
0116 2EA2 MOV R10,R18
0117 2F60 MOV R22,R16
0118 814E LDD R20,Y+6
0119 815F LDD R21,Y+7
(0156) }
(0157) /*-----------------------------------------------------------------------
(0158) LCD_write_string : 英文字符串显示函数
(0159) LCD_write_dan_data:显示0~10内的单个十进制数
(0160) LCD_write_chang_dat:显示0~4294967295内的任意一个数
(0161) 输入参数:*s :英文字符串指针;
(0162) X、Y : 显示字符串的位置
(0163) -----------------------------------------------------------------------*/
(0164) void LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s)
(0165) {
(0166) LCD_set_xy( X, Y ); ///显示字符串
011A 2D2A MOV R18,R10
011B 2F06 MOV R16,R22
011C DFE4 RCALL _LCD_set_xy
011D C008 RJMP 0x0126
(0167) while (*s)
(0168) {
(0169) LCD_write_char( 0, *s );
011E 01FA MOVW R30,R20
011F 8120 LDD R18,Z+0
0120 2733 CLR R19
0121 2700 CLR R16
0122 2711 CLR R17
0123 DF74 RCALL _LCD_write_char
(0170) s ++;
0124 5F4F SUBI R20,0xFF
0125 4F5F SBCI R21,0xFF
0126 01FA MOVW R30,R20
0127 8020 LDD R2,Z+0
0128 2022 TST R2
0129 F7A1 BNE 0x011E
012A 940E0329 CALL pop_gset3
012C 9508 RET
_LCD_write_dan_data:
i --> R20
z --> Y+4
Y --> R22
X --> R20
012D 940E0335 CALL push_gset2
012F 2F62 MOV R22,R18
0130 2F40 MOV R20,R16
(0171) }
(0172) }
(0173) void LCD_write_dan_data(unsigned char X,unsigned char Y,unsigned char z)
(0174) {
(0175) unsigned char i; //显示一个字节数字
(0176) LCD_set_xy( X, Y );
0131 2F26 MOV R18,R22
0132 2F04 MOV R16,R20
0133 DFCD RCALL _LCD_set_xy
(0177) i=z+'0';
0134 814C LDD R20,Y+4
0135 5D40 SUBI R20,0xD0
(0178) LCD_write_char(0,i);
0136 2F24 MOV R18,R20
0137 2733 CLR R19
0138 2700 CLR R16
0139 2711 CLR R17
013A DF5D RCALL _LCD_write_char
013B 940E0326 CALL pop_gset2
013D 9508 RET
_LCD_write_chang_data:
i --> R10
z --> Y+8
Y --> R12
X --> R10
013E 940E0331 CALL push_gset4
0140 2EC2 MOV R12,R18
0141 2EA0 MOV R10,R16
(0179) }
(0180) void LCD_write_chang_data(unsigned char X,unsigned char Y, unsigned long z)
(0181) {
(0182) unsigned char i; //显示一个长字节数字(0~4294967295)
(0183) LCD_set_xy( X, Y ); //注:现在显的数是个位开始的
0142 2D2C MOV R18,R12
0143 2D0A MOV R16,R10
0144 DFBC RCALL _LCD_set_xy
0145 C037 RJMP 0x017D
(0184) while(z)
(0185) {
(0186) i=z%10+'0';
0146 E04A LDI R20,0xA
0147 E050 LDI R21,0
0148 E060 LDI R22,0
0149 E070 LDI R23,0
014A 01FE MOVW R30,R28
014B 8420 LDD R2,Z+8
014C 8431 LDD R3,Z+9
014D 8442 LDD R4,Z+10
014E 8453 LDD R5,Z+11
014F 937A ST R23,-Y
0150 936A ST R22,-Y
0151 935A ST R21,-Y
0152 934A ST R20,-Y
0153 0181 MOVW R16,R2
0154 0192 MOVW R18,R4
0155 940E02B7 CALL mod32u
0157 0118 MOVW R2,R16
0158 0129 MOVW R4,R18
0159 E340 LDI R20,0x30
015A E050 LDI R21,0
015B E060 LDI R22,0
015C E070 LDI R23,0
015D 0E24 ADD R2,R20
015E 1E35 ADC R3,R21
015F 1E46 ADC R4,R22
0160 1E57 ADC R5,R23
0161 2CA2 MOV R10,R2
(0187) z=z/10;
0162 E04A LDI R20,0xA
0163 E050 LDI R21,0
0164 E060 LDI R22,0
0165 E070 LDI R23,0
0166 01FE MOVW R30,R28
0167 8420 LDD R2,Z+8
0168 8431 LDD R3,Z+9
0169 8442 LDD R4,Z+10
016A 8453 LDD R5,Z+11
016B 937A ST R23,-Y
016C 936A ST R22,-Y
016D 935A ST R21,-Y
016E 934A ST R20,-Y
016F 0181 MOVW R16,R2
0170 0192 MOVW R18,R4
0171 940E02B5 CALL div32u
0173 01FE MOVW R30,R28
0174 8700 STD Z+8,R16
0175 8711 STD Z+9,R17
0176 8722 STD Z+10,R18
0177 8733 STD Z+11,R19
(0188) LCD_write_char(0,i);
0178 2D2A MOV R18,R10
0179 2733 CLR R19
017A 2700 CLR R16
017B 2711 CLR R17
017C DF1B RCALL _LCD_write_char
017D E040 LDI R20,0
017E E050 LDI R21,0
017F E060 LDI R22,0
0180 E070 LDI R23,0
0181 01FE MOVW R30,R28
0182 8420 LDD R2,Z+8
0183 8431 LDD R3,Z+9
0184 8442 LDD R4,Z+10
0185 8453 LDD R5,Z+11
0186 1624 CP R2,R20
0187 0635 CPC R3,R21
0188 0646 CPC R4,R22
0189 0657 CPC R5,R23
018A F009 BEQ 0x018C
018B CFBA RJMP 0x0146
018C 940E032C CALL pop_gset4
018E 9508 RET
_delayms:
i --> R20
j --> R22
k --> R16
018F 940E0335 CALL push_gset2
FILE: E:\写的程序\AVR(C)\延时子程序.c
(0001) #include"iom16v.h"
(0002) #include"macros.h"
(0003) #define uchar unsigned char
(0004) #define uint unsigned int
(0005)
(0006) //***************************************************
(0007) /*ms延时*/
(0008) //***************************************************
(0009) void delayms(uint k)
(0010) {
(0011) uint i,j;
(0012) for(i=0;i<k;i++)
0191 2744 CLR R20
0192 2755 CLR R21
0193 C00B RJMP 0x019F
(0013) for(j=0;j<1441;j++);
0194 2766 CLR R22
0195 2777 CLR R23
0196 C002 RJMP 0x0199
0197 5F6F SUBI R22,0xFF
0198 4F7F SBCI R23,0xFF
0199 3A61 CPI R22,0xA1
019A E0E5 LDI R30,5
019B 077E CPC R23,R30
019C F3D0 BCS 0x0197
019D 5F4F SUBI R20,0xFF
019E 4F5F SBCI R21,0xFF
019F 1740 CP R20,R16
01A0 0751 CPC R21,R17
01A1 F390 BCS 0x0194
01A2 940E0326 CALL pop_gset2
01A4 9508 RET
_delayus:
i --> R20
j --> R22
k --> R16
01A5 940E0335 CALL push_gset2
(0014) }
(0015) //***************************************************
(0016) /*us延时*/
(0017) //***************************************************
(0018) void delayus(uint k)
(0019) {
(0020) uint i,j;
(0021) for(i=0;i<k;i++)
01A7 2744 CLR R20
01A8 2755 CLR R21
01A9 C00B RJMP 0x01B5
(0022) for(j=0;j<8;j++);
01AA 2766 CLR R22
01AB 2777 CLR R23
01AC C002 RJMP 0x01AF
01AD 5F6F SUBI R22,0xFF
01AE 4F7F SBCI R23,0xFF
01AF 3068 CPI R22,0x8
01B0 E0E0 LDI R30,0
01B1 077E CPC R23,R30
01B2 F3D0 BCS 0x01AD
01B3 5F4F SUBI R20,0xFF
01B4 4F5F SBCI R21,0xFF
01B5 1740 CP R20,R16
01B6 0751 CPC R21,R17
01B7 F390 BCS 0x01AA
01B8 940E0326 CALL pop_gset2
01BA 9508 RET
_delays:
i --> R20
k --> R22
01BB 940E0335 CALL push_gset2
01BD 01B8 MOVW R22,R16
(0023) }
(0024) //***************************************************
(0025) /*s延时*/
(0026) //***************************************************
(0027) void delays(uint k)
(0028) {
(0029) uint i;
(0030) for(i=0;i<k;i++)
01BE 2744 CLR R20
01BF 2755 CLR R21
01C0 C005 RJMP 0x01C6
(0031) delayms(1000);
01C1 EE08 LDI R16,0xE8
01C2 E013 LDI R17,3
01C3 DFCB RCALL _delayms
01C4 5F4F SUBI R20,0xFF
01C5 4F5F SBCI R21,0xFF
01C6 1746 CP R20,R22
01C7 0757 CPC R21,R23
01C8 F3C0 BCS 0x01C1
01C9 940E0326 CALL pop_gset2
01CB 9508 RET
_key_scan:
j --> R10
key --> R20
i --> R12
01CC 940E0331 CALL push_gset4
FILE: E:\写的程序\AVR(C)\4X4键盘.c
(0001) /*********************************************************************
(0002) 注意在调用时要初始化DDRA=0xff;
(0003) 这最好是用中断扫描键盘,在中断里先保存以前DDRA的数值;
(0004) 扫描完后再恢复以前的DDRA的值
(0005) ***********************************************************************/
(0006) #include <iom16v.h>
(0007) #include <macros.h>
(0008) #include"延时子程序.c"
(0009) #define uchar unsigned char
(0010) #define uint unsigned int
(0011)
(0012) uchar key_scan()
(0013) {
(0014) uchar i=0X7F,key,j=0;
01CE E78F LDI R24,0x7F
01CF 2EC8 MOV R12,R24
01D0 24AA CLR R10
(0015) delayms(1);
01D1 E001 LDI R16,1
01D2 E010 LDI R17,0
01D3 DFBB RCALL _delayms
(0016) do
(0017) {
(0018) i=(i<<1|i>>7);
01D4 2C2C MOV R2,R12
01D5 9426 LSR R2
01D6 9426 LSR R2
01D7 9426 LSR R2
01D8 9426 LSR R2
01D9 9426 LSR R2
01DA 9426 LSR R2
01DB 9426 LSR R2
01DC 2C3C MOV R3,R12
01DD 0C33 LSL R3
01DE 2832 OR R3,R2
01DF 2CC3 MOV R12,R3
(0019) PORTD=i;
01E0 BA32 OUT 0x12,R3
(0020) DDRD=0x0F;
01E1 E08F LDI R24,0xF
01E2 BB81 OUT 0x11,R24
(0021) key=PIND;
01E3 B340 IN R20,0x10
(0022) j=key&0xF0;
01E4 2F84 MOV R24,R20
01E5 7F80 ANDI R24,0xF0
01E6 2EA8 MOV R10,R24
(0023) }while(j==0xF0);
01E7 2D8A MOV R24,R10
01E8 3F80 CPI R24,0xF0
01E9 F351 BEQ 0x01D4
(0024) switch(key)
01EA 2F64 MOV R22,R20
01EB 2777 CLR R23
01EC 3B67 CPI R22,0xB7
01ED E0E0 LDI R30,0
01EE 077E CPC R23,R30
01EF F409 BNE 0x01F1
01F0 C05C RJMP 0x024D
01F1 3B6B CPI R22,0xBB
01F2 E0E0 LDI R30,0
01F3 077E CPC R23,R30
01F4 F409 BNE 0x01F6
01F5 C055 RJMP 0x024B
01F6 3B6D CPI R22,0xBD
01F7 E0E0 LDI R30,0
01F8 077E CPC R23,R30
01F9 F409 BNE 0x01FB
01FA C04E RJMP 0x0249
01FB 3B6E CPI R22,0xBE
01FC E0E0 LDI R30,0
01FD 077E CPC R23,R30
01FE F409 BNE 0x0200
01FF C047 RJMP 0x0247
0200 EB8E LDI R24,0xBE
0201 E090 LDI R25,0
0202 1786 CP R24,R22
0203 0797 CPC R25,R23
0204 F094 BLT 0x0217
0205 3767 CPI R22,0x77
0206 E0E0 LDI R30,0
0207 077E CPC R23,R30
0208 F409 BNE 0x020A
0209 C03B RJMP 0x0245
020A 376B CPI R22,0x7B
020B E0E0 LDI R30,0
020C 077E CPC R23,R30
020D F1A9 BEQ 0x0243
020E 376D CPI R22,0x7D
020F E0E0 LDI R30,0
0210 077E CPC R23,R30
0211 F179 BEQ 0x0241
0212 376E CPI R22,0x7E
0213 E0E0 LDI R30,0
0214 077E CPC R23,R30
0215 F149 BEQ 0x023F
0216 C048 RJMP 0x025F
0217 3D67 CPI R22,0xD7
0218 E0E0 LDI R30,0
0219 077E CPC R23,R30
021A F409 BNE 0x021C
021B C039 RJMP 0x0255
021C 3D6B CPI R22,0xDB
021D E0E0 LDI R30,0
021E 077E CPC R23,R30
021F F409 BNE 0x0221
0220 C032 RJMP 0x0253
0221 3D6D CPI R22,0xDD
0222 E0E0 LDI R30,0
0223 077E CPC R23,R30
0224 F161 BEQ 0x0251
0225 3D6E CPI R22,0xDE
0226 E0E0 LDI R30,0
0227 077E CPC R23,R30
0228 F131 BEQ 0x024F
0229 3D67 CPI R22,0xD7
022A E0E0 LDI R30,0
022B 077E CPC R23,R30
022C F40C BGE 0x022E
022D C031 RJMP 0x025F
022E 3E67 CPI R22,0xE7
022F E0E0 LDI R30,0
0230 077E CPC R23,R30
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -