adrd bit P3.7; //IO口定义 adwr bit P3.6; diola bit P2.5; dula bit P2.6; wela bit P2.7; bai_c equ 40h sh_c equ 41h g_c equ 42h adval equ 44h org 0000h ajmp main main:mov adval,#0 clr diola main1: clr adwr; ;AD写入(随便写个什么都行,主要是为了启动AD转换) nop setb adwr; clr adrd mov adval,P1 ;AD数据读取 setb adrd mov a,adval mov b,#100 div ab mov bai_c,a ;分出百,十,和个位 mov a,b; mov b,#10 div ab mov sh_c,a; mov g_c,b; mov r1,#20 ;r1 不能太小 达到延时的作用 ad反应时间有限 loop1:call display;送去显示各位。 djnz r1,loop1 ajmp main1 display: ;显示程序 MOV DPTR,#TABLE clr dula; mov a,bai_c MOVC a,@A+DPTR mov p0,a ;显示百位 setb dula; clr dula; clr wela; mov P0,#7eh; setb wela; clr wela; mov 50h,#5h call delayxms clr dula; mov a,sh_c MOVC a,@A+DPTR mov p0,a ; ;显示十位 setb dula; clr dula; clr wela; mov P0,#7dh; setb wela; clr wela; mov 50h,#5h call delayxms mov a,g_c MOVC a,@A+DPTR mov p0,a ; ;显示个位 setb dula; clr dula; mov P0,#7bh; setb wela; clr wela; mov 50h,#4h call delayxms ret delayxms:mov 52h,#4 ;50h,51h,52h用于延时 50h为参数x 延时1*x ms delaya: mov 51h,#60 djnz 51h,$ djnz 52h,delaya djnz 50h,delayxms ret ;延时返回 table:db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h, db 7fh,6fh,77h,7ch,39h,5eh,79h,71h