
有些地方我认为没必要说的就不细说,不明再问
#include<reg51.h>
#include<absacc.h>
//头文件,可使用其中定义的宏来访问绝对地址
#define
dac0832
XBYTE[0X7fff]
//DAC位置定义,跟据实际原理图而定
unsigned
char
code
shu[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}
//数码管码值表
float
s
/*******************DAC0832控制位的定义,视实际原理图而定*************/
sbit
ALE=P3^0
//DAC0832
ALE脚工作脉冲位定义
sbit
START=P3^1
//DAC0832
START位定义
sbit
EOC=P3^2
//转换结束标志位
sbit
OE=P3^3
//输出允许位
sbit
SHCP=P2^0
//数码管驱动芯片(如595)位定义
sbit
DS=P2^1
//同上
sbit
STCP=P2^2
//同上
sbit
P11=P3^5
sbit
P12=P3^7
sbit
clk=P2^6
//DAC0832
工作脉冲
/************************************************/
unsigned
char
j,k,m,n,i,a
unsigned
int
b
void
delay(unsigned
char
t)
{
while(t--)
}
void
display()
//静态数码管的显示
{
j=0x01
for(i=0i<8i++)
{
if((shu[m]&j)==0)
{
DS=0}
else
{DS=1}
SHCP=1
SHCP=0
j<<=1
}
P12=0
P11=1
STCP=0
STCP=1
delay(200)
j=0x01
for(i=0i<8i++)
{
if((shu[n]&j)==0)
{
DS=0}
else
{DS=1}
SHCP=1
SHCP=0
j<<=1
}
P11=0
P12=1
STCP=0
STCP=1
delay(200)
}
void
main()
{
P2=0X87
/////////定森中时器1初始化////////////////
TMOD=0X20
TH1=0X06
TL1=0X06
EA=1
ET1=1
TR1=1
while(1)
{
//DAC0832地址锁存脉冲
ALE=1
ALE=0
//DAC0832
开始转换脉冲
START=1
START=0
while(EOC==0)
//等待转冲春歼换完毕
OE=1
//开始读
k=P1
//读数据
a=P1
//读数据
b=a*6
m=b/1000
//取千位数
n=b%1000/100
//取百位数
dac0832=k
display()
//数码管显示
}
}
void
time()
interrupt
3
//DAC0932脉冲
{
clk=!clk
//位取反
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)