单片机学习小组
直播中

刘琴

7年用户 127经验值
私信 关注

AD/DA PCF8591驱动数码管值总是不变该怎么办?

俺的51开发板上的AD芯片是PCF8591,IIC总线的,想将AD转换的值实时显示在数码管上,同时还想利用LED灯亮度的变换来反映DA效果。结果数码管值总是不变化,LED灯也不亮,请大家帮忙找找问题,下面上图上代码

[C] 纯文本查看 复制代码
#include #include ***it SDA=P2^0;***it SCL=P2^1;***it DU=P2^6;***it WE=P2^7;#define uchar unsigned char#define uint  unsigned intuchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,                        0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};void delayms(uchar ms){uchar i;while(ms--){for(i=0;i<120;i++);}}void display(uint k){P0=table[k/1000];DU=1;DU=0;P0=0xfb;WE=1;WE=0;delayms(1);P0=table[k%1000/100];DU=1;DU=0;P0=0xf7;WE=1;WE=0;delayms(1);P0=table[k%100/10];DU=1;DU=0;P0=0xef;WE=1;WE=0;delayms(1);P0=table[k%10];DU=1;DU=0;P0=0xdf;WE=1;WE=0;delayms(1);}void delayus(void){_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();}void IIC_Start(void){SDA=1;delayus();SCL=1;delayus();SDA=0;delayus();}void IIC_Stop(void){SDA=0;delayus();SCL=1;delayus();SDA=1;delayus();}void IIC_Ack(void){uchar i=0;SCL=1;delayus();while((SDA==1)&&(i<250)){i++;}SCL=0;delayus();}void IIC_NoAck(void){SDA=1;delayus();SCL=1;delayus();SCL=0;delayus();}void IIC_WriteOneByte(uchar dat){uchar i;for(i=0;i<8;i++){SCL=0;delayus();if(dat&0x80){SDA=1;}else{SDA=0;}dat=dat<<1;SCL=1;delayus();}SCL=0;delayus();SDA=1;delayus();}uchar IIC_ReadOneByte(void){uchar i,dat;SCL=0;delayus();SDA=1;delayus();for(i=0;i<8;i++){SCL=1;delayus();dat<<=1;dat|=(uchar)SDA;SCL=0;delayus();}return dat;}void DAC(uchar dat){IIC_Start();IIC_WriteOneByte(0x90);IIC_Ack();IIC_WriteOneByte(0x40);IIC_Ack();IIC_WriteOneByte(dat);IIC_Ack();IIC_Stop();}uchar ReadADC(unsigned char Chl)  {       unsigned char Data;   IIC_Start();        //写入芯片地址   //Send(AddWr);IIC_WriteOneByte(0x90);   IIC_Ack();    IIC_WriteOneByte(0x40|Chl);//写入选择的通道,本程序只用单端输入,差分部分需要自行添加   IIC_Ack();   IIC_Start();   IIC_WriteOneByte(0X91);    //读入地址   IIC_Ack();   Data=IIC_ReadOneByte();    //读数据   SCL=0;   IIC_NoAck();   IIC_Stop();   return Data;   //返回值  }void main(){uchar temp,ad;DAC(temp);while(1){ad=ReadADC(2);display(ad);}}

回帖(4)

潘础功

2019-7-22 07:56:46
I2C通信成功么?可以正常读写寄存器么?
举报

h1654155275.5753

2019-7-22 08:10:18
既然数码管有显示,我觉得IIC通信应该没问题吧
举报

杨洁磊

2019-7-22 08:42:49
不能理解楼主的数码管显示函数,p0口既输出段码又输出位码,那你的硬件是怎么连接的呢?
举报

阿信509

2019-7-22 10:18:05
你先确定你的数码管显示函数正确吗?比如你手动输入一个数值,他能正常显示吗
举报

更多回帖

发帖
×
20
完善资料,
赚取积分