STC89C52+DS12C887原理图以及C程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include

#define uchar unsigned char

#define uint unsigned int

sbit fm=P2^3;

sbit duan=P2^6;

sbit wei=P2^7;

sbit s1=P3^0;

sbit s2=P3^1;

sbit s3=P3^2;

sbit irq=P3^3;

sbit lcden=P3^4;

sbit lcdrs=P3^5;

sbit rd=P3^7;

sbit cs=P1^1;

sbit as=P1^2;

sbit wr=P1^3;

sbit ds=P1^4;

uchar code sz1[]={"20 - - "}; //初始化时候显

uchar code sz2[]={" : : "};

uchar code aa[10]={"0123456789"}; //定义一个液晶的数字字符数组

uchar code dd[]={"MONTUEWEDTHUFRISATSUN"}; //定义一个星期显示数组

uchar code zz[]={0,1,2,1,0,1,0,1,1,0,1,0,1}; //定义一个区别大月小月和二月的数组

uchar num,bb; //定义全局变量

uint cc; //该变量用于功能键的自动退出

char shi,fen,miao,yue,ri,xq,nian1,yue1,ri1,wc,hh,nian,nm,tnnd; //定义带符号的变量void ds_write(uchar a,uchar b) //向DS12C887写入数据

{

cs=0;

as=1;

ds=1;

wr=1;

P0=a;

as=0;

wr=0;

P0=b;

wr=1;

as=1;

cs=1;

}

void ys(uint x) //延时函数{

uint z,y;

for(z=x;z>0;z--)

for(y=110;y>0;y--);

}

void xqsd(char a) //星期设定函数,在调整月份和年份的时候刷新星期的数字

{

if(a==8)

xq=1;

else if(a==9)

xq=2;

else if(a==10)

xq=3;

else if(a==11)

xq=4;

else if(a==12)

xq=5;

else if(a==13)

xq=6;

else if(a==0)

xq=7;

else if(a==-1)

xq=6;

else if(a==-2)

xq=5;

else if(a==-3)

xq=4;

else if(a==-4)

xq=3;

else if(a==-5)

xq=2;

else if(a==-6)

xq=1;

ri1=1;

}

void fmq() //蜂鸣器小小的响一下函数

{

fm=0;

ys(100);

fm=1;

}

void lcdsd(uchar temp) //设定子函数

{

lcdrs=0; //当lcdrs=0时,允许写入指令

P0=temp;

ys(5);

lcden=1;

ys(5);

lcden=0;

}

void lcdxs(uchar temp) //显示子函数

{

lcdrs=1; //当lcdrs=1时,允许写入显示

P0=temp;

ys(5);

lcden=1; //lcden高脉冲将P0口数据读走

ys(5);

lcden=0;

}

void sr_sj(uchar a,uchar b) //输入时间函数,第一个参数为光标指针,第二个为数字

{

lcdsd(0x80+0x40+a-1);

lcdxs(aa[b/10]);

lcdxs(aa[b%10]);

}

void sr_rq(uchar a,uchar b) //输入日期函数

{

lcdsd(0x80+a-1);

lcdxs(aa[b/10]);

lcdxs(aa[b%10]);

}

void sr_xq(uchar a,uchar b) //输入星期{

lcdsd(0x80+a-1);

if(b==1)

b=0;

else if(b==2)

b=3;

else if(b==3)

b=6;

else if(b==4)

b=9;

else if(b==5)

b=12;

else if(b==6)

b=15;

else if(b==7)

b=18;

lcdxs(dd[b]);

lcdxs(dd[b+1]);

lcdxs(dd[b+2]);

}

void key() //按键检测函数

{

if(s1==0) //检测功能键是否被按下

{

ys(5); //去抖延时

if(s1==0) //再次检测功能键是否被按下

{

bb++; //记录功能键被按下多少次

cc=0; //当有按键按下时将cc清零

tnnd=1; //有按键按下的时候让tnnd等于1,等退出时间设定的时候向时钟芯片写入数据

while(!s1) //按键松手检测

{

ys(10); //去抖延时

}

fmq(); //蜂鸣器小小的响一下

if(bb==1) //当功能键被按下一次时

{

TR0=0; //关闭定时器

lcdsd(0x80+0x40+0x0b); //光标指针指向秒的个位

lcdsd(0x0f); //显示光标并且闪烁

}

if(bb==2) //当功能键被按下两次时

相关文档
最新文档