找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4596|回复: 3
收起左侧

求好心人帮忙

[复制链接]
ID:27723 发表于 2011-1-9 16:45 | 显示全部楼层 |阅读模式
;定义数据存储单元
AKEY  EQU  10H   ;键值单元
BKEY  EQU  11H
CKEY  EQU  12H
DKEY  EQU  13H
JPSD  EQU  14H   ;节拍速度
JPFD  EQU  15H   ;节拍分度
XC1   EQU  27H   ;显示缓存
XC2   EQU  28H
XC3   EQU  29H
XC4   EQU  2AH
LED1  EQU  2BH   ;显示代码
LED2  EQU  2CH
LED3  EQU  2DH
LED4  EQU  2EH
GEWEI EQU  30H   ;个位
SIWEI EQU  31H   ;十位
BEIWEI EQU 32H   ;百位
KEYMA EQU  33H
JPBS  EQU  34H
PAISU EQU  35H   ;拍速
SS    EQU  36H
XLL   EQU  P1.0  ;声音脚输出
;主程序
   ORG   0000H
   LJMP  MAIN
   ORG   001BH
   LJMP  TDISP
;初始化
   ORG   0030H
 MAIN:MOV  P0,#0
      MOV  SP,#60H
      MOV  0ah,#1
      MOV  JPSD,#72
      MOV  JPFD,#3
      MOV  PAISU,#1
      MOV  AKEY,#0
      MOV  BKEY,#1
      MOV  P1,#0F0H
      MOV  IE,#8AH
      MOV  TMOD,#11H
      MOV  TH1,#0EAH      ;4ms参数
      MOV  TL1,#0F0H
      SET  TR1
      MOV  P3,#0F0H
;键盘扫描处理
   MKEY:LCALL KEY
      JZ  MLOOP
      LCALL D10MS
      LCALL KEY
      JZ  MLOOP
   KPCL:
   CJNE  A,#10H,MLOOP;A键显示代码
   MOV  R3,AKEY
   CJNE R3,#1,KPINC;其他键不处理
      MOV  AKEY,#00
      LJMP KEY11
   KPINC:INC AKEY
   KEY11:LCALL KEY
      JNZ  KEY11
      LCALL D10MS
      JNZ  KEY11
   DISAJ: MOV  XC1,,10H;显示功能代码2秒
      MOV  XC2,#10H
      MOV  XC3,#10H
      MOV  XC4,AKEY
   LCALL DISPLAY
   MOV 5DH,#200;延迟2秒
      MD50MS:LACLL  D10MS
   DJNZ 5DH,MD50MS
      MLOOP:MOV A,AKEY
      MJIEP: CJNE A,#1,MDISPLAY;调节状态
      LCALL TIAOJ
   MDISPLAY:
      LCALL DISPLAY
   MD101:LJMP MKEY
   ;读键盘
   KEY:  MOV A,P1
      CPL A
      ANL A,#0F0H
      MOV KEYMA,A
      RET
   ;延迟10MS
      D10MS: MOV 5FH,#10    
      DLP1:  MOV 5EH,#200
      DLP2:  NOP
            NOP
            NOP
      DJNZ  5EH,DLP2
      DJNZ  5FH,DLP1
      RET
  ;节拍处理
     JIEP:  MOV  XC4,#2
      MOV   XC3,#10H
      MOV   A,JPSD
      SUBB  A,#30
      MOV   DPTR,#JPTAB
      MOVC  A,@A+DPTR
      MOV   JPBS,A
      MOV   A,JPFD
      CJNE  A,PAISU,PAIINC
      MOV   PAISU,#1
      MOV   XC1,PAISU
      MOV   XC2,PAISU
      LCALL DISPLAY
      MOV   SS,#33      ;高音0.1秒
    SLOP1:  SETB XLL
      LCALL  D5US
      LCALL  D5US
      LCALL  D5US
      CLR    XLL
      LCALL  D5US
      LCALL  D5US
      LCALL  D5US
     PAIING: INC  PAISU
      MOV  XC1,PAISU
      MOV  XC2,PAISU
      LCALL  DISPLAY
     SOUNDL: MOV  SS,#49  ;低音0.1秒
     SLOP:   SETB  XLL
      LCALL  D5US
      LCALL  D5US
      CLR    XLL
      LCALL  D5US
      LCALL  D5US
      DJNZ   SS,SLOP
     JP100:  LCALL  D10MS
      DJNZ   JPBS,JP100
          RET
;节拍时间参数
     JPTAB;
     DB  190,184,178,182,166,161,157
     DB  152,148,144,140,136,133,130
     DB  126,123,120,118,115,112,110
     DB  108,105,103,101,99,97,95,93,92
     DB  90,88,87,85,84,82,81,80,78,77,
     DB  76,75,73,72,71,70,69,68,67,66
     DB  65,64,63,62,61,61,60,59,58,57
     DB  57,56,55,55,54,53,53,52,51,51
     DB  50,49,49,48,48,47,47,46,46,45
     DB  45,44,44,43,43,42,42,41,41,40
     DB  40,40,39,39,38,38,38,37,37,37
     DB  36,36,35,35,35,34,34,34,33,33
     DB  33,33,32,32,32,31,31,31,31,30
     DB  30,30,29,29,29,29,28,28,28,28
     DB  28,27,27,27,27,26,26,26,26,26
     DB  25,25,25,25,24,24,24,24,24,23
     DB  23,20,17,15,14,10,08,07,05,240
         ;延迟500us
     D5US:    MOV  38H,#100
     D5S:    NOP
        NOP
        NOP
       DJNZ  38H,D5S
      RET
;调节处理
;调节状态下的显示处理
      TIAOJ:  MOV R4,BKEY
       CJNE    R4,#1,TJ2
       MOV   A,JPSD
       LCALL  SUZHI
       MOV   XC4,BKEY
       MOV   XC3,BEIWEI
       MOV   XC2,SIWEI
       MOV   XC1,GEWEI
       LJMP  TJEND
     TJ2:CJNE  R4,#2,TJEND      ;节拍分度显示
       MOV   XC4,#2
       MOV   XC3,#10H
       MOV   XC2,#10H
       MOV   XC1,JPFD
     TJEND:  NOP
;A,B,C,D键盘的处理
      TJ29; LCALL KEY
       JZ  TJ01
       LCALL  D10MS
       LCALL  KEY
       JZ  TJ01
       LJMP  TJ00
      TJ01: LJMP  TJLOOP
      TJ00: MOV  R5,A;键盘值暂存R5中
      TJKEY11: LCALL  KEY
       JNZ  TJKEY11
       LCALL  D10MS
       JNZ  TJKEY11
;A键处理
       CJNE  R5,#10H,TJBJ
       LNC   AKEY
       LJMP  DISAJ
;B键处理
      TJBJ:   CJNE  R5,#20H,TJCJ
       MOV  A,BKEY
       CJNE A,#2,BJINC
       MOV  BKEY,#01
       LJMP  TJLOOP
      BJINC:  INC  BKEY
       LJMP  TJLOOP
;c键处理  增加
      TJCJ:  CJNE  R5,#40H,TJDJ10
       LJMP  CJCL
      TJDJ10:LJMP  TJDJ
      CJCL:  MOV  R6,BKEY
        CJNE  R6,#1,TJ30
       MOV  A,#190
       CJNE  A,JPSD,JPSDINC
       MOV  JPSD,#30
       LJMP TJENDD
      JPSDINC: INC  JPSD
       LJMP TJENDD
      TJ30: CJNE  R6,#2,TJEND
       MOV  A,#9
       CJNE A,JPFD,JPFDINC
       MOV  JPFD,#1
       LJMP TJENDD
      JPFDINC: INC JPFD
       LJMP TJENDD
;D键处理  减少
      TJDJ:  CJNE  R5,#80H,LJDJ10
       LJMP  LCJCL
      LJDJ10:LJMP  TJENDD
      LCJCL: MOV  R6,BKEY
       CJNE  R6,#1,LTJ30
       MOV  A,#30
       CJNE A,JPSD,LJPSDINC
       MOV   JPSD,#190
       LJMP  TJENDD
      LJPSDINC:DEC  JPSD
       LJMP  TJEND
      LTJ30: CJNE  R6,#2,TJENDD
       MOV  A,#1
       CJNE A,JPFD,LJPFDINC
       MOV  JPFD,#9
       LJMP  TJENDD
      LJPFDINC:DEC JPFD
       LJMP  TJENDD 
      TJENDD:RET
      MMOV3: MOV  XC3,#10H
             MOV  XC2,SIWEI
             MOV  XC1,GEWEI
             RET
;显示代码转换处理
       DISPLAY: MOV R0,#XC1      
       MOV  R1,#LED1
       MOV  R7,#4
       MOV  DPTR,#TCODE
      DISP1:  MOV  A,@R0
       MOVC  A,@A+DPTR
       MOV  @R1,A
       INC  R0
       INC  R1
       DJNZ R7,DISP1
       MOV  LED3,A
       LJMP DI
      SNEXT
      DIS00:  MOV A,LED3
       CLR  ACC.7
       MOV  LED3,A
      TJLOOP:  NOP
      DISNEXT: RET
;共阳led代码
      TCODE:
      DB    C0H,0F9H,0A4H,0B0H,99H
      DB    92H,90H,88H,83H,82H,0F8H
      DB    80H,0A7H,0A1H,86H,8EH,0FFH
;十六进制化成十进制处理
      SUZHI:  MOV  B,#100
       DIV  AB
       JNZ  SUZI00
       MOV  BEIWEI,#10H
       LJMP  SUZI01
      SUZI00: MOV  BEIWEI,A
      SUZI01: MOV  A,B
       MOV B,#10
       DIV  AB
       MOV  SIWEI,A
       MOV  A,B
       MOV  GEWEI,A
        RET
;T1中断处理,显示输出
       TDISP: PUSH A
       PUSH  PSW
       MOV  TH1,#0ECH
       MOV  TL1,#90H
       SETB  RS0
       MOV  P0,#0FFH     ;关显示
       CJNE  R2,#4,R2INC
       MOV   R2,#1
       LJMP  TD11
      R2INC:  INC  R2
      TD11:   CJNE R2,#1,TD12
       CLR  P2.5
       MOV  P0,LED1
       SETB P2.8
       LJMP  TDRET
      TD12:   CJNE R2,#2,TD13
       CLR  P2.8
       MOV  P0,LED2
       SETB P2.7
       LJMP TDRET
      TD13;   CJNE R2,#3,TD14
       CLR  P2.7
       MOV  P0,LED3
       SETB P2.6
       LJMP TDRET
      TD14;   CJNE R2,#4,TDRET
       CLR  P2.6
       MOV  P0,LED4
       SETB  P2.5
      TDRET:  CLR  RS0
        POP   PSW
        POP   A
         RET

   为什么我用keil  uvision3编写生成,一直出现错误,而且不止一个。

   程序是用来控制节拍器的,

回复

使用道具 举报

ID:27723 发表于 2011-1-10 10:12 | 显示全部楼层

有没有高手帮我修改一下。。

回复

使用道具 举报

ID:27770 发表于 2011-1-12 00:40 | 显示全部楼层

你得告诉人家出现什么错误?----------编译器上有提示的啊!

定义RAM有没有试一下使用 DATA  ?

例如:

AKEY  DATA  10H   ;键值单元
BKEY  DATA  11H

还有,你的主循环程序在哪里到哪里?------单片机运行是一个死循环.好像没有看到哦?

示例:

1.清零 RAM ,初始化端口,定时器,等等.

2.主循环:

B_LOOP:

     CALL     B00 ;例如按键

    CALL      B01 ;例如显示

  ;;; ......更多调用

   JMP     B_LOOP  ;循环回去主循环,不能回去初始化那里!!!

;====================================

;//被调用的子程序

B_00:

 ......

    RET

B_01:

  ........

     RET

;==================================

建议把你的程序整理一下.

仅供参考!


 

 

回复

使用道具 举报

ID:27723 发表于 2011-1-12 11:06 | 显示全部楼层

这个问题,我已经解决了,同样谢谢你!!

 

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表