⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 no.lis

📁 ICC编译绝对可用M16的HD7279驱动测试程序
💻 LIS
📖 第 1 页 / 共 4 页
字号:
                        .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 + -