RT,用的是PCF8591芯片,接图如下,调节U1电阻小灯看到小灯确实有明显的明暗变化,可就是数码管显示不出来数值
请问哪里出了错,这样写程序可靠吗,顺便再问一下,为什么写、读字节都要有SCL=0,SDA=1的操作?
编译时总出来C141错误,随便改了个名字没有了,这个错误到底是什么意思?
#include
#define uchar unsigned char
#define uint unsigned int
***it SDA=P2^0;
***it SCL=P2^1;
***it du=P2^6;
***it we=P2^7;
uchar code table[]={
//0 1 2 3 4 5 6 7 8
0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F,
//9 A B C D E F - . 关显示
0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71, 0x40, 0x80, 0x00
};
uint Value;
void delay_5us()
{;;}
void delay(uint z)
{
uint a;
for(z=z;z>0;z--)
for(a=110;a>0;a--);
}
void init()
{
SDA=1;
delay_5us();
SCL=1;
delay_5us();
}
void start()
{
SDA=1;
delay_5us();
SCL=1;
delay_5us();
SDA=0;
delay_5us();
}
void stop()
{
SDA=0;
delay_5us();
SCL=1;
delay_5us();
SDA=1;
delay_5us();
}
void respons()
{
uchar i;
SCL=1;
delay_5us();
while((SDA==1)&&(i<250))i++;
delay_5us();
SCL=0;
delay_5us();
}
void write_byte(uchar dat)
{
uchar i,temp;
temp=dat;
for(i=0;i<8;i++)
{
temp=temp<<1;
SCL=0;
delay_5us();
SDA=CY;
delay_5us();
SCL=1;
delay_5us();
}
SCL=0;
delay_5us();
SDA=1;
delay_5us();
}
uchar read_byte()
{
uchar i,k;
SCL=0;
delay_5us();
SDA=1;
delay_5us();
for(i=0;i<8;i++)
{
SCL=1;
delay_5us();
k=(k<<1)|SDA;
SCL=0;
delay_5us();
}
return k;
}
void DAC_out(uchar dat)
{
start();
write_byte(0x90);
respons();
write_byte(0x40);
respons();
write_byte(dat);
respons();
stop();
}
uchar ADC_read()
{
uchar Data;
start();
write_byte(0x90);
respons();
write_byte(0x01);
respons();
start();
write_byte(0x90+1);
respons();
Data=read_byte();
return Data;
}
void display(uint V)
{
we=0;
P0=0xfe;
we=1;
we=0;
P0=table[V/100];
du=1;
du=0;
delay(5);
we=0;
P0=0xfd;
we=1;
we=0;
P0=table[V%100/10];
du=1;
du=0;
delay(5);
we=0;
P0=0xfb;
we=1;
we=0;
P0=table[V%10];
du=1;
du=0;
delay(5);
}
void main()
{
init();
while(1)
{
Value=ADC_read();
DAC_out(Value);
display(Value);
}
}
2020-4-21 08:41:48
云汉达人
本帖最后由 LiuYang 于 2016-10-30 18:13 编辑
SDA、SCL是I2C的读写,控制8591的AD读取和DA的输出,所以只要是操作8591就要控制这两个脚。
随便改了个名字就能消除编译错误?这个不太可能吧,原来报的什么错?
云汉达人
本帖最后由 LiuYang 于 2016-10-30 18:13 编辑
SDA、SCL是I2C的读写,控制8591的AD读取和DA的输出,所以只要是操作8591就要控制这两个脚。
随便改了个名字就能消除编译错误?这个不太可能吧,原来报的什么错?
举报
2020-4-21 09:11:33
艾笠调查团 发表于 2016-10-30 19:42
比如这个:难道是不同函数定义的名字也不能一样?
您可能打成全形的空格,你最好把Code用半型英文輸入重打即可:)
艾笠调查团 发表于 2016-10-30 19:42
比如这个:难道是不同函数定义的名字也不能一样?
您可能打成全形的空格,你最好把Code用半型英文輸入重打即可:)
举报