您的位置 首页 汽车

根据PCF8591的I_2C总线A_D_D_A转化的材料

*******************程序功能:通过DA转换把输出电压逐渐增大,使加在上面的发光二级管慢慢变亮到最亮后再变暗,如此循环**************

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

程序功用:
经过DA转化把输出电压逐步增大,
使加在上面的发光二级管渐渐变亮
到最亮后再变暗,如此循环
*******************/
/*******************
D/A转化
*******************/
#include
#define uint unsigned int
#define uchar unsigned char
#define PCF8591 0x90//PCF8591的地址
sbit sda=P2^0;
sbit scl=P2^1;
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;
}
void write_address(uchar address,uchar date)
{
start();
write_byte(0x90);
respons();
write_byte(address);
respons();
write_byte(date);
respons();
stop();
}
uchar read_address(uchar address)
{
uchar date;
start();
write_byte(0x90); //10010000 前四位固定 接下来三位悉数被接地了 所以都是0 最终一位是写 所认为低电平
respons();
write_byte(address);
respons();
start();
write_byte(0x91);
respons();
date=read_byte();
stop();
return date;
}
void main()
{
uint count;
init();
while(1)
{
write_address(0x40,count);
delay1ms(5);
count++;
if(count>250)
{
count=0;
}
}
}
/*******************
程序功用:
旋转A/D电位器,将模仿质变成数字量,并用数码管显现其成果。
*******************/
/*******************
A/D转化
*******************/
#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;
uchar num,ge,shi,bai;
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;
}

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

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

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

微信扫一扫关注我们

返回顶部