您的位置 首页 编程

PCF8591A/D D/A之间转化

********************ADDA之间转换********************includereg52h>defineuintunsignedintdefineucharuns

/********************

A/D D/A之间转化
********************/
#include
#define uint unsigned int
#define uchar unsigned char
#define PCF8591 0x90//PCF8591的地址
sbit sda=P2^0;
sbit scl=P2^1;
sbit LS138A=P2^2;//138译码器的3位 操控数码管的
sbit LS138B=P2^3;
sbit LS138C=P2^4;
uint Ledout[8];//8位数码管
uchar AD_change;
uint num0,num1,num2,num3;
uint count;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f};//段选
void delay()//履行空语句,微秒级延时函数
{;;}
void delay1ms(uint z)//延时1ms
{
uint x,y;
for(x=z;x>0;x–)
{
for(y=0;y<=110;y++)
{
}
}
}
void init()//初始化状况下SCL和SDA都为高电平
{
scl=1;
delay();
sda=1;
delay();
}
void start()//在SCL为高电平时SDA由高电平到低电平
{
sda=1;
delay();
scl=1;
delay();
sda=0;
}
void respons()
/*
应对信号,SCL在高电平期间,SDA被从设备拉为低电平表明应对。
(sda==1)和i<255相与,表明若在一段时间内没有从器材的应对则主器材
默许从器材现已收到数据而不再等候应对信号
*/
{
uchar i;
scl=1;
delay();
while((sda==1)&&(i<250))
{
i++;
}
scl=0;
delay();
}
void stop()//SCL在高电平期间,SDA一个上升沿中止信号
{
sda=0;
delay();
scl=1;
delay();
sda=1;
}
void write_byte(uchar date)//写一个字节
{
uchar i,temp;
temp=date;
for(i=0;i<8;i++)
{
temp=temp<<1;
scl=0;//只要在SCL为0期间才答应SDA数据线上的状况才答应改变
delay();
sda=CY;//PSW的寄存器的CY进位标志位
delay();
scl=1; //SCL时钟信号为高电平期间数据线上的数据有必要保持稳定 delay();
delay();
}
scl=0;
delay();
sda=1;//开释总线
delay();
}
uchar read_byte()
{
uchar i,k;
scl=0;
delay();
sda=1;//开释总线
delay();
for(i=0;i<8;i++)
{
scl=1;
delay();
k=(k<<1)|sda;
scl=0;
delay();
}
//delay();here is a bug
return k;
}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/fangan/biancheng/255109.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部