?? test.lst
字號:
__start:
__text_start:
002A E5CF LDI R28,0x5F
002B E0D4 LDI R29,4
002C BFCD OUT 0x3D,R28
002D BFDE OUT 0x3E,R29
002E 51C0 SUBI R28,0x10
002F 40D0 SBCI R29,0
0030 EA0A LDI R16,0xAA
0031 8308 STD Y+0,R16
0032 2400 CLR R0
0033 E6E0 LDI R30,0x60
0034 E0F0 LDI R31,0
0035 E010 LDI R17,0
0036 37E1 CPI R30,0x71
0037 07F1 CPC R31,R17
0038 F011 BEQ 0x003B
0039 9201 ST R0,Z+
003A CFFB RJMP 0x0036
003B 8300 STD Z+0,R16
003C E5E4 LDI R30,0x54
003D E0F0 LDI R31,0
003E E6A0 LDI R26,0x60
003F E0B0 LDI R27,0
0040 E010 LDI R17,0
0041 35E4 CPI R30,0x54
0042 07F1 CPC R31,R17
0043 F021 BEQ 0x0048
0044 95C8 LPM
0045 9631 ADIW R30,1
0046 920D ST R0,X+
0047 CFF9 RJMP 0x0041
0048 940E0058 CALL _main
_exit:
004A CFFF RJMP _exit
FILE: D:\軟件\hd7279disp\no.c
(0001) /*------------------------------------------------------------
(0002) ;------------------------------------------------------------
(0003) ; HD7279 LIB
(0004) ; V0.1c
(0005) ; zhongwh
(0006) ; Copyright 2003-2005
(0007) ; Email: hfkj01@163.com
(0008) ; mtel : 13708004895
(0009) ; 2005-9-28 15:38:52
(0010) ; ICC-AVR application builder
(0011) ;-------------------------------------------------------------
(0012) ;-------------------------------------------------------------
(0013) ; Target : M16
(0014) ; Crystal: 8Mhz
(0015) ;-------------------------------------------------------------
(0016) ;-------------------------------------------------------------*/
(0017) #include <iom16v.h>
(0018) #include <macros.h>
(0019) //HD7279_DATA
(0020) #define HD7279_DATA_H PORTB|=BIT(PB0)
(0021) #define HD7279_DATA_L PORTB&=~BIT(PB0)
(0022) //HD7279_CLK
(0023) #define HD7279_CLK_H PORTB|=BIT(PB1)
(0024) #define HD7279_CLK_L PORTB&=~BIT(PB1)
(0025) //HD7279_CS
(0026) #define HD7279_CS_H PORTB|=BIT(PB2)
(0027) #define HD7279_CS_L PORTB&=~BIT(PB2)
(0028) //DDR
(0029) #define HD7279_DDR_H DDRB|=BIT(PB0)
(0030) #define HD7279_DDR_L DDRB&=~BIT(PB0)
(0031) //
(0032) #define HD7279_DATA PINB
(0033) //*** 函數(shù)定義 ***
(0034) void long_delay(void); // 長延時
(0035) void short_delay(void); // 短暫延時
(0036) void write7279(unsigned char, unsigned char); // 寫入到HD7279
(0037) unsigned char read7279(unsigned char); // 從HD7279讀出
(0038) void send_byte(unsigned char); // 發(fā)送一個字節(jié)
(0039) unsigned char receive_byte(void); // 接收一個字節(jié)
(0040) void delay_us(int); // 微秒延時
(0041) void dely_ms(unsigned int); // 毫秒延時
(0042)
(0043) //*** 變量及I/O口定義 ***
(0044) unsigned char digit[8];
(0045) unsigned char j,k,key_number;
(0046) unsigned int tmr;
(0047) unsigned long wait_cnter;
(0048)
(0049) //***I/O***
(0050) void port_init(void)
(0051) {
(0052) PORTB = 0x00;
_port_init:
004B 2422 CLR R2
004C BA28 OUT 0x18,R2
(0053) DDRB = 0x07;
004D E087 LDI R24,7
004E BB87 OUT 0x17,R24
(0054) PORTC = 0x00;
004F BA25 OUT 0x15,R2
(0055) DDRC = 0x07;
0050 BB84 OUT 0x14,R24
(0056) MCUCR = 0x02;
0051 E082 LDI R24,2
0052 BF85 OUT 0x35,R24
(0057) GICR = 0x40;
0053 E480 LDI R24,0x40
0054 BF8B OUT 0x3B,R24
(0058) TIMSK = 0x00; //timer interrupt sources
0055 BE29 OUT 0x39,R2
(0059) SEI(); //re-enable interrupts
0056 9478 BSET 7
(0060) }
0057 9508 RET
(0061)
(0062) //****** HD7279A 指令 ******
(0063) #define CMD_RESET 0xa4
(0064) #define CMD_TEST 0xbf
(0065) #define DECODE0 0x80
(0066) #define DECODE1 0xc8
(0067) #define CMD_READ 0x15
(0068) #define UNDECODE 0x90
(0069) #define RTL_CYCLE 0xa3
(0070) #define RTR_CYCLE 0xa2
(0071) #define RTL_UNCYL 0xa1
(0072) #define RTR_UNCYL 0xa0
(0073) #define ACTCTL 0x98
(0074) #define SEGON 0xe0
(0075) #define SEGOFF 0xc0
(0076) #define BLINKCTL 0x88
(0077)
(0078)
(0079) //
(0080) main()
(0081) {
(0082) port_init();
_main:
0058 DFF2 RCALL _port_init
0059 C1BF RJMP 0x0219
(0083) while (1)
(0084) {
(0085) for (tmr=0;tmr<0x2000;tmr++); // 上電延時
005A 2422 CLR R2
005B 2433 CLR R3
005C 92300065 STS _tmr+1,R3
005E 92200064 STS _tmr,R2
0060 C009 RJMP 0x006A
0061 91800064 LDS R24,_tmr
0063 91900065 LDS R25,_tmr+1
0065 9601 ADIW R24,1
0066 93900065 STS _tmr+1,R25
0068 93800064 STS _tmr,R24
006A 91800064 LDS R24,_tmr
006C 91900065 LDS R25,_tmr+1
006E 3080 CPI R24,0
006F E2E0 LDI R30,0x20
0070 079E CPC R25,R30
0071 F378 BCS 0x0061
(0086) send_byte(CMD_RESET); // 復(fù)位HD7279A
0072 EA04 LDI R16,0xA4
0073 D1BD RCALL _send_byte
(0087)
(0088) //******************************************
(0089) // 測試指令演示
(0090) //******************************************
(0091) send_byte(CMD_TEST); // 測試指令
0074 EB0F LDI R16,0xBF
0075 D1BB RCALL _send_byte
(0092) for (j=0;j<3;j++) // 延時約3秒
0076 2422 CLR R2
0077 92200068 STS _j,R2
0079 C008 RJMP 0x0082
(0093) {
(0094) dely_ms(100);
007A E604 LDI R16,0x64
007B E010 LDI R17,0
007C D210 RCALL _dely_ms
007D 91800068 LDS R24,_j
007F 5F8F SUBI R24,0xFF
0080 93800068 STS _j,R24
0082 91800068 LDS R24,_j
0084 3083 CPI R24,3
0085 F3A0 BCS 0x007A
(0095) }
(0096) send_byte(CMD_RESET); // 清除顯示
0086 EA04 LDI R16,0xA4
0087 D1A9 RCALL _send_byte
(0097)
(0098) //**********************************************
(0099) // 閃爍指令及鍵盤接口測試
(0100) // 將用戶按鍵的鍵碼顯示出來, 如果10秒內(nèi)無按鍵
(0101) // 或按S0鍵即進(jìn)入下一步演示
(0102) //**********************************************
(0103) wait_cnter=0;
0088 E040 LDI R20,0
0089 E050 LDI R21,0
008A E060 LDI R22,0
008B E070 LDI R23,0
008C 93500061 STS _wait_cnter+1,R21
008E 93400060 STS _wait_cnter,R20
0090 93700063 STS _wait_cnter+3,R23
0092 93600062 STS _wait_cnter+2,R22
(0104) key_number=0xff;
0094 EF8F LDI R24,0xFF
0095 93800066 STS _key_number,R24
(0105) write7279(BLINKCTL,0xfc); // 第1、2兩位設(shè)為閃爍顯示
0097 EF2C LDI R18,0xFC
0098 E808 LDI R16,0x88
0099 D183 RCALL _write7279
(0106) write7279(UNDECODE,0X08); // 在第1位顯示下劃線'_'
009A E028 LDI R18,0x8
009B E900 LDI R16,0x90
009C D180 RCALL _write7279
(0107) write7279(UNDECODE+1,0x08); // 在第2位顯示下劃線'_'
009D E028 LDI R18,0x8
009E E901 LDI R16,0x91
009F D17D RCALL _write7279
(0108) do
(0109) {
(0110) if (!(PIND&0x04)) // 如果有鍵按下
00A0 9982 SBIC 0x10,2
00A1 C01C RJMP 0x00BE
(0111) {
(0112) key_number=read7279(CMD_READ); // 讀出鍵碼
00A2 E105 LDI R16,0x15
00A3 D184 RCALL _read7279
00A4 93000066 STS _key_number,R16
(0113) write7279(DECODE1+1,key_number/16); // 在第2位顯示鍵碼高8位
00A6 2F20 MOV R18,R16
00A7 9522 SWAP R18
00A8 702F ANDI R18,0xF
00A9 EC09 LDI R16,0xC9
00AA D172 RCALL _write7279
(0114) write7279(DECODE1,key_number&0x0f); // 在第1位顯示鍵碼低8位
00AB 91200066 LDS R18,_key_number
00AD 702F ANDI R18,0xF
00AE EC08 LDI R16,0xC8
00AF D16D RCALL _write7279
(0115) while (!(PIND&0x04)); // 等待按鍵放開
00B0 9B82 SBIS 0x10,2
00B1 CFFE RJMP 0x00B0
(0116) wait_cnter=0;
00B2 E040 LDI R20,0
00B3 E050 LDI R21,0
00B4 E060 LDI R22,0
00B5 E070 LDI R23,0
00B6 93500061 STS _wait_cnter+1,R21
00B8 93400060 STS _wait_cnter,R20
00BA 93700063 STS _wait_cnter+3,R23
00BC 93600062 STS _wait_cnter+2,R22
(0117) }
(0118) wait_cnter++;
00BE E041 LDI R20,1
00BF E050 LDI R21,0
00C0 E060 LDI R22,0
00C1 E070 LDI R23,0
00C2 90400062 LDS R4,_wait_cnter+2
00C4 90500063 LDS R5,_wait_cnter+3
00C6 90200060 LDS R2,_wait_cnter
00C8 90300061 LDS R3,_wait_cnter+1
00CA 0E24 ADD R2,R20
00CB 1E35 ADC R3,R21
00CC 1E46 ADC R4,R22
00CD 1E57 ADC R5,R23
00CE 92300061 STS _wait_cnter+1,R3
00D0 92200060 STS _wait_cnter,R2
00D2 92500063 STS _wait_cnter+3,R5
00D4 92400062 STS _wait_cnter+2,R4
(0119) } while (key_number!=0 && wait_cnter<0x30000); // 如果按鍵為‘0’和超時則進(jìn)入下一步演示
00D6 90200066 LDS R2,_key_number
00D8 2022 TST R2
00D9 F091 BEQ 0x00EC
00DA E040 LDI R20,0
00DB E050 LDI R21,0
00DC E063 LDI R22,3
00DD E070 LDI R23,0
00DE 90400062 LDS R4,_wait_cnter+2
00E0 90500063 LDS R5,_wait_cnter+3
00E2 90200060 LDS R2,_wait_cnter
00E4 90300061 LDS R3,_wait_cnter+1
00E6 1624 CP R2,R20
00E7 0635 CPC R3,R21
00E8 0646 CPC R4,R22
00E9 0657 CPC R5,R23
00EA F408 BCC 0x00EC
00EB CFB4 RJMP 0x00A0
(0120) write7279(BLINKCTL,0xff); // 清除閃爍設(shè)置
00EC EF2F LDI R18,0xFF
00ED E808 LDI R16,0x88
00EE D12E RCALL _write7279
(0121)
(0122) //******************************************
(0123) // 快速計數(shù)演示
(0124) //******************************************
(0125) for (j=0;j<5;j++) // 計數(shù)初始值為00000
00EF 2422 CLR R2
00F0 92200068 STS _j,R2
00F2 C018 RJMP 0x010B
(0126) {
(0127) digit[j]=0;
00F3 E689 LDI R24,0x69
00F4 E090 LDI R25,0
00F5 91E00068 LDS R30,_j
00F7 27FF CLR R31
00F8 0FE8 ADD R30,R24
00F9 1FF9 ADC R31,R25
00FA 2422 CLR R2
00FB 8220 STD Z+0,R2
(0128) write7279(DECODE0+j,digit[j]);
00FC 91E00068 LDS R30,_j
00FE 27FF CLR R31
00FF 0FE8 ADD R30,R24
0100 1FF9 ADC R31,R25
0101 8120 LDD R18,Z+0
0102 91000068 LDS R16,_j
0104 5800 SUBI R16,0x80
0105 D117 RCALL _write7279
0106 91800068 LDS R24,_j
0108 5F8F SUBI R24,0xFF
0109 93800068 STS _j,R24
010B 91800068 LDS R24,_j
010D 3085 CPI R24,5
010E F320 BCS 0x00F3
010F C065 RJMP 0x0175
(0129) }
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -