微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > STC89c52,

STC89c52,

时间:10-02 整理:3721RD 点击:

想问一下为什么我仿真后数码管显示的是FFFFFF无法显示时间,我是菜鸟级别,真的不太懂,这程序有问题吗,总感觉应该是这里出了问题,数码管选的是共阴极的,谢谢帮忙!
不只是仿真,我也用实板做了,结果也是一样的,这我就真的没办法了。
/***************显示**************/
#include "display.h"
#include"delay.h"
uchar code tablewe[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
uchar code tabledu[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,
0x77,0x7c,0x39,0x5e,0x79,0x71,0x40};
void display_smg(uchar we,uchar du)
{
P0=0xff;
wela=1;
P0=tablewe[we-1];
wela=0;
P0=0x00;
dula=1;
P0=tabledu[du];
dula=0;
delay(4);
}
void display_table(uchar *p)
{
uchar i;
for(i=0;i<6;i++)
{
display_smg(i+1,p);
}
}         
void display_table1(uchar *p)
{
uchar i;
for(i=0;i<3;i++)
{
display_smg(i+4,p);
}
}
void display_sg(uchar i,uchar time)
{
display_smg(i,time/10);
display_smg(i+1,time%10);
}
/******************ds1302*******************/
#include"ds1302.h"           //
void write_byte(uchar da)
{
uchar i;
ACC=da;
for(i=8;i>0;i--)
{
T_IO=ACC0;
T_CLK=0;
T_CLK=1;
ACC=ACC>>1;
}
}
uchar read_byte(void)
{
uchar i;
for(i=0;i<8;i++)
{
ACC=ACC>>1;
T_CLK=1;
T_CLK=0;
ACC7=T_IO;
}
return(ACC);
}
void write_1302(uchar addr,uchar da)
{
T_RST=0;
T_CLK=0;
T_RST=1;
write_byte(addr);
write_byte(da);
T_RST=0;
T_CLK=1;
}
uchar read_1302(uchar addr)
{
uchar temp;
T_RST=0;
T_CLK=0;
T_RST=1;
write_byte(addr);
temp=read_byte();
T_RST=0;
T_CLK=1;
return(temp);
}
void DS1302write()
{
write_1302(0x8e,0x00);
write_1302(0x80,0x50);
write_1302(0x82,0x13);
write_1302(0x84,0x06);
write_1302(0x8e,0x80);
}
void DS1302write_sfm(uchar shi,uchar fen,uchar miao)
{
shi=((shi/10)<<4)|(shi%10);
fen=((fen/10)<<4)|(fen%10);
miao=((miao/10)<<4)|(miao%10);
write_1302(0x8e,0x00);
write_1302(0x80,miao);
write_1302(0x82,fen);
write_1302(0x84,shi);
write_1302(0x8e,0x80);

没玩过仿真

仿真,和你的仿真的器件和连线也有关系了,不好判断,建议你导入别人的例程看看。

建议小编直接搞实物再说

这个你应该是读取1302时读出的是错误的,你把延时调一下,stc的芯片比at的要快,同样的延时在stc上等于短了!

我微调了一下这个……先放个之前的延时
#include"delay.h"
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=120;y>0;y--);
}
void delayus(uint us)
{
uint i,j;
for(j=0;j<us;j++)
for(i=0;i<12;i++);
}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top