请斑竹指教一个问题!!!
<P>#include <reg51.h>#include <intrins.h> </P>
<P>#define SDA P27
#define SCL P26
#define uchar unsigned char
sbit RS=P0^7;
sbit RW=P0^6;
sbit E=P0^5;
sbit P26 = P2^6; //file://x1226
sbit P27 = P2^7;
sbit rst = P2^1;
void write1(void);
void write2(void);
void Wait(void);
void writeByte(uchar ucDa);
uchar readByte(void);
void write1302(uchar addr,uchar ucDa);
ucharread1302 (uchar addr);
void set(uchar *pSecDa);
void get1302(uchar ucCurtime[]);
void analyze(void);
uchar temp;
uchar a,b;</P>
<P>
void Wait(){
uchar i;
for(i=0;i<10;i++){ _nop_();}
}</P>
<P>void writeByte(uchar ucDa)//file://送一字节数据到slave,并返回确认信号
{
uchar i;
ACC=ucDa;
for(i=0;i<8;i++)
{
if(ACC & 0x80)
SDA = 1;
else
SDA = 0;</P>
<P> ACC <<= 1;
Wait();</P>
<P> SCL = 1;
Wait();
SCL = 0;
Wait();
}
}</P>
<P>uchar readByte(void)//file://接收1字节数据
{
uchar i;
uchar ACC = 0;</P>
<P>for(i=0;i<8;i++)
{
SCL = 1;
Wait();</P>
<P> ACC <<= 1;</P>
<P> if(SDA)
{
ACC |= 0x01;
}
SCL = 0;
Wait();
}</P>
<P>return (ACC);
}</P>
<P>void write1302(uchar addr,uchar ucDa){
rst=0;
SCL=0;
rst=1;
writeByte(addr);
writeByte(ucDa);
SCL=1;
rst=0;}</P>
<P> ucharread1302 (uchar addr)
{
uchar ucDa;
rst=0;
SCL=0;
rst=1;
writeByte(addr); /* 地址,命令 */
ucDa = readByte(); /* 读1Byte数据 */
SCL=1;
rst=0;
return(ucDa);
}</P>
<P> void set(uchar *pSecDa){
uchar i;
uchar addr=0x80;
write1302(0x8e,0x00);
for(i=7;i>0;i--){
write1302(addr,*pSecDa);
pSecDa++;
addr+=2;}
write1302(0x8e,0x80);
}</P>
<P>void get1302(uchar ucCurtime[])
{
uchari;
ucharaddr = 0x81;
for (i=0;i<7;i++)
{
ucCurtime<i> = read1302(addr);/*格式为: 秒 分 时 日 月 星期 年 */
addr += 2;
}
}
void analyze(void){ //十位的数的话要分两次在LCD上显示,分别是十位和各个位
a=temp>>4;
b=temp&0x0f;}</P>
<P>void main(){
uchar code tab1[]={0x01,0x38,0x0f,0x06} ; /*01清除屏幕;38设置8位2行; 0f显示屏幕ON,光标ON,闪烁ON;06加一*/
uchar wtime={0x31,0x31,0x31,0x31,0x31,0x31,0x33};
//{0x30,0x43,0x11,0x20,0x06,0x05,0x03};
uchar rtime;
uchar i;
set(wtime);
Wait();
for(i=0;i<4;i++)
{ P1=tab1<i>; write1();} /* 设置初始状态*/
P1=0x80;write1(); /*第一行起始地址*/
while(1){
get1302(rtime);
Wait();
for(i=0;i<7;i++)
{ temp=rtime<i>;
analyze();
P1=a; write2();
P1=b; write2();} /* 输出第一行*/</P>
<P> P1=0x80;write1(); } /* 光标位置*/
}
void write1(void) /*RS 为0 先和仿真器调试,看看你读回来的对不对,好像感觉1302不好用,不如用1307或PCF8563好用多了!用仿真器看看读回来的数据对不对先,不要直接这样子弄,不太好调试的! <P>好的,谢谢!我再去检查检查, 以后还得请斑竹多多指教啊.</P>
页:
[1]