找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2888|回复: 0
打印 上一主题 下一主题
收起左侧

带24c08的多组号码存储及时钟选择性工作的的51驱动

[复制链接]
跳转到指定楼层
楼主
ID:51090 发表于 2014-9-18 00:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<reg52.h>
#include<intrins.h>
sbit SCL=P1^6;
sbit SDA=P1^7;
sbit made=P3^3;
sbit jia=P3^5;
sbit jian=P3^2;
sbit adk=P3^6;
uchar weix=1,sec=0,min=0,hou=0,adj=0;
uint number;
#define uchar unsigned char
#define uint unsigned int
void display();
uchar code wela[4]={0xfe,0xfd,0xfb,0xf7};
uchar code table[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xD8,0x80,0x90};
uchar data dat[4];
uchar data dat1[4];
uchar data shu[4];
#include<c02.h>
void clock();
void diskey();
void disan();
void diskey()
{
uchar i;
if(made==0)
{
delay(10);
if(made==0){while(made==0)display();weix++;}
if(weix>3)weix=0;
}
/////////
if(jia==0)
{
delay(10);
if(jia==0)
{while(jia==0)display();
if(adj==0)sec++;
i=read(adj+weix);
if((adj>1)&read(adj+weix)<9)write((adj+weix),++i);
}
}
/////////
if(jian==0)
{
delay(10);
if(jian==0)
{while(jian==0)display();
if(adj==0)min++;
i=read(adj+weix);
if((adj>1)&read(adj+weix)>0)write((adj+weix),--i);
}
}
///////////////////////////////////////////
if(adk==0)
{
delay(10);
if(adk==0){while(adk==0)display();adj+=4;if(adj>17)adj=0;}
}
}
void disan()
{
uchar i;
dat1[0]=min/10;
dat1[1]=min%10;
dat1[2]=sec/10;
dat1[3]=sec%10;
for(i=0;i<4;i++)
{
write(i,dat1);
delay(30);
}

}
void clock()
{
if(number>200){number=0;sec++;disan();}
if(sec>59){sec=0;min++;disan();}
if(min>59){min=0;hou++;disan();}
if(hou>23){hou=0;disan();}
}
void display()
{
uchar a;
for(a=0;a<4;a++)
{
P0=0xff;
P2=table[shu[a]];
if((weix==a)&(adj>0))P2&=0x7f;
if((a==1)&(adj==0))P2&=0x7f;
if((number<100)&(adj==0))P2|=0x80;
P0=wela[a];
delay(100);
P0=0xff;
}
}
void time0()interrupt 1
{
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
number++;
}
void main()
{
uchar i;
TMOD=0x01;
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
EA=1;
ET0=1;
TR0=1;
//////////////////////////////////////////////////////////////////////
write(0xff,0xaa);
delay(100);
output=read(0xff);
P0=output;
/////////////////////////////////////////////////////////////////////////
for(i=0;i<4;i++)
{
dat1=read(i);
delay(30);
}
min=dat1[0]*10+dat1[1];
sec=dat1[2]*10+dat1[3];
///////////////////////////////////////////////////////////////////////////
while(1)
{

display();
for(i=0;i<4;i++)
{
diskey();
if(dat[i+adj]>9|dat[i+adj]<0)dat=0;
delay(30);
clock();          
shu=read(i+adj);
}
}
}
////////////////////////////////////////////////////////////下方为24c02读写头文件



//////////////////////////////////////////////////////////////////////////////////////////////


uchar output;
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=2;y>0;y--);
}
void Start()
{
SDA=1;
SCL=1;
SDA=0;
SCL=0;
}

//??á????×??????
void Stop()
{
SCL=0;
SDA=0;
SCL=1;
SDA=1;
}
void Write8Bit(uchar input)
{
uchar temp;
for(temp=8;temp>0;temp--)
{
SDA=(bit)(input&0x80);
SCL=1;
SCL=0;
input=input<<1;
}
}
uchar Read8Bit()
{
uchar temp,dat;
for(temp=8;temp>0;temp--)
{
SCL=1;
dat<<=1;
if(SDA==1)dat++;
SCL=0;
}
return dat;
}
void TestAck()
{
bit ErrorBit;
SDA=1;
SCL=1;
ErrorBit=SDA;
SCL=0;
delay(1);
}
void ACK()
{
SDA=1;
SCL=1;
SCL=0;
}
void write(uchar ad,uchar da)
{
Start();
Write8Bit(0xa0);
TestAck();
Write8Bit(ad);
TestAck();
Write8Bit(da);
TestAck();
Stop();
delay(10);
}
uchar read(uchar ad)
{
uchar ch;
Start();
Write8Bit(0xa0);
TestAck();
Write8Bit(ad);
TestAck();
Start();
Write8Bit(0xa1);
TestAck();
ch=Read8Bit();
ACK();
Stop();
return ch;

}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表