找回密码
 注册会员
img_loading
智能检测中
更新自动建库工具PCB Footprint Expert 2024.04 Pro / Library Expert 破解版

今天试着写DS1302的程序,好像语法有错误,大虾们过来帮看看吧

[复制链接]
admin 发表于 2012-9-2 04:53:39 | 显示全部楼层 |阅读模式

本文包含原理图、PCB、源代码、封装库、中英文PDF等资源

您需要 登录 才可以下载或查看,没有账号?注册会员

×
如题,我编译出来11个错误,但不知道应该怎么改,很多都是“bad operand type”错误 程序在附件。[attachment=24408]

哎,没人理我,那我之间贴代码了,问题是主要是在“设置时钟函数”和“处理函数”中·······


#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6;
sbit wela=P2^7;
sbit sck=P2^1;
sbit io=P2^0;
sbit rst=P2^4;
void writr_ds1302_byte(uchar dat);
void write_ds1302(uchar add,uchar dat);
uchar read_ds1302(uchar add);
void time_pros(void);
void display();
void read_rtc(void);
uchar code table[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
uchar time_data[7]={12,4,8,17,10,48,30}; //放时间初值
uchar write_add[7]={0x8c,0x8a,0x88,0x86,0x84,0x82,0x80}; //要写到的地址
uchar read_add[7]={0x8d,0x8b,0x89,0x87,0x85,0x83,0x81}; //要读的地址
uchar disp[8];

void delay(int m) //延时//
{
int i,j;
for(i=m;i>0;i--)
for(j=50;j>0;j--);

}

void writr_ds1302_byte(uchar dat) //单字节 写
{
uchar i;
for(i=0;i<8;i++)
{
sck=0;
io=dat&0x01; //准备数据
dat=dat>>1; //移位
sck=1;
}

}
void write_ds1302(uchar add,uchar dat) //多字节 写
{
rst=0;
_nop_();
sck=0;_nop_();
rst=1;_nop_();
write_ds1302_byte(add); //地址
write_ds1302_byte(dat); //数据
rst=0;_nop_();
io=1;
sck=1; //释放
}
uchar read_ds1302(uchar add) //单字节读
{
uchar i,value;
rst=0;_nop_();
sck=0;_nop_();
rst=0;_nop_();
write_ds1302_byte(add); //写地址
for(i=0;i<8;i++)
{
value=value>>1;
sck=0;
if(io)
value=value|0x80;
sck=1;
}
rst=0;_nop_();
sck=0;_nop_();
sck=1;
io=1; //释放
return value;
}
void set_rtc(void) //设置时钟
{
uchar i,j;
for(i=0;i<7;i++)
{
j=time_data[i]/10;
time_data[i]=time_data[i]%10;
time_data[i]=time_data[i]+j*16;
}

write_ds1302(0x8e,0x00); //去保护
for(i=0;i<7;i++)
{
write_ds1302(write_add[i],time_data[i]);
}
write_ds1302(0x8e,0x80); //写保护
}

void read_rtc(void) //读
{
uchar i;
for(i=0;i<7;i++)
{
time_data[i]=read_ds1302(read_add[i]);
}
}
void time_pros(void) //处理函数
{
disp[0]=time_data[6]%16;
disp[1]=time_data[6]/16;

disp[2]=time_data[5]%16;
disp[3]=time_data[5]/16;

disp[4]=time_data[4]%16;
disp[5]=time_data[4]/16;
}


void display() //数码管显示
{
dula=1; //显示 秒
P0=disp[1];
dula=0;
P0=0xff;
wela=1;
P0=0xef;
wela=0;
delay(5);
dula=1;
P0=disp[0];
dula=0;
P0=0xff;
wela=1;
P0=0xdf;
wela=0;
delay(5);


dula=1; //显示 分
P0=disp[2]+0x80;
dula=0;
P0=0xff;
wela=1;
P0=0xf7;
wela=0;
delay(5);


dula=1;
P0=disp[3];
dula=0;
P0=0xff;
wela=1;
P0=0xfb;
wela=0;
delay(5);


dula=1; //显示 时
P0=disp[4]+0x80;
dula=0;
P0=0xff;
wela=1;
P0=0xfd;
wela=0;
delay(5);


dula=1;
P0=disp[5];
dula=0;
P0=0xff;
wela=1;
P0=0xfe;
wela=0;
delay(5);
}

void main()
{
set_rtc();
while(1)
{
read_rtc();
time_pros();
display();
}
}
您需要登录后才可以回帖 登录 | 注册会员

*滑块验证:
img_loading
智能检测中
本版积分规则

QQ|手机版|MCU资讯论坛 ( 京ICP备18035221号-2 )|网站地图

GMT+8, 2025-7-25 12:14 , Processed in 0.071703 second(s), 11 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表