单片机C语言程序(DS1302,LCD12864)显示不出来,编译通过,求指导,哪里出现问题?

#include<reg52.h>#include<intrins.h>#defineuintunsignedint#defineucharunsignedcharsbi... #include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit rs=P2^4;
sbit rw=P2^5;
sbit e=P2^6;
sbit psb=P2^1;
sbit sck=P1^0;
sbit io=P1^1;
sbit rst=P1^2;
uchar time_data[7]={12,7,8,5,17,7,5};//年周月日时分秒
uchar code write_add[7]={0x8c,0x8a,0x88,0x86,0x84,0x82,0x80};
uchar code read_add[7]={0x8e,0x8b,0x89,0x87,0x85,0x83,0x81};
uchar disp[8];
void delay_50us(uint t)
{
uchar j;
for(;t>0;t--)
for(j=19;j>0;j--);
}
void delay_1ms(uint t)
{
uint i,j;
for(j=0;j<t;j++)
for(i=0;i<110;i++);
}
void delay_50ms(uint t)
{
uint j;
for(;t>0;t--)
for(j=6245;j>0;j--);
}
void write_12864com(uchar com)
{
rs=0;
rw=0;
e=0;
P0=com;
delay_1ms(5);
e=1;
delay_1ms(5);
e=0;

}
void write_12864dat(uchar dat)
{
rs=1;
rw=0;
e=0;
P0=dat;
delay_1ms(5);
e=1;
delay_1ms(5);
e=0;
}
void initinal(void)
{
write_12864com(0x34);
delay_1ms(5);
write_12864com(0x30);
delay_1ms(5);
write_12864com(0x0c);
delay_1ms(5);
write_12864com(0x01);
delay_1ms(5);
}
void write_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_byte(uchar add)//单字节读
{
uchar i,value;
rst=0;
_nop_();
sck=0;
_nop_();
rst=1;
_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_();
io=1;
return value;//返回值
}
void set_rtc(void)//设置时间
{
uchar i,j;
for(i=0;i<7;i++)//10进制转化为BCD码
{
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,0x70);//加写保护
}
void read_rtc(void)
{
uchar i;
for(i=0;i<7;i++)
{
time_data[i]=read_ds1302_byte(read_add[i]);
}
}
void time_pros(void)//BCD转化为十进制
{
disp[0]=time_data[6]%16;
disp[1]=time_data[6]/16;
disp[2]=17;
disp[3]=time_data[5]%16;
disp[4]=time_data[5]/16;
disp[5]=17;
disp[6]=time_data[4]%16;
disp[7]=time_data[4]/16;
}
void display(void)
{
uchar i;
write_12864com(0x80);
for(i=0;i<16;i++)
{
write_12864dat(disp[i]);
delay_50us(1);
}
}
void main(void)
{
set_rtc();
while(1)
{
read_rtc();
time_pros();
display();
}
}
展开
 我来答
若以下回答无法解决问题,邀请你更新回答
老won
2012-09-11 · TA获得超过228个赞
知道小有建树答主
回答量:681
采纳率:31%
帮助的人:85.8万
展开全部
大概都是移植的吧,硬件有没有问题
追问
没问题啊
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式