本文包含原理图、PCB、源代码、封装库、中英文PDF等资源
您需要 登录 才可以下载或查看,没有账号?注册会员
×
请高手帮忙看看下边的这段程序问题出在什么地方?
目的:用一个共阳极数码管,显示DS1302时钟芯片的秒的个位数。
现在的状况:数码管显示的是一个不可识别的数,而且一直不动。
#include <reg52.h>
#include<intrins.h>
sbit RST=P2^0;
sbit I2O=P2^1;
sbit CLK=P2^2;
unsigned char miao;
///------------------数码管字符声明区 0-9-
unsigned char DIG[]={
0xC0, // 0
0xF9, // 1
0xA4, // 2
0xB0, // 3
0x99, // 4
0x92, // 5
0x82, // 6
0xF8, // 7
0x80, // 8
0x90, // 9
};
unsigned char time[]={
0xF9,0xF9,0xF9,0xF9,0xF9,0xF9,0xF9};
//--------------------------------------550um延时
void delay550us(void) //误差 0us
{
unsigned char a,b,c;
for(c=1;c>0;c--)
for(b=32;b>0;b--)
for(a=7;a>0;a--);
}
//---------------------------------输入
void inputbyte(unsigned char ibyt)
{
unsigned char i;
for (i=0;i<8;i++)
{
I2O=(bit)(ibyt&0x01);
CLK=1;
_nop_();
CLK=0;
ibyt>>=1;
}
CLK=0;
}
//---------------------------------输出
unsigned char outputbyte(void)
{
unsigned char y;
unsigned odat=0;
for (y=8;y>0;y--)
{
I2O=1;
odat>>=1;
if(I2O) odat|=0x80;
CLK=1;
_nop_();
CLK=0;
}
CLK=0;
return (odat);
}
//--------------------------------写
void write_byte(unsigned char a2d,unsigned char date)
{
RST=0;
_nop_();
CLK=0;
_nop_();
RST=1;
inputbyte(a2d);
_nop_();
inputbyte(date);
CLK=1;
_nop_();
RST=0;
}
//--------------------------------读
unsigned char read_com(unsigned char a2d)
{
unsigned char timeda;
RST=0;
_nop_();
CLK=0;
_nop_();
RST=1;
inputbyte(a2d);
_nop_();
timeda=outputbyte();
CLK=1;
_nop_();
RST=0;
return(timeda);
}
//-------------------初始化
void init_DS1302()
{
write_byte(0x8e,0x00);
write_byte(0x8c,time[0]);
write_byte(0x88,time[1]);
write_byte(0x86,time[2]);
write_byte(0x8a,time[3]);
write_byte(0x84,time[4]);
write_byte(0x82,time[5]);
write_byte(0x80,time[6]);
write_byte(0x8e,0x80);
}
void main()
{
init_DS1302();
while(1)
{
miao=read_com(0x80);
P1=DIG[miao % 16];
delay550us();
}
} |
|