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

📄 main.lst

📁 keilc关于LM75A温度计的使用例程
💻 LST
📖 第 1 页 / 共 5 页
字号:
                +1   633     ;       if ( c == '-' )
009E BE2D02     +1   634             CJNE    R6, #'-', DispChar_elseif
                +1   635     ;       {
                +1   636     ;               DispBuf[x] = 0x40;
                +1   637     ;       }
00A1 8019       +1   638             SJMP    DispChar_endif
                +1   639     ;       else if ( ( c >= '0' ) && ( c <= '9' ) )
00A3            +1   640     DispChar_elseif:
                +1   641             BLO     R6, #'0', DispChar_endif        ;宏BLO的定义见Branch.INC
                +1   646             BHI     R6, #'9', DispChar_endif        ;宏BHI的定义见Branch.INC
                +1   651     ;       {
                +1   652     ;               DispBuf[x] = Tab[c-'0'];
00AF 7430       +1   653                     MOV     A, #DispBuf
00B1 2F         +1   654                     ADD     A, R7
00B2 F8         +1   655                     MOV     R0, A
00B3 EE         +1   656                     MOV     A, R6
00B4 C3         +1   657                     CLR     C
00B5 9430       +1   658                     SUBB    A, #'0'
00B7 9000BD     +1   659                     MOV     DPTR, #DispChar_Tab
A51 MACRO ASSEMBLER  MAIN                                                                 06/23/2006 11:55:35 PAGE    11

00BA 93         +1   660                     MOVC    A, @A+DPTR
00BB F6         +1   661                     MOV     @R0, A
                +1   662     ;       }
00BC            +1   663     DispChar_endif:
                +1   664     ;}
00BC 22         +1   665             RET
00BD            +1   666     DispChar_Tab:
                +1   667     ;               0123456789的数码管字型数据
00BD 3F065B4F   +1   668             DB      0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F
00C1 666D7D07                
00C5 7F6F                    
                +1   669     
                +1   670     
                +1   671     ;*************************************************************************
                +1   672     ;函数:DispStr()
                +1   673     ;功能:在数码管上显示字符串
                +1   674     ;参数:
                +1   675     ;       x:数码管的坐标位置(0~7)
                +1   676     ;       *s:要显示的字符串(字符仅限十进制数字和减号)
                +1   677     ;*************************************************************************
                +1   678     ;void DispStr(unsigned char x, unsigned char *s)
                +1   679     ;x = R7
                +1   680     ;*s = (0x08,0x09,0x0A)
00C7            +1   681     DispStr:
                +1   682     ;{
00C7 C002       +1   683             PUSH    0x02
00C9 C003       +1   684             PUSH    0x03
00CB C006       +1   685             PUSH    0x06
                +1   686     ;       unsigned char c;
                +1   687     ;       指定:c = R3
00CD EF         +1   688             MOV     A, R7
00CE FA         +1   689             MOV     R2, A
                +1   690     ;       for (;;)
00CF            +1   691     DispStr_for:
                +1   692     ;       {
                +1   693     ;               c = *s;
00CF A908       +1   694                     MOV     R1, 0x08
00D1 850983     +1   695                     MOV     DPH, 0x09
00D4 850A82     +1   696                     MOV     DPL, 0x0A
00D7 12001E     +1   697                     LCALL   BytePtrLD
00DA FB         +1   698                     MOV     R3, A
                +1   699     ;               if ( c == '\0' ) break;
00DB 6012       +1   700                     JZ      DispStr_endfor
                +1   701     ;               s++;
                +1   702                     INC_W   0x09, 0x0A
                +1   708     ;               DispChar(x,c);
00E5 EB         +1   709                     MOV     A, R3
00E6 FE         +1   710                     MOV     R6, A
00E7 EA         +1   711                     MOV     A, R2
00E8 FF         +1   712                     MOV     R7, A
00E9 120097     +1   713                     LCALL   DispChar
                +1   714     ;               x++;
00EC 0A         +1   715                     INC     R2
                +1   716     ;       }
00ED 80E0       +1   717             SJMP    DispStr_for
00EF            +1   718     DispStr_endfor:
00EF D006       +1   719             POP     0x06
00F1 D003       +1   720             POP     0x03
00F3 D002       +1   721             POP     0x02
                +1   722     ;}
00F5 22         +1   723             RET
                +1   724     
                +1   725     
                +1   726     ;*************************************************************************
                +1   727     ;函数:DispDotOn()
                +1   728     ;功能:显示指定位的小数点
A51 MACRO ASSEMBLER  MAIN                                                                 06/23/2006 11:55:35 PAGE    12

                +1   729     ;参数:x为数码管坐标
                +1   730     ;*************************************************************************
                +1   731     ;void DispDotOn(unsigned char x)
                +1   732     ;x = R7
00F6            +1   733     DispDotOn:
                +1   734     ;{
                +1   735     ;       DispBuf[7-x] |= 0x80;
00F6 7407       +1   736             MOV     A, #7
00F8 C3         +1   737             CLR     C
00F9 9F         +1   738             SUBB    A, R7
00FA 2430       +1   739             ADD     A, #DispBuf
00FC F8         +1   740             MOV     R0, A
00FD E6         +1   741             MOV     A, @R0
00FE 4480       +1   742             ORL     A, #0x80
0100 F6         +1   743             MOV     @R0, A
                +1   744     ;}
0101 22         +1   745             RET
                +1   746     
                +1   747     
                +1   748     ;*************************************************************************
                +1   749     ;函数:DispInit()
                +1   750     ;功能:数码管扫描显示初始化
                +1   751     ;*************************************************************************
                +1   752     ;void DispInit()
0102            +1   753     DispInit:
                +1   754     ;{
                +1   755     ;       DispClear();
0102 12008D     +1   756             LCALL   DispClear
                +1   757     ;       EA = 0;
                +1   758     ;       TMOD &= 0x0F;
                +1   759     ;       TMOD |= 0x10;
                +1   760     ;       TH1 = 0xFC;
                +1   761     ;       TL1 = 0x66;
                +1   762     ;       TR1 = 1;
                +1   763     ;       ET1 = 1;
                +1   764     ;       EA = 1;
0105 C2AF       +1   765             CLR     EA
0107 53890F     +1   766             ANL     TMOD, #0x0F
010A 438910     +1   767             ORL     TMOD, #0x10
010D 758DFC     +1   768             MOV     TH1, #0xFC
0110 758B66     +1   769             MOV     TL1, #0x66
0113 D28E       +1   770             SETB    TR1
0115 D2AB       +1   771             SETB    ET1
0117 D2AF       +1   772             SETB    EA
                +1   773     ;}
0119 22         +1   774             RET
                +1   775     
                     776     ;$include (I2C.INC) ;I2C总线驱动程序
                +1   777     ;*************************************************************************
                +1   778     ;       I2C.INC
                +1   779     ;       标准80C51单片机模拟I2C总线的主机程序头文件
                +1   780     ;       Copyright (c) 2006,广州周立功单片机发展有限公司
                +1   781     ;       All rights reserved.
                +1   782     ;       本程序仅供学习参考,不提供任何可靠性方面的担保;请勿用于商业目的
                +1   783     ;*************************************************************************
                +1   784     
                +1   785     
                +1   786     ;*************************************************************************
                +1   787     ;模拟I2C总线的引脚定义
                +1   788     ;*************************************************************************
  00B4          +1   789     I2C_SCL BIT     P3.4
  00B5          +1   790     I2C_SDA BIT     P3.5
                +1   791     
                +1   792     
                +1   793     ;*************************************************************************
                +1   794     ;定义I2C总线时钟的延时值,要根据实际情况修改,取值1~255
A51 MACRO ASSEMBLER  MAIN                                                                 06/23/2006 11:55:35 PAGE    13

                +1   795     ;SCL信号周期约为(I2C_DELAY_VALUE*4+12)个机器周期
                +1   796     ;*************************************************************************
  0005          +1   797     I2C_DELAY_VALUE EQU     5
                +1   798     
                +1   799     
                +1   800     ;*************************************************************************
                +1   801     ;定义I2C总线停止后在下一次开始之前的等待时间,取值1~65535
                +1   802     ;等待时间约为(I2C_STOP_WAIT_VALUE*8)个机器周期
                +1   803     ;对于多数器件取值为1即可;但对于某些器件来说,较长的延时是必须的
                +1   804     ;*************************************************************************
  0001          +1   805     I2C_STOP_WAIT_VALUE     EQU     1
                +1   806     
                +1   807     
                +1   808     ;*************************************************************************
                +1   809     ;定义延时变量,用于宏I2C_Delay()
                +1   810     ;*************************************************************************
                +1   811     ;unsigned char data I2C_Delay_t;
  0039          +1   812     I2C_Delay_t     DATA    GLOBAL_IRAM     ;在主文件里要用SET定义GLOBAL_IRAM的初值
  003A          +1   813     GLOBAL_IRAM     SET     GLOBAL_IRAM+1
                +1   814     
                +1   815     
                +1   816     ;*************************************************************************
                +1   817     ;宏定义:I2C_Delay
                +1   818     ;功能:延时,模拟I2C总线专用
                +1   819     ;*************************************************************************
                +1   820     I2C_Delay       MACRO
                +1   821                     MOV     I2C_Delay_t, #I2C_DELAY_VALUE
                +1   822                     DJNZ    I2C_Delay_t, $
                +1   823                     ENDM
                +1   824     
                +1   825     
                +1   826     ;*************************************************************************
                +1   827     ;函数:I2C_Init()
                +1   828     ;功能:I2C总线初始化,使总线处于空闲状态
                +1   829     ;说明:在main()函数的开始处,通常应当要执行一次本函数
                +1   830     ;*************************************************************************
                +1   831     ;void I2C_Init()
011A            +1   832     I2C_Init:
                +1   833     ;{
                +1   834     ;       I2C_SCL = 1;
                +1   835     ;       I2C_Delay();
                +1   836     ;       I2C_SDA = 1;
                +1   837     ;       I2C_Delay();
011A D2B4       +1   838             SETB    I2C_SCL
                +1   839             I2C_Delay
0122 D2B5       +1   842             SETB    I2C_SDA
                +1   843             I2C_Delay
                +1   846     ;}
012A 22         +1   847             RET
                +1   848     
                +1   849     
                +1   850     ;*************************************************************************
                +1   851     ;函数:I2C_Start()
                +1   852     ;功能:产生I2C总线的起始状态
                +1   853     ;说明:
                +1   854     ;       SCL处于高电平期间,当SDA出现下降沿时启动I2C总线
                +1   855     ;       不论SDA和SCL处于什么电平状态,本函数总能正确产生起始状态
                +1   856     ;       本函数也可以用来产生重复起始状态
                +1   857     ;       本函数执行后,I2C总线处于忙状态
                +1   858     ;*************************************************************************
                +1   859     ;void I2C_Start()
                +1   860     ;{
012B            +1   861     I2C_Start:

⌨️ 快捷键说明

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