ORG 0000h
LJMP MAIN
====================
ORG 0003h
SETB P3.0OE=1
MOV R3,P2READ ADC
CLR P3.0 END
RETI
=====================
ORG 000Bh
CPL P3.4 CREAT CLK
RETI
===================
ORG 001Bh
CLR TR1 close T1
CLR P3.1 ALE=0
CLR P3.3 start=0
nop
nop
SETB P3.1ALE=1
SETB P3.3start=1
nop
nop
CLR P3.1 ALE=0
CLR P3.3 start=0
MOV TH1,#3DH
MOV TL1,#0B0H
SETB TR1 open T1
RETI
==================
ORG 0040H
MAIN: CLR P3.0
CLR P3.1
CLR P3.3
SETB EA
SETB EX0
SETB IT0
SETB PX0
SETB ET0
SETB ET1
SETB PT1
MOV TMOD,#12H
MOV TH0,#0FDH
MOV TL0,#0FDH
MOV TH1,#3DH
MOV TL1,#0B0H
SETB TR0
SETB TR1
LOOP: MOV P1,R3
SJMP LOOP
end
c语言:
#include"reg52.h"源旦孝迟答
#include"intrins.h"
unsigned int tt,dd
sbit clock=P3^0
sbit start=P3^1
sbitOE=P3^3
sbit ALE=P3^4
sbit addA=P3^5
sbit rs=P3^6
sbit e=P3^7
void delay(unsigned char us)
{
while(us--)
}
void w1602(bit w,unsigned char dat)
{
rs=w
e=0
P1=dat
delay(4)
e=1
delay(8)
e=0
}
void init1602()
{
w1602(0,0x38)
w1602(0,0x06)
w1602(0,0x0c)
w1602(0,0x01)
}
void main()
{
init1602()
start=0
OE=0
ALE=0
EA=1
EX0=1
IT0=1
PX0=1
ET0=1
ET1=1
PT1=1
TMOD=0x12
TH0=0xf0
TL0=0xf0
TH1=0x4d
TL1=0xb0
TR0=1
TR1=1
while(1)
{
dd=tt*196/100
w1602(0,0x80)
w1602(1,0x30+dd/100)
w1602(1,0x2e)
w1602(1,0x30+(dd%100)/10)
w1602(1,0x30+(dd%100)%10)
}
}
void ddd() interrupt 0
{
OE=1 //EOC _______________|---|___
tt=P0 //OE _______________|---|___read dat to tt
OE=0
}
void clockt() interrupt 1
{
clock=~clock /雹稿/creat clk pulse for ADC0808
}
void wdata() interrupt 3
{
TR1=0 //close C/T1
ALE=0
start=0
_nop_()
ALE=1
start=1
_nop_()
start=0 // ALE ___|---|___________________
ALE=0 //start ___|---|___________________
_nop_() //finsh EOC _____________________|---|___
TH1=0x4d
TL1=0xb0
TR1=1 //reset C/T1 for Next ADC
}
ORG 0000HLOOP: CLR P2.2
SETB P2.2
JNB P2.1,$ 检测转换是否结束
CLR P2.0
MOV A,P0 读和高取转换结果
SETB P2.0
CLR C
SUBB A ,#2CH 数值调整,此值是针对本任务,非通用,由表6-2得
MOV DPTR,#TEMPTAB 查表获得温度值
MOVC A,@A+DPTR
SETB P3.1
SETB P3.2
MOV B,#10 将温度值转换为BCD码
DIV AB 温度十位BCD码在A中,温度个位BCD码在B中
MOV R3,A温度十位BCD码暂存R3中
MOV R4,B 温度个吵卖位BCD码暂存R4中
MOV DPTR,#DIGITTAB 七段数码表首地址送DPTR
MOV A,R3
MOVC A,@A+DPTR 查表取得温度十位数的七段码
MOV P1,A温度十位数送P1口
CLR P3.2开十位显唤碰尺示
ACALL DELAY
MOV A,R4
MOVC A,@A+DPTR 查表取得温度个位数的七段码
SETB P3.2 关闭十位显示
MOV P1,A温度个位数送P1口
CLR P3.1开个位显示
ACALL DELAY
AJMP LOOP
DELAY: MOV R6,#2
D1: MOV R7,#250
D2: NOP
NOP
DJNZ R7,D2
DJNZ R6,D1
RET
DIGITTAB:数字0~9的共阳七段显示码
DB 0C0H 0
DB 0F9H 1
DB 0A4H 2
DB 0B0H 3
DB 099H 4
DB 092H 5
DB 082H 6
DB 0F8H 7
DB 080H 8
DB 090H 9
DB 08EH F 错误显示
TEMPTAB: 温度数据表
DB 90,89,88,87,100,86,85,84,83,100,82,81,100,80
DB 79,100,78,77,100,76,75,100,74,100,73,100,72,71
DB 100,70,100,69,100,68,100,67,100,66,100,65,100,64
DB 100,63,100,62,100,61,100,60,100,100,59,100,58,100
DB 57,100,100,56,100,55,100,54,100,100,53,100,52,100
DB 100,51,100,50,100,100,49,100,48,100,100,47,100,46
DB 100,100,45,100,100,44,100,43,100,100,42,100,100,41
DB 100,40,100,100,39,100,38,100,100,37,100,100,36,100
DB 35,100,100,34,100,100,33,100,32,100,100,31,100,30
DB 100,100,29,100,28,100,100,27,100,26,100,100,25,100
DB 24,100,100,23,100,22,100,21,100,20,100,100,19,100
DB 18,100,17,100,16,100,15,100,14,100,13,100,12,100
DB 11,100,10,9, 100,8, 100,7, 6, 100,5, 4, 100,3
DB 2, 1, 100,0
END
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)