?? led.lst
字號:
__text_start:
__start:
0033 E5CF LDI R28,0x5F
0034 E0D4 LDI R29,4
0035 BFCD OUT 0x3D,R28
0036 BFDE OUT 0x3E,R29
0037 51C0 SUBI R28,0x10
0038 40D0 SBCI R29,0
0039 EA0A LDI R16,0xAA
003A 8308 STD Y+0,R16
003B 2400 CLR R0
003C E7E2 LDI R30,0x72
003D E0F0 LDI R31,0
003E E010 LDI R17,0
003F 37E3 CPI R30,0x73
0040 07F1 CPC R31,R17
0041 F011 BEQ 0x0044
0042 9201 ST R0,Z+
0043 CFFB RJMP 0x003F
0044 8300 STD Z+0,R16
0045 E5E4 LDI R30,0x54
0046 E0F0 LDI R31,0
0047 E6A0 LDI R26,0x60
0048 E0B0 LDI R27,0
0049 E010 LDI R17,0
004A 36E6 CPI R30,0x66
004B 07F1 CPC R31,R17
004C F021 BEQ 0x0051
004D 95C8 LPM
004E 9631 ADIW R30,1
004F 920D ST R0,X+
0050 CFF9 RJMP 0x004A
0051 940E0092 CALL _main
_exit:
0053 CFFF RJMP _exit
FILE: E:\MYWORK~1\開發設計\EasyAVR\程序范例\Mega16程序包\完成整理\數碼管測試\main.c
(0001) /****************************************Copyright (c)**************************************************
(0002) ** ADEmbed Development Co.,LTD.
(0003) ** http://www.adembed.com
(0004) **--------------File Info-------------------------------------------------------------------------------
(0005) ** File name: main.c
(0006) ** Last modified Date: 2008-12-13
(0007) ** Last Version: 1.0
(0008) ** Descriptions: StopWatch.
(0009) **
(0010) **------------------------------------------------------------------------------------------------------
(0011) ** Created by: junbolu
(0012) ** Created date: 2008-12-13
(0013) ** Version: 1.0
(0014) ** Descriptions:
(0015) **
(0016) **------------------------------------------------------------------------------------------------------
(0017) ** Modified by:
(0018) ** Modified date:
(0019) ** Version:
(0020) ** Descriptions:
(0021) **
(0022) **------------------------------------------------------------------------------------------------------
(0023) **ICC-AVR application builder : 2008-12-13
(0024) **Target : M16
(0025) **Crystal: 7.3728Mhz
(0026) **PA0~PA7口接LED的段碼
(0027) **PB0~PB3口接LED的位選
(0028) **描述:這是一個LED數碼管測試程序。采用共陰LED數碼管,動態顯示固定數字2009。
(0029) ** 沒有一點多余的代碼,清晰明了。
(0030) **
(0031) **涉及知識點:
(0032) ** DO輸出
(0033) ** for 循環的應用
(0034) ** 數組的簡單應用
(0035) *******************************************************************************************************/
(0036)
(0037) #include<iom16v.h>
(0038) #include<macros.h>
(0039)
(0040) unsigned char DISP_NUM; //顯示的位數
(0041) unsigned char BitTab[]={0xFE,0xFD,0xFB,0xF7}; //三位位選碼
(0042) unsigned char DispTab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; //LED字形碼
(0043) unsigned char DISP_DATA[4]={2,0,0,9}; //顯示的數字
(0044)
(0045) void Display(void);
(0046)
(0047) void Delay_us(unsigned int time)
(0048) {
(0049) while(time--);
_Delay_us:
time --> R16
0054 0118 MOVW R2,R16
0055 5001 SUBI R16,1
0056 4010 SBCI R17,0
0057 2022 TST R2
0058 F7D9 BNE 0x0054
0059 2033 TST R3
005A F7C9 BNE 0x0054
005B 9508 RET
_Delay_ms:
time --> R20
005C 940E00A9 CALL push_gset1
005E 01A8 MOVW R20,R16
(0050) }
(0051)
(0052) void Delay_ms(unsigned int time)
(0053) {
005F C003 RJMP 0x0063
(0054) while(time--)
(0055) {
(0056) Delay_us(10000);
0060 E100 LDI R16,0x10
0061 E217 LDI R17,0x27
0062 DFF1 RCALL _Delay_us
0063 011A MOVW R2,R20
0064 5041 SUBI R20,1
0065 4050 SBCI R21,0
0066 2022 TST R2
0067 F7C1 BNE 0x0060
0068 2033 TST R3
0069 F7B1 BNE 0x0060
006A 940E00AC CALL pop_gset1
006C 9508 RET
(0057) }
(0058) }
(0059)
(0060) //顯示函數,DISP_NUM決定顯示哪個LED
(0061) void Display(void)
(0062) {
(0063) PORTA=0x00; //清除顯示再位選
_Display:
006D 2422 CLR R2
006E BA2B OUT 0x1B,R2
(0064) PORTB=BitTab[DISP_NUM]; //PB口接位選
006F E680 LDI R24,0x60
0070 E090 LDI R25,0
0071 91E00072 LDS R30,DISP_NUM
0073 27FF CLR R31
0074 0FE8 ADD R30,R24
0075 1FF9 ADC R31,R25
0076 8020 LDD R2,Z+0
0077 BA28 OUT 0x18,R2
(0065) PORTA=DispTab[DISP_DATA[DISP_NUM]]; //PA口接LED的段碼
0078 E68E LDI R24,0x6E
0079 E090 LDI R25,0
007A 91E00072 LDS R30,DISP_NUM
007C 27FF CLR R31
007D 0FE8 ADD R30,R24
007E 1FF9 ADC R31,R25
007F 81E0 LDD R30,Z+0
0080 27FF CLR R31
0081 E684 LDI R24,0x64
0082 E090 LDI R25,0
0083 0FE8 ADD R30,R24
0084 1FF9 ADC R31,R25
0085 8020 LDD R2,Z+0
0086 BA2B OUT 0x1B,R2
(0066)
(0067)
(0068) DISP_NUM++; //先顯示低位,再顯示高位
0087 91800072 LDS R24,DISP_NUM
0089 5F8F SUBI R24,0xFF
008A 93800072 STS DISP_NUM,R24
(0069) if(DISP_NUM==4)
008C 3084 CPI R24,4
008D F419 BNE 0x0091
(0070) DISP_NUM=0;
008E 2422 CLR R2
008F 92200072 STS DISP_NUM,R2
0091 9508 RET
(0071) }
(0072)
(0073) void main(void)
(0074) {
(0075) DDRA=0XFF;
_main:
0092 EF8F LDI R24,0xFF
0093 BB8A OUT 0x1A,R24
(0076) PORTA=0X00;
0094 2422 CLR R2
0095 BA2B OUT 0x1B,R2
(0077) DDRB=0X0F;
0096 E08F LDI R24,0xF
0097 BB87 OUT 0x17,R24
(0078) PORTB=0X00;
0098 BA28 OUT 0x18,R2
(0079)
(0080) DISP_NUM=0;
0099 92200072 STS DISP_NUM,R2
(0081) for(;;)
(0082) {
(0083) Delay_us(200);
009B EC08 LDI R16,0xC8
009C E010 LDI R17,0
009D DFB6 RCALL _Delay_us
(0084) Display();
FILE: <library>
009E DFCE RCALL _Display
009F CFFB RJMP 0x009B
00A0 9508 RET
push_gset5:
00A1 92FA ST R15,-Y
00A2 92EA ST R14,-Y
push_gset4:
00A3 92DA ST R13,-Y
00A4 92CA ST R12,-Y
push_gset3:
00A5 92BA ST R11,-Y
00A6 92AA ST R10,-Y
push_gset2:
00A7 937A ST R23,-Y
00A8 936A ST R22,-Y
push_gset1:
00A9 935A ST R21,-Y
00AA 934A ST R20,-Y
00AB 9508 RET
pop_gset1:
00AC E0E1 LDI R30,1
pop:
00AD 9149 LD R20,Y+
00AE 9159 LD R21,Y+
00AF FDE0 SBRC R30,0
00B0 9508 RET
00B1 9169 LD R22,Y+
00B2 9179 LD R23,Y+
00B3 FDE1 SBRC R30,1
00B4 9508 RET
00B5 90A9 LD R10,Y+
00B6 90B9 LD R11,Y+
00B7 FDE2 SBRC R30,2
00B8 9508 RET
00B9 90C9 LD R12,Y+
00BA 90D9 LD R13,Y+
00BB FDE3 SBRC R30,3
00BC 9508 RET
00BD 90E9 LD R14,Y+
00BE 90F9 LD R15,Y+
00BF 9508 RET
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -