?? led_8.lst
字號:
__start:
__text_start:
72 EFCF LDI R28,0xFF
73 E2D1 LDI R29,0x21
74 BFCD OUT 0x3D,R28
75 BFDE OUT 0x3E,R29
76 51CE SUBI R28,0x1E
77 40D0 SBCI R29,0
78 EA0A LDI R16,0xAA
79 8308 STD Y+0,R16
7A 2400 CLR R0
7B E0E0 LDI R30,0
7C E0F2 LDI R31,2
7D E012 LDI R17,2
7E 30E0 CPI R30,0
7F 07F1 CPC R31,R17
80 F011 BEQ 0x0083
81 9201 ST R0,Z+
82 CFFB RJMP 0x007E
83 8300 STD Z+0,R16
84 EEE4 LDI R30,0xE4
85 E0F0 LDI R31,0
86 E0A0 LDI R26,0
87 E0B2 LDI R27,2
88 E010 LDI R17,0
89 E000 LDI R16,0
8A BF0B OUT 0x3B,R16
8B 3EE4 CPI R30,0xE4
8C 07F1 CPC R31,R17
8D F021 BEQ 0x0092
8E 95C8 LPM
8F 9631 ADIW R30,1
90 920D ST R0,X+
91 CFF9 RJMP 0x008B
92 940E 00FA CALL _main
_exit:
94 CFFF RJMP _exit
_encoder:
code --> R20
num --> R16
95 940E 0120 CALL push_xgsetF000
FILE: E:\16實驗程序\數(shù)碼管顯示1\encoder.h
(0001) //數(shù)碼管譯碼函數(shù)
(0002) uchar encoder(uchar num)
(0003) {
(0004) uchar code;
(0005) switch(num)
97 2F60 MOV R22,R16
98 2777 CLR R23
99 3060 CPI R22,0
9A 0767 CPC R22,R23
9B F129 BEQ 0x00C1
9C 3061 CPI R22,1
9D E0E0 LDI R30,0
9E 077E CPC R23,R30
9F F119 BEQ 0x00C3
A0 3062 CPI R22,2
A1 E0E0 LDI R30,0
A2 077E CPC R23,R30
A3 F109 BEQ 0x00C5
A4 3063 CPI R22,3
A5 E0E0 LDI R30,0
A6 077E CPC R23,R30
A7 F0F9 BEQ 0x00C7
A8 3064 CPI R22,4
A9 E0E0 LDI R30,0
AA 077E CPC R23,R30
AB F0E9 BEQ 0x00C9
AC 3065 CPI R22,5
AD E0E0 LDI R30,0
AE 077E CPC R23,R30
AF F0D9 BEQ 0x00CB
B0 3066 CPI R22,6
B1 E0E0 LDI R30,0
B2 077E CPC R23,R30
B3 F0C9 BEQ 0x00CD
B4 3067 CPI R22,7
B5 E0E0 LDI R30,0
B6 077E CPC R23,R30
B7 F0B9 BEQ 0x00CF
B8 3068 CPI R22,0x8
B9 E0E0 LDI R30,0
BA 077E CPC R23,R30
BB F0A9 BEQ 0x00D1
BC 3069 CPI R22,0x9
BD E0E0 LDI R30,0
BE 077E CPC R23,R30
BF F099 BEQ 0x00D3
C0 C013 RJMP 0x00D4
(0006) {
(0007) case 0x00:
(0008) code=0xc0;break;
C1 EC40 LDI R20,0xC0
C2 C011 RJMP 0x00D4
(0009) case 0x01:
(0010) code=0xf9;break;
C3 EF49 LDI R20,0xF9
C4 C00F RJMP 0x00D4
(0011) case 0x02:
(0012) code=0xa4;break;
C5 EA44 LDI R20,0xA4
C6 C00D RJMP 0x00D4
(0013) case 0x03:
(0014) code=0xb0;break;
C7 EB40 LDI R20,0xB0
C8 C00B RJMP 0x00D4
(0015) case 0x04:
(0016) code=0x99;break;
C9 E949 LDI R20,0x99
CA C009 RJMP 0x00D4
(0017) case 0x05:
(0018) code=0x92;break;
CB E942 LDI R20,0x92
CC C007 RJMP 0x00D4
(0019) case 0x06:
(0020) code=0x82;break;
CD E842 LDI R20,0x82
CE C005 RJMP 0x00D4
(0021) case 0x07:
(0022) code=0xf8;break;
CF EF48 LDI R20,0xF8
D0 C003 RJMP 0x00D4
(0023) case 0x08:
(0024) code=0x80;break;
D1 E840 LDI R20,0x80
D2 C001 RJMP 0x00D4
(0025) case 0x09:
(0026) code=0x90;break;
D3 E940 LDI R20,0x90
(0027) }
(0028) return(code);
D4 2F04 MOV R16,R20
D5 940C 0125 JMP pop_xgsetF000
FILE: E:\16實驗程序\數(shù)碼管顯示1\ch595.h
(0001) //ch595的數(shù)據(jù)輸入
(0002) #define srclk 1
(0003) #define rclk 2
(0004) #define ser 3
(0005)
(0006) //延時函數(shù)
(0007) void s_ms(unsigned int t)
(0008) {
(0009) for(;t>1;t--)
_s_ms:
t --> R16
D7 C002 RJMP 0x00DA
D8 5001 SUBI R16,1
D9 4010 SBCI R17,0
DA E081 LDI R24,1
DB E090 LDI R25,0
DC 1780 CP R24,R16
DD 0791 CPC R25,R17
DE F3C8 BCS 0x00D8
DF 9508 RET
_sendbyte:
tem --> R10
i --> R22
byte --> R20
E0 940E 012A CALL push_xgsetF00C
E2 2F40 MOV R20,R16
(0010) {
(0011) }
(0012) }
(0013) //寫74hc595函數(shù)
(0014) void sendbyte(uchar byte)
(0015) {
(0016) uchar i,tem;
(0017) byte=encoder(byte); //譯碼
E3 2F04 MOV R16,R20
E4 DFB0 RCALL _encoder
E5 2F40 MOV R20,R16
(0018) for(i=0;i<8;i++)
E6 2766 CLR R22
E7 C00C RJMP 0x00F4
(0019) {
(0020) PORTA&=~(1<<srclk); //srclk 清零
E8 98D9 CBI 0x1B,1
(0021) tem=(byte&0x80); //最高位是1
E9 2F84 MOV R24,R20
EA 7880 ANDI R24,0x80
EB 2EA8 MOV R10,R24
(0022) if(tem==0)
EC 2388 TST R24
ED F411 BNE 0x00F0
(0023) {
(0024) PORTA&=~(1<<ser); //ser 清零
EE 98DB CBI 0x1B,3
(0025) }
EF C001 RJMP 0x00F1
(0026) else
(0027) {
(0028) PORTA|=(1<<ser); //ser 置1 ser為高電平時工作
F0 9ADB SBI 0x1B,3
(0029) }
(0030) byte=byte<<1; //數(shù)據(jù)左移1位
F1 0F44 LSL R20
(0031) PORTA|=(1<<srclk); //srclk=1
F2 9AD9 SBI 0x1B,1
F3 9563 INC R22
F4 3068 CPI R22,0x8
F5 F390 BCS 0x00E8
(0032) }
(0033) PORTA&=~(1<<rclk); //rclk=0
F6 98DA CBI 0x1B,2
(0034) PORTA|=(1<<rclk); //rclk=1
F7 9ADA SBI 0x1B,2
F8 940C 0131 JMP pop_xgsetF00C
FILE: E:\16實驗程序\數(shù)碼管顯示1\led_8.c
(0001) //數(shù)碼管顯示程序
(0002) #define uchar unsigned char
(0003) #define uint unsigned int
(0004) #include<iom16v.h>
(0005) //7段譯碼
(0006) #include"encoder.h"
(0007) //寫74hc595
(0008) #include"ch595.h"
(0009)
(0010)
(0011)
(0012) //主函數(shù)
(0013) main()
(0014) {
(0015) uchar aa,cc=0x0;
_main:
aa --> R10
bb --> R22
cc --> R20
FA 2744 CLR R20
(0016) uint bb;
(0017) DDRA=0xff; //初始化端口A
FB EF8F LDI R24,0xFF
FC BB8A OUT 0x1A,R24
(0018) PORTA=0xef;
FD EE8F LDI R24,0xEF
FE BB8B OUT 0x1B,R24
FF C01E RJMP 0x011E
(0019) while(1)
(0020) {
(0021) PORTA|=(1<<4); //74ls138使能
100 9ADC SBI 0x1B,4
(0022) for(aa=0;aa<=9;aa++) //循環(huán)發(fā)送0-9的數(shù)字
101 24AA CLR R10
102 C018 RJMP 0x011B
(0023) {
(0024) sendbyte(aa); //向74hc595寫入數(shù)據(jù)
103 2D0A MOV R16,R10
104 DFDB RCALL _sendbyte
(0025) for(bb=0;bb<1600;bb++) //每個數(shù)字掃描2000次,每個數(shù)碼管200次
105 2766 CLR R22
106 2777 CLR R23
107 C00E RJMP 0x0116
(0026) {
(0027) PORTA&=~cc; //74hc138依次輸出
108 2E24 MOV R2,R20
109 9420 COM R2
10A B23B IN R3,0x1B
10B 2032 AND R3,R2
10C BA3B OUT 0x1B,R3
(0028) cc=cc+0x20; //這里可能不好理解,138的ABC在A口的567位,每加0x20就是進一位,加到溢出就回到000;
10D 5E40 SUBI R20,0xE0
(0029) s_ms(700);
10E EB0C LDI R16,0xBC
10F E012 LDI R17,2
110 DFC6 RCALL _s_ms
(0030) PORTA|=0xF0;
FILE: <library>
111 B38B IN R24,0x1B
112 6F80 ORI R24,0xF0
113 BB8B OUT 0x1B,R24
114 5F6F SUBI R22,0xFF
115 4F7F SBCI R23,0xFF
116 3460 CPI R22,0x40
117 E0E6 LDI R30,6
118 077E CPC R23,R30
119 F370 BCS 0x0108
11A 94A3 INC R10
11B E089 LDI R24,0x9
11C 158A CP R24,R10
11D F728 BCC 0x0103
11E CFE1 RJMP 0x0100
11F 9508 RET
push_xgsetF000:
120 937A ST R23,-Y
121 936A ST R22,-Y
122 935A ST R21,-Y
123 934A ST R20,-Y
124 9508 RET
pop_xgsetF000:
125 9149 LD R20,Y+
126 9159 LD R21,Y+
127 9169 LD R22,Y+
128 9179 LD R23,Y+
129 9508 RET
push_xgsetF00C:
12A 937A ST R23,-Y
12B 936A ST R22,-Y
12C 935A ST R21,-Y
12D 934A ST R20,-Y
12E 92BA ST R11,-Y
12F 92AA ST R10,-Y
130 9508 RET
pop_xgsetF00C:
131 90A9 LD R10,Y+
132 90B9 LD R11,Y+
133 9149 LD R20,Y+
134 9159 LD R21,Y+
135 9169 LD R22,Y+
136 9179 LD R23,Y+
137 9508 RET
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -