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

📄 zlg7290.lis

📁 数码管 按键芯片zlg7290的atmega128 的c语言程序
💻 LIS
📖 第 1 页 / 共 3 页
字号:
                        .module zlg7290.C
                        .area text(rom, con, rel)
 0000                   .dbfile E:\PQ-1A\我的AVR\zlg7290/TWI.C
 0000                   .dbfunc e delay _delay fV
 0000           ;              x -> R20,R21
 0000           ;              y -> R22,R23
 0000           ;              z -> R16,R17
                        .even
 0000           _delay::
 0000 0E940000          xcall push_gset2
 0004                   .dbline -1
 0004                   .dbline 15
 0004           ; #include <iom128v.h>
 0004           ; #include <iom128.h>
 0004           ; #include <macros.h>
 0004           ; #include <stdio.h>
 0004           ; #include "TWI.C"
 0004           ; #include "zlg7290.h"
 0004           ; 
 0004           ; #define uchar unsigned char
 0004           ; #define uint unsigned int
 0004           ; 
 0004           ; 
 0004           ; /*
 0004           ; 函数:ZLG7290_WriteReg()
 0004           ; 功能:向ZLG7290的某个内部寄存器写入数据
 0004           ; 参数:
 0004                   .dbline 17
 0004           ;       RegAddr:ZLG7290的内部寄存器地址
 0004           ;       dat:要写入的数据
 0004 A801              movw R20,R16
 0006 0AC0              xjmp L5
 0008           L2:
 0008                   .dbline 18
 0008 6CE4              ldi R22,1100
 000A 74E0              ldi R23,4
 000C 02C0              xjmp L9
 000E           L6:
 000E                   .dbline 18
 000E           L7:
 000E                   .dbline 18
 000E 6150              subi R22,1
 0010 7040              sbci R23,0
 0012           L9:
 0012                   .dbline 18
 0012 6030              cpi R22,0
 0014 6707              cpc R22,R23
 0016 D9F7              brne L6
 0018           X0:
 0018           L3:
 0018                   .dbline 17
 0018 4150              subi R20,1
 001A 5040              sbci R21,0
 001C           L5:
 001C                   .dbline 17
 001C 4030              cpi R20,0
 001E 4507              cpc R20,R21
 0020 99F7              brne L2
 0022           X1:
 0022                   .dbline -2
 0022                   .dbline 19
 0022           ; 返回:
 0022           ;       1:正常
 0022           L1:
 0022 0E940000          xcall pop_gset2
 0026                   .dbline 0 ; func end
 0026 0895              ret
 0028                   .dbsym r x 20 i
 0028                   .dbsym r y 22 i
 0028                   .dbsym r z 16 i
 0028                   .dbend
 0028                   .dbfunc e TWI_init _TWI_init fV
                        .even
 0028           _TWI_init::
 0028                   .dbline -1
 0028                   .dbline 28
 0028           ;       0:访问ZLG7290时出现异常
 0028           ; */
 0028           ; uchar ZLG7290_WriteReg(uchar RegAddr, uchar dat)
 0028           ; {
 0028           ;    uchar b;
 0028           ;    b = TWI_write(ZLG7290_I2C_ADDR,RegAddr,1,&dat);
 0028           ;    return b;
 0028           ; }
 0028           ; 
 0028                   .dbline 29
 0028           ; /*
 0028 80E2              ldi R24,32
 002A 80937000          sts 112,R24
 002E                   .dbline 30
 002E           ; 函数:ZLG7290_ReadReg()
 002E 2224              clr R2
 0030 20927100          sts 113,R2
 0034                   .dbline 31
 0034           ; 功能:从ZLG7290的某个内部寄存器读出数据
 0034 84E4              ldi R24,68
 0036 80937400          sts 116,R24
 003A                   .dbline -2
 003A                   .dbline 32
 003A           ; 参数:
 003A           L10:
 003A                   .dbline 0 ; func end
 003A 0895              ret
 003C                   .dbend
 003C                   .dbfunc e TWI_start _TWI_start fc
                        .even
 003C           _TWI_start::
 003C                   .dbline -1
 003C                   .dbline 42
 003C           ;       RegAddr:ZLG7290的内部寄存器地址
 003C           ;       *dat:保存读出的数据
 003C           ; 返回:
 003C           ;       1:正常
 003C           ;       0:访问ZLG7290时出现异常
 003C           ; */
 003C           ; uchar ZLG7290_ReadReg(uchar RegAddr, uchar *dat)
 003C           ; {
 003C           ;       uchar b;
 003C           ;       b=TWI_read(ZLG7290_I2C_ADDR,RegAddr,1,dat);
 003C                   .dbline 43
 003C           ;       return b;
 003C 84EA              ldi R24,164
 003E 80937400          sts 116,R24
 0042           L12:
 0042                   .dbline 44
 0042           L13:
 0042                   .dbline 44
 0042           ; }
 0042 20907400          lds R2,116
 0046 27FE              sbrs R2,7
 0048 FCCF              rjmp L12
 004A                   .dbline 45
 004A           ; 
 004A 01E0              ldi R16,1
 004C                   .dbline -2
 004C           L11:
 004C                   .dbline 0 ; func end
 004C 0895              ret
 004E                   .dbend
 004E                   .dbfunc e TWI_stop _TWI_stop fV
                        .even
 004E           _TWI_stop::
 004E                   .dbline -1
 004E                   .dbline 49
 004E           ; /*
 004E           ; 函数:ZLG7290_cmd()
 004E           ; 功能:向ZLG7290发送控制命令
 004E           ; 参数:
 004E                   .dbline 50
 004E           ;       cmd0:写入CmdBuf0寄存器的命令字(第1字节)
 004E 84E9              ldi R24,148
 0050 80937400          sts 116,R24
 0054                   .dbline -2
 0054                   .dbline 51
 0054           ;       cmd1:写入CmdBuf1寄存器的命令字(第2字节)
 0054           L15:
 0054                   .dbline 0 ; func end
 0054 0895              ret
 0056                   .dbend
 0056                   .dbfunc e TWI_writeB _TWI_writeB fc
 0056           ;            ack -> R20
 0056           ;              c -> R16
                        .even
 0056           _TWI_writeB::
 0056 0E940000          xcall push_gset1
 005A                   .dbline -1
 005A                   .dbline 63
 005A           ; 返回:
 005A           ;       1:正常
 005A           ;       0:访问ZLG7290时出现异常
 005A           ; */
 005A           ; uchar ZLG7290_cmd(uchar cmd0, uchar cmd1)
 005A           ; {
 005A           ;     uchar b;
 005A           ;       uchar buf[2];
 005A           ;       buf[0] = cmd0;
 005A           ;       buf[1] = cmd1;
 005A           ;       b=TWI_write(ZLG7290_I2C_ADDR,ZLG7290_CmdBuf,2,buf);
 005A           ;       return b;
 005A                   .dbline 64
 005A           ; }
 005A 41E0              ldi R20,1
 005C                   .dbline 65
 005C           ; 
 005C 00937300          sts 115,R16
 0060                   .dbline 66
 0060           ; /*
 0060 84E8              ldi R24,132
 0062 80937400          sts 116,R24
 0066           L17:
 0066                   .dbline 67
 0066           L18:
 0066                   .dbline 67
 0066           ; 函数:ZLG7290_SegOnOff()
 0066 20907400          lds R2,116
 006A 27FE              sbrs R2,7
 006C FCCF              rjmp L17
 006E                   .dbline 68
 006E           ; 功能:段寻址,单独点亮或熄灭数码管(或LED)中的某一段
 006E 80917100          lds R24,113
 0072 887F              andi R24,248
 0074 8831              cpi R24,24
 0076 09F0              breq L20
 0078                   .dbline 69
 0078           ; 参数:
 0078 4427              clr R20
 007A           L20:
 007A                   .dbline 70
 007A           ;       seg:取值0~63,表示数码管(或LED)的段号
 007A 042F              mov R16,R20
 007C                   .dbline -2
 007C           L16:
 007C 0E940000          xcall pop_gset1
 0080                   .dbline 0 ; func end
 0080 0895              ret
 0082                   .dbsym r ack 20 c
 0082                   .dbsym r c 16 c
 0082                   .dbend
 0082                   .dbfunc e TWI_readB _TWI_readB fc
 0082           ;            ack -> R16
                        .even
 0082           _TWI_readB::
 0082                   .dbline -1
 0082                   .dbline 81
 0082           ;       b:0表示熄灭,1表示点亮
 0082           ; 返回:
 0082           ;       1:正常
 0082           ;       0:访问ZLG7290时出现异常
 0082           ; 说明:
 0082           ;       在每一位数码管中,段号顺序按照“a,b,c,d,e,f,g,dp”进行
 0082           ; */
 0082           ; uchar ZLG7290_SegOnOff(uchar seg, uchar b)
 0082           ; {
 0082           ;       uchar cmd,a;
 0082           ;       cmd = seg & 0x3F;
 0082                   .dbline 82
 0082           ;       if ( b ) cmd |= 0x80;
 0082 0023              tst R16
 0084 21F0              breq L23
 0086                   .dbline 83
 0086           ;     a=ZLG7290_cmd(0x01,cmd);
 0086 84EC              ldi R24,196
 0088 80937400          sts 116,R24
 008C 03C0              xjmp L26
 008E           L23:
 008E                   .dbline 85
 008E           ;       return a;
 008E           ; }
 008E 84E8              ldi R24,132
 0090 80937400          sts 116,R24
 0094           L25:
 0094                   .dbline 86
 0094           L26:
 0094                   .dbline 86
 0094           ; /*
 0094 20907400          lds R2,116
 0098 27FE              sbrs R2,7
 009A FCCF              rjmp L25
 009C                   .dbline 87
 009C           ; 函数:ZLG7290_Download()
 009C 00917300          lds R16,115
 00A0                   .dbline -2
 00A0           L22:
 00A0                   .dbline 0 ; func end
 00A0 0895              ret
 00A2                   .dbsym r ack 16 c
 00A2                   .dbend
 00A2                   .dbfunc e TWI_page_write _TWI_page_write fc
 00A2           ;              i -> R20
 00A2           ;              b -> R22
 00A2           ;            arr -> R10,R11
 00A2           ;              n -> R12
 00A2           ;           addr -> R20
 00A2           ;         devadd -> R14
                        .even
 00A2           _TWI_page_write::
 00A2 0E940000          xcall push_gset5
 00A6 422F              mov R20,R18
 00A8 E02E              mov R14,R16
 00AA CA84              ldd R12,y+10
 00AC AC84              ldd R10,y+12
 00AE BD84              ldd R11,y+13
 00B0                   .dbline -1
 00B0                   .dbline 106
 00B0           ; 功能:下载数据并译码
 00B0           ; 参数:
 00B0           ;       addr:取值0~7,显示缓存DpRam0~DpRam7的编号
 00B0           ;       dp:是否点亮该位的小数点,0-熄灭,1-点亮
 00B0           ;       flash:控制该位是否闪烁,0-不闪烁,1-闪烁
 00B0           ;       dat:取值0~31,表示要显示的数据
 00B0           ; 返回:
 00B0           ;       1:正常
 00B0           ;       0:访问ZLG7290时出现异常
 00B0           ; 说明:
 00B0           ;       显示数据具体的译码方式请参见ZLG7290的数据手册
 00B0           ; */
 00B0           ; uchar ZLG7290_Download(uchar addr, uchar dp, uchar f, uchar dat)
 00B0           ; {
 00B0           ;       uchar cmd0;
 00B0           ;       uchar cmd1;
 00B0           ;       uchar b;
 00B0           ;       cmd0 = addr & 0x0F;
 00B0           ;       cmd0 |= 0x60;
 00B0                   .dbline 107
 00B0           ;       cmd1 = dat & 0x1F;
 00B0 6627              clr R22
 00B2                   .dbline 108
 00B2           ;       if ( dp==1 ) cmd1 |= 0x80;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -