📄 no.lis
字号:
.module no.c
.area text(rom, con, rel)
0000 .dbfile D:\软件\hd7279disp\no.c
0000 .dbfunc e port_init _port_init fV
.even
0000 _port_init::
0000 .dbline -1
0000 .dbline 51
0000 ; /*------------------------------------------------------------
0000 ; ;------------------------------------------------------------
0000 ; ; HD7279 LIB
0000 ; ; V0.1c
0000 ; ; zhongwh
0000 ; ; Copyright 2003-2005
0000 ; ; Email: hfkj01@163.com
0000 ; ; mtel : 13708004895
0000 ; ; 2005-9-28 15:38:52
0000 ; ; ICC-AVR application builder
0000 ; ;-------------------------------------------------------------
0000 ; ;-------------------------------------------------------------
0000 ; ; Target : M16
0000 ; ; Crystal: 8Mhz
0000 ; ;-------------------------------------------------------------
0000 ; ;-------------------------------------------------------------*/
0000 ; #include <iom16v.h>
0000 ; #include <macros.h>
0000 ; //HD7279_DATA
0000 ; #define HD7279_DATA_H PORTB|=BIT(PB0)
0000 ; #define HD7279_DATA_L PORTB&=~BIT(PB0)
0000 ; //HD7279_CLK
0000 ; #define HD7279_CLK_H PORTB|=BIT(PB1)
0000 ; #define HD7279_CLK_L PORTB&=~BIT(PB1)
0000 ; //HD7279_CS
0000 ; #define HD7279_CS_H PORTB|=BIT(PB2)
0000 ; #define HD7279_CS_L PORTB&=~BIT(PB2)
0000 ; //DDR
0000 ; #define HD7279_DDR_H DDRB|=BIT(PB0)
0000 ; #define HD7279_DDR_L DDRB&=~BIT(PB0)
0000 ; //
0000 ; #define HD7279_DATA PINB
0000 ; //*** 函数定义 ***
0000 ; void long_delay(void); // 长延时
0000 ; void short_delay(void); // 短暂延时
0000 ; void write7279(unsigned char, unsigned char); // 写入到HD7279
0000 ; unsigned char read7279(unsigned char); // 从HD7279读出
0000 ; void send_byte(unsigned char); // 发送一个字节
0000 ; unsigned char receive_byte(void); // 接收一个字节
0000 ; void delay_us(int); // 微秒延时
0000 ; void dely_ms(unsigned int); // 毫秒延时
0000 ;
0000 ; //*** 变量及I/O口定义 ***
0000 ; unsigned char digit[8];
0000 ; unsigned char j,k,key_number;
0000 ; unsigned int tmr;
0000 ; unsigned long wait_cnter;
0000 ;
0000 ; //***I/O***
0000 ; void port_init(void)
0000 ; {
0000 .dbline 52
0000 ; PORTB = 0x00;
0000 2224 clr R2
0002 28BA out 0x18,R2
0004 .dbline 53
0004 ; DDRB = 0x07;
0004 87E0 ldi R24,7
0006 87BB out 0x17,R24
0008 .dbline 54
0008 ; PORTC = 0x00;
0008 25BA out 0x15,R2
000A .dbline 55
000A ; DDRC = 0x07;
000A 84BB out 0x14,R24
000C .dbline 56
000C ; MCUCR = 0x02;
000C 82E0 ldi R24,2
000E 85BF out 0x35,R24
0010 .dbline 57
0010 ; GICR = 0x40;
0010 80E4 ldi R24,64
0012 8BBF out 0x3b,R24
0014 .dbline 58
0014 ; TIMSK = 0x00; //timer interrupt sources
0014 29BE out 0x39,R2
0016 .dbline 59
0016 ; SEI(); //re-enable interrupts
0016 7894 sei
0018 .dbline -2
0018 .dbline 60
0018 ; }
0018 L1:
0018 .dbline 0 ; func end
0018 0895 ret
001A .dbend
001A .dbfunc e main _main fI
.even
001A _main::
001A .dbline -1
001A .dbline 81
001A ;
001A ; //****** HD7279A 指令 ******
001A ; #define CMD_RESET 0xa4
001A ; #define CMD_TEST 0xbf
001A ; #define DECODE0 0x80
001A ; #define DECODE1 0xc8
001A ; #define CMD_READ 0x15
001A ; #define UNDECODE 0x90
001A ; #define RTL_CYCLE 0xa3
001A ; #define RTR_CYCLE 0xa2
001A ; #define RTL_UNCYL 0xa1
001A ; #define RTR_UNCYL 0xa0
001A ; #define ACTCTL 0x98
001A ; #define SEGON 0xe0
001A ; #define SEGOFF 0xc0
001A ; #define BLINKCTL 0x88
001A ;
001A ;
001A ; //
001A ; main()
001A ; {
001A .dbline 82
001A ; port_init();
001A F2DF xcall _port_init
001C BFC1 xjmp L4
001E L3:
001E .dbline 84
001E ; while (1)
001E ; {
001E .dbline 85
001E 2224 clr R2
0020 3324 clr R3
0022 30920500 sts _tmr+1,R3
0026 20920400 sts _tmr,R2
002A 09C0 xjmp L9
002C L6:
002C .dbline 85
002C L7:
002C .dbline 85
002C 80910400 lds R24,_tmr
0030 90910500 lds R25,_tmr+1
0034 0196 adiw R24,1
0036 90930500 sts _tmr+1,R25
003A 80930400 sts _tmr,R24
003E L9:
003E .dbline 85
003E ; for (tmr=0;tmr<0x2000;tmr++); // 上电延时
003E 80910400 lds R24,_tmr
0042 90910500 lds R25,_tmr+1
0046 8030 cpi R24,0
0048 E0E2 ldi R30,32
004A 9E07 cpc R25,R30
004C 78F3 brlo L6
004E .dbline 86
004E ; send_byte(CMD_RESET); // 复位HD7279A
004E 04EA ldi R16,164
0050 BDD1 xcall _send_byte
0052 .dbline 91
0052 ;
0052 ; //******************************************
0052 ; // 测试指令演示
0052 ; //******************************************
0052 ; send_byte(CMD_TEST); // 测试指令
0052 0FEB ldi R16,191
0054 BBD1 xcall _send_byte
0056 .dbline 92
0056 ; for (j=0;j<3;j++) // 延时约3秒
0056 2224 clr R2
0058 20920800 sts _j,R2
005C 08C0 xjmp L13
005E L10:
005E .dbline 93
005E .dbline 94
005E 04E6 ldi R16,100
0060 10E0 ldi R17,0
0062 10D2 xcall _dely_ms
0064 .dbline 95
0064 L11:
0064 .dbline 92
0064 80910800 lds R24,_j
0068 8F5F subi R24,255 ; addi 1
006A 80930800 sts _j,R24
006E L13:
006E .dbline 92
006E 80910800 lds R24,_j
0072 8330 cpi R24,3
0074 A0F3 brlo L10
0076 .dbline 96
0076 ; {
0076 ; dely_ms(100);
0076 ; }
0076 ; send_byte(CMD_RESET); // 清除显示
0076 04EA ldi R16,164
0078 A9D1 xcall _send_byte
007A .dbline 103
007A ;
007A ; //**********************************************
007A ; // 闪烁指令及键盘接口测试
007A ; // 将用户按键的键码显示出来, 如果10秒内无按键
007A ; // 或按S0键即进入下一步演示
007A ; //**********************************************
007A ; wait_cnter=0;
007A 40E0 ldi R20,0
007C 50E0 ldi R21,0
007E 60E0 ldi R22,0
0080 70E0 ldi R23,0
0082 50930100 sts _wait_cnter+1,R21
0086 40930000 sts _wait_cnter,R20
008A 70930300 sts _wait_cnter+2+1,R23
008E 60930200 sts _wait_cnter+2,R22
0092 .dbline 104
0092 ; key_number=0xff;
0092 8FEF ldi R24,255
0094 80930600 sts _key_number,R24
0098 .dbline 105
0098 ; write7279(BLINKCTL,0xfc); // 第1、2两位设为闪烁显示
0098 2CEF ldi R18,252
009A 08E8 ldi R16,136
009C 83D1 xcall _write7279
009E .dbline 106
009E ; write7279(UNDECODE,0X08); // 在第1位显示下划线'_'
009E 28E0 ldi R18,8
00A0 00E9 ldi R16,144
00A2 80D1 xcall _write7279
00A4 .dbline 107
00A4 ; write7279(UNDECODE+1,0x08); // 在第2位显示下划线'_'
00A4 28E0 ldi R18,8
00A6 01E9 ldi R16,145
00A8 7DD1 xcall _write7279
00AA L14:
00AA .dbline 109
00AA ; do
00AA ; {
00AA .dbline 110
00AA ; if (!(PIND&0x04)) // 如果有键按下
00AA 8299 sbic 0x10,2
00AC 1CC0 rjmp L17
00AE .dbline 111
00AE ; {
00AE .dbline 112
00AE ; key_number=read7279(CMD_READ); // 读出键码
00AE 05E1 ldi R16,21
00B0 84D1 xcall _read7279
00B2 00930600 sts _key_number,R16
00B6 .dbline 113
00B6 ; write7279(DECODE1+1,key_number/16); // 在第2位显示键码高8位
00B6 202F mov R18,R16
00B8 2295 swap R18
00BA 2F70 andi R18,#0x0F
00BC 09EC ldi R16,201
00BE 72D1 xcall _write7279
00C0 .dbline 114
00C0 ; write7279(DECODE1,key_number&0x0f); // 在第1位显示键码低8位
00C0 20910600 lds R18,_key_number
00C4 2F70 andi R18,15
00C6 08EC ldi R16,200
00C8 6DD1 xcall _write7279
00CA L19:
00CA .dbline 115
00CA L20:
00CA .dbline 115
00CA ; while (!(PIND&0x04)); // 等待按键放开
00CA 829B sbis 0x10,2
00CC FECF rjmp L19
00CE .dbline 116
00CE ; wait_cnter=0;
00CE 40E0 ldi R20,0
00D0 50E0 ldi R21,0
00D2 60E0 ldi R22,0
00D4 70E0 ldi R23,0
00D6 50930100 sts _wait_cnter+1,R21
00DA 40930000 sts _wait_cnter,R20
00DE 70930300 sts _wait_cnter+2+1,R23
00E2 60930200 sts _wait_cnter+2,R22
00E6 .dbline 117
00E6 ; }
00E6 L17:
00E6 .dbline 118
00E6 ; wait_cnter++;
00E6 41E0 ldi R20,1
00E8 50E0 ldi R21,0
00EA 60E0 ldi R22,0
00EC 70E0 ldi R23,0
00EE 40900200 lds R4,_wait_cnter+2
00F2 50900300 lds R5,_wait_cnter+2+1
00F6 20900000 lds R2,_wait_cnter
00FA 30900100 lds R3,_wait_cnter+1
00FE 240E add R2,R20
0100 351E adc R3,R21
0102 461E adc R4,R22
0104 571E adc R5,R23
0106 30920100 sts _wait_cnter+1,R3
010A 20920000 sts _wait_cnter,R2
010E 50920300 sts _wait_cnter+2+1,R5
0112 40920200 sts _wait_cnter+2,R4
0116 .dbline 119
0116 L15:
0116 .dbline 119
0116 ; } while (key_number!=0 && wait_cnter<0x30000); // 如果按键为‘0’和超时则进入下一步演示
0116 20900600 lds R2,_key_number
011A 2220 tst R2
011C 91F0 breq L22
011E 40E0 ldi R20,0
0120 50E0 ldi R21,0
0122 63E0 ldi R22,3
0124 70E0 ldi R23,0
0126 40900200 lds R4,_wait_cnter+2
012A 50900300 lds R5,_wait_cnter+2+1
012E 20900000 lds R2,_wait_cnter
0132 30900100 lds R3,_wait_cnter+1
0136 2416 cp R2,R20
0138 3506 cpc R3,R21
013A 4606 cpc R4,R22
013C 5706 cpc R5,R23
013E 08F4 brsh X1
0140 B4CF xjmp L14
0142 X1:
0142 L22:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -