推荐给好友 上一篇 | 下一篇

自己编写的电压表程序(ADC0808+LCD)(已加上了源程序)


初次上传,请多多支持!

不好意思,上次搞错了!
为了不浪费大家的金钱,我把源程序直接贴出来吧!
   TEMPHIGH EQU 35H
   TEMPLOW  EQU 34H
   ORG 0000H
   AJMP MAIN
   ORG 0030H
MAIN:
   MOV SP,#60H
   ACALL LCDINITIAL
   MOV 30H, #00H   ;采样单元初始化
   MOV 31H, #00H
   MOV 32H, #00H
   MOV 33H, #00H
LOOP:
   ACALL ADCON
   ACALL HEXTBCD
   ACALL LCDDISP
   AJMP loop

;////////////////////////
;/////LCD初始化
;////
;////////////////////////////
LCDINITIAL:
  MOV DPTR,#7FFCH
  ACALL BUSYRD
  MOV A,#38H    ;系统设置,8位,二行,5×7点阵
  MOVX @DPTR,A
  ACALL BUSYRD
  MOV A,#01H   ;清屏
  MOVX @DPTR,A
  ACALL BUSYRD
  MOV A,#02H     ;光标回到第一行第一列
  MOVX @DPTR,A
  ACALL BUSYRD
  MOV A,#06H     ;显示地址加1模式
  MOVX @DPTR,A
  ACALL BUSYRD
  MOV A,#0FH     ;DISPLAY ON
  MOVX @DPTR ,A
  RET
BUSYRD:             ;读忙信号
  PUSH DPL
  PUSH DPH
  MOV DPTR,#7FFDH
READ:
  MOVX A,@DPTR
  JB ACC.7,READ
  POP DPH
  POP DPL
  RET


;///////////////////////////////////////
;/ AD转换程序,利用查询方式,实时采样四路数据,
;/ 并分别存入30H~33H四个单元中
;///////////////////////////////////////
ADCON:
  MOV DPTR,#0DFF8H  ;通道0的地址
  MOV R7,#4       ;共四路数据
  MOV R1,#30H
ADLOOP:
  MOVX @DPTR,A    ;启动AD转换
  nop
  nop
  JB P3.2,$      ;查询转换是否结束
  MOVX A,@DPTR
  MOV @R1,A       ;存入相应单元
  INC R1
  INC DPTR
  DJNZ R7,ADLOOP
  RET
;////////////////////
  ; / 显示预处理子程序,TEMPHIAH TEMPLOW存放AD转换值与20的乘积
  ; / R3为转换时所用循环次数16
  ; /R4 R5分别存放BCD码的低位和高位
   ;/处理后的结果分别存放入38H~3FH
;/////////////////////////
HEXTBCD:
   PUSH ACC         ;内容保护
   PUSH PSW
   MOV R0,#30H       ;存放AD转换值的首地址
   MOV R1,#38H       ;存放BCD码的首地址
   MOV R2,#4        ;要转化的AD转换值的个数
HTBCD:
   MOV R3,#16       ;一次转化循环次数
   MOV R4,#0        ;暂存转化结果的低位
   MOV R5,#0        ;;暂存转化结果的高位
   CLR C
   MOV A,@R0        ;取要转化的AD转换值
   MOV B,#20        ;×20
   MUL AB
   MOV TEMPLOW,A     ;积低位存入TEMPLOW单元
   MOV TEMPHIGH,B    ;积高位存入TEMPHIGH单元
HEX:                 ;转化程序
   MOV A,TEMPLOW
   RLC A
   MOV TEMPLOW,A
   MOV A ,TEMPHIGH
   RLC A
   MOV TEMPHIGH ,A
   MOV A ,R4
   ADDC A ,R4
   DA A
   MOV R4 ,A
   MOV A ,R5
   ADDC A ,R5
   DA A
   MOV R5 ,A
   DJNZ R3 , HEX    ;判断一组数据是否转化完毕
   MOV A,R5
   MOV @R1 ,A       ;存入相应单元
   INC R1
   MOV A,R4
   MOV @R1 ,A
   INC R1
   INC R0            ;R0指向下一要转化的数据
   DJNZ R2 ,HTBCD  ;判断是否全部数据都已转化完毕
   POP PSW           ;完毕,则恢复现场
   POP ACC
   RET




;///////////////////////////////////////////////
;/LCD显示程序
;///////////////////////////////////////////////
LCDDISP:
  MOV R1,#40H
  MOV R0 ,#38H
  MOV R7 ,#31H   ;  编号
  ACALL DISPMANAGE
  MOV DPTR,#7FFCH  ;第一个数据的显示
  ACALL BUSYRD
  MOV A, #80H    ;第一行第一列
  MOVX @DPTR,A
  ACALL DISP   ;显示数据显示缓冲区内的六组数据

  INC R7
  MOV R1 ,#40H
  ACALL DISPMANAGE
  MOV DPTR,#7FFCH  ;第二个数据的显示
  ACALL BUSYRD
  MOV A, #88H    ;第一行第九列
  MOVX @DPTR,A
  ACALL DISP   ;显示数据显示缓冲区内的六组数据

  INC R7
  MOV R1 ,#40H
  ACALL DISPMANAGE
  MOV DPTR,#7FFCH  ;第三个数据的显示
  ACALL BUSYRD
  MOV A, #0C0H    ;第二行第一列
  MOVX @DPTR,A
  ACALL DISP   ;显示数据显示缓冲区内的六组数据

  INC R7
  MOV R1 ,#40H
  ACALL DISPMANAGE
  MOV DPTR,#7FFCH  ;第四个数据的显示
  ACALL BUSYRD
  MOV A ,#0C8H    ;第二行第九列
  MOVX @DPTR,A
  ACALL DISP   ;显示数据显示缓冲区内的六组数据

  RET


;////////////////////////////////////////////////
  ;/把相应单元中的双字节BCD码转化为相应的显示数字,并
  ;/分别存入40H 41H 42H 43H  44H 45H

;///////////////////////////////////////////////
DISPMANAGE :
  MOV R6,#2
  MOV A,R7
  MOV @R1,A  ;写入编号
  INC R1
  MOV @R1,#3AH ;写入“:"
  INC R1
MLOOP:
  ACALL ONETOTWO    ;一个字节BCD码分为两个字节中
  INC R0
  INC R1
  DJNZ R6,MLOOP
  RET

;//////////////////////////////////////////////////
;/把一个BCD码拆为两个BCD码,并转化为要显示的数据代码
;/如一个字节内容为35H,则要转化为33H(3的ACALL码)和35H(5的ACALL码)
;//////////////////////////////////////////////////
ONETOTWO:
  MOV A,@R0
  SWAP A
  ANL A,#0FH
  ADD A,#30H
  MOV @R1,A
  INC R1
  MOV A,@R0
  ANL A ,#0FH
  ADD A,#30H
  MOV @R1,A
  RET



;///////////////////////////////////////////////////
;/ 显示数据缓冲区的相关内容,共6个 数据
;/////////////////////////////////////////////////////
DISP:
  MOV R1,#40H
  MOV R2,#6
  MOV DPTR,#7FFEH  ;写入数据
DISPLOOP:
  ACALL BUSYRD
  MOV A,@R1
  MOVX @DPTR,A
  INC R1
  DJNZ R2,DISPLOOP
  RET
  RET

[本帖最后由 寻梦追梦 于 2007-1-13 23:18 编辑]

1.jpg

桌面.rar
(2007-01-09 23:11:49, Size: 19.3 kB, Downloads: 16)



查看全部8条评论

最新评论

  • 删除 引用 lindan (2008-1-23 22:48:23, 评分: 0 )

    谢谢。。正在学习使用0808多通道总是遇到一定问题! 希望能从你的程序里面得到一点灵感!

    再谢了!
  • 删除 引用 Guest (2007-8-23 02:53:01, 评分: 0 )

    终于下载完了。。。太不容易了
  • 删除 引用 Guest (2007-8-23 02:03:37, 评分: 0 )

    我看看
    新手来学学下
  • 删除 引用 Guest (2007-8-19 09:38:19, 评分: 0 )

    JHEHE //////////////////////////////////
  • 删除 引用 Guest (2007-8-19 09:38:05, 评分: 0 )

    HEHEE ...........................................
  • 删除 引用 Guest (2007-8-18 15:10:43, 评分: 0 )


    刚来的
  • 删除 引用 hechong1984 (2007-8-09 09:36:15, 评分: 0 )

    一步一步教你51单片机与PC机通信一步一步教你51单片机与PC机通信一步一步教你51单片机与PC机通信
  • 删除 引用 my7 (2007-4-10 10:10:13, 评分: 0 )

    新手来学学下!!!!!!!!
 

评分:0

我来说两句

seccode