DA:
#include<reg52.h>
#include<intrins.h>
#include<absacc.h>
#define uint unsigned int
#define read_245 XBYTE[0X8FFF]// 定义245地址
sbit tlc5615_din=P1^1;
sbit tlc5615_sclk=P1^2;
sbit hc138_cs=P1^7;
sbit hc138_a0=P2^0;
sbit hc138_a1=P2^1;
sbit hc138_a2=P2^2;//定义要用到的各I/O口
void Delay(unsigned char n)//延时子函数,n=1为1微秒
{
while(n!=0)
_nop_(),
n--;
}
void Tlc5615_sclk()//时钟信号子函数,为tlc5615数字量输入输出提供时钟
{
tlc5615_sclk=1;
Delay(10);
tlc5615_sclk=0;
}
void hc138_init()//hc138初始化子函数,使Y2输出低电平以片选tlc5615
{
hc138_a0=0;
hc138_a1=1;
hc138_a2=0;
hc138_cs=0;
}
void main()
{
uint i,key;
tlc5615_sclk=0; //时钟输入端拉低
hc138_init(); //138译码器初始化,片选tlc5615
while(1)
{
key=read_245; //读8位拨码开关状态
key=~key; //取反拨码开关状态,
for(i=0;i<8;i++)
{
tlc5615_din=key&1;//8位拨码开关状态输入D/A转换器
Tlc5615_sclk();
key>>=1;
}
tlc5615_din=0;
for(i=0;i<4;i++)
{
Tlc5615_sclk(); //后4位补0,补够12位
}
} //循环执行
}