#include <REGX52.H>
#include "LCD1602.h"
#include "Delay.h"
sbit DSL302_IO=P3^4;
sbit DSL302_CE=P3^5;
sbit DSL302_SCLK=P3^6;
void test()
{
DSL302_CE=0;
DSL302_SCLK=0;
}
void write(unsigned char byte,date)
{
char i=0;
DSL302_CE=1;
for(i=0;i<8;i++) //操作指令
{
DSL302_IO=byte&(0x01<<i); //DSL302_IO 可以看做逻辑位 如果为0,则为0,不为0则为1
DSL302_SCLK=1;
DSL302_SCLK=0;
}
for(i=0;i<8;i++) //操作数据
{
DSL302_IO=date&(0x01<<i); //DSL302_IO 可以看做逻辑位 如果为0,则为0,不为0则为1
DSL302_SCLK=1;
DSL302_SCLK=0;
}
DSL302_CE=0;
}
unsigned char read(unsigned char byte)
{
char i;
char FK=0x00;
DSL302_CE=1;
for(i=0;i<8;i++) //操作指令
{
DSL302_IO=byte&(0x01<<i); //DSL302_IO 可以看做逻辑位 如果为0,则为0,不为0则为1
DSL302_SCLK=0;
DSL302_SCLK=1;
}
for(i=0;i<8;i++) //操作数据
{
DSL302_SCLK=1;
DSL302_SCLK=0; //读出数据
if(DSL302_IO) //10000001 //逻辑判断 将数据读取出来
{
FK|=(0x01<<i); //00000000|00000001=00000001 00000001|10000000=10000001
}
}
DSL302_CE=0;
return FK;
}
unsigned char second,min;
void main()
{
LCD_Init();
test();
write(0x8E,0x00);
write(0x80,0x55); //写秒
write(0x82,0x55); //写分钟
while(1)
{
second=read(0x81); //读秒
min=read(0x83); //读分钟
LCD_ShowNum(2,4,second/16*10+second%16,2); //显示秒
LCD_ShowNum(2,1,min/16*10+ min%16,2); //显示分钟
Delay(500); //延迟500ms
}
}

显示屏上分钟一直显示65,正常是应该小于60,秒满60,分钟加一
