#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit dsio=P2^0; /*ds1302的IO口*/
sbit dssclk=P2^1;/*ds1302的时钟线*/
sbit dsres=P2^2;/*ds1302的res端口*/
sbit left=P2^3;
sbit set=P2^4;
sbit right=P2^5;
sbit lcdrs=P2^6;/*lcd1602的res端口*/
sbit lcden=P2^7;/*lcd1602的en端口*/
sbit ACC_7=ACC^7;
uchar miao0,fen0,shi0,ri0,yue0,nian0,miao1,
fen1,shi1,ri1,yue1,nian1,miao,fen,shi,
ri,yue,nian, i,k;
void delay(uint z);
void lcdinit();
void dsinit();
void xie(uchar addr,uchar byte);
uchar du(uchar addr);
void write_data(uchar date);
void write_order(uchar order);
void dsread();
void dswrite();
void lcdwrite1();
void lcdwrite2();
void int_0();
void int_1();
void init();
void yiwei();
void set1();
void set2();
void main()
{
dsinit();
lcdinit();
init();
while(1)
{
while(k==0)
{
write_order(0x0c);
dsread();
lcdwrite1();
if(k!=0)
{
write_order(0x84);
write_order(0x0e);
break;
}
}
while(k==1)
{
yiwei();
set1();
if(k!=1)
{
write_order(0x0c);
lcdwrite2();
write_order(0x84);
write_order(0x0e);
break;
}
}
while(k==2)
{
yiwei();
set2();
if(k!=2)
break;
}
while(k==3)
{
k=0;
dswrite();
break;
}
}
}
void delay(uint z)/*延时子函数*/
{
uint x,y;
for(x=z;x>0;x--)
for(y=100;y>0;y--);
}
void yiwei()/*right和left按键检测功能函数*/
{
if(right==0)
delay(110);
if(right==0)
{
i++;
if(i==7)
i=1;
if(i==1)
write_order(0x84);
if(i==2)
write_order(0x85);
if(i==3)
write_order(0x87);
if(i==4)
write_order(0x88);
if(i==5)
write_order(0x8a);
if(i==6)
write_order(0x8b);
}
if(left==0)
delay(110);
if(left==0)
{
i--;
if(i==0)
i=6;
if(i==1)
write_order(0x84);
if(i==2)
write_order(0x85);
if(i==3)
write_order(0x87);
if(i==4)
write_order(0x88);
if(i==5)
write_order(0x8a);
if(i==6)
write_order(0x8b);
}
}
void set1()/*当前为设置时分秒状态set键功能设定*/
{
if(set==0)
delay(110);
if(set==0)
{
if(i==1)
{
shi1++;
if(shi1==2)
shi0=0;
if(shi1==3)
shi1=0;
write_order(0x84);
write_data(48+shi1);
write_order(0x84);
}
if(i==2)
{
shi0++;
if(shi1==2 && shi0==4)
shi0=0;
if(shi0==10)
shi0=0;
write_order(0x85);
write_data(48+shi0);
write_order(0x85);
}
if(i==3)
{
fen1++;
if(fen1==6)
fen1=0;
write_order(0x87);
write_data(48+fen1);
write_order(0x87);
}
if(i==4)
{
fen0++;
if(fen0==10)
fen0=0;
write_order(0x88);
write_data(48+fen0);
write_order(0x88);
}
if(i==5)
{
miao1++;
if(miao1==6)
miao1=0;
write_order(0x8a);
write_data(48+miao1);
write_order(0x8a);
}
if(i==6)
{
miao0++;
if(miao0==10)
miao0=0;
write_order(0x8b);
write_data(48+miao0);
write_order(0x8b);
}
}
}
void set2()/*当前设置年月日状态set功能键的定义*/
{
if(set==0)
delay(110);
if(set==0)
{
if(i==1)
{
nian1++;
if(nian1==10)
nian1=0;
write_order(0x84);
write_data(48+nian1);
write_order(0x84);
}
if(i==2)
{
nian0++;
if(nian0==10)
nian0=0;
write_order(0x85);
write_data(48+nian0);
write_order(0x85);
}
if(i==3)
{
yue1++;
if(yue1==2)
yue1=0;
write_order(0x87);
write_data(48+yue1);
write_order(0x87);
}
if(i==4)
{
yue0++;
if(yue1==1 && yue0==3)
yue0=0;
if(yue0==10)
yue0=0;
write_order(0x88);
write_data(48+yue0);
write_order(0x88);
}
if(i==5)
{
ri1++;
if(ri1==4)
ri1=0;
write_order(0x8a);
write_data(48+ri1);
write_order(0x8a);
}
if(i==6)
{
ri0++;
if(ri0==10)
ri0=0;
write_order(0x8b);
write_data(48+ri0);
write_order(0x8b);
}
}
}
void lcdinit()/*lcd1602初始化程序*/
{
lcden=0;
write_order(0x01);/*清屏幕*/
write_order(0x06);/*光标加1整屏不移动*/
write_order(0x0c);/*开显示关光标*/
write_order(0x38);
write_order(0x84);/*写地址首位*/
}
void dsinit()/*ds1302的初始化程序*/
{
dssclk=0;
dsres=0;
dsres=1;
xie(0x8e,0x00);
dsres=0;
dsres=1;
xie(0x80,0x00);
dsres=0;
}
void xie(uchar addr,uchar byte)/* 写一个字节的数据到时钟芯片*/
{
uchar j;
dsres=0;
dssclk=0;
dsres=1;
for(j = 0; j < 8; ++j)
{
dssclk=0;
dsio= 0;
if(addr & 0x01)
dsio=1;
dssclk = 1;
addr >>= 1;
}
for(j = 0; j < 8; ++j)
{
dssclk=0;
dsio= 0;
if(byte & 0x01)
dsio= 1;
dssclk = 1;
byte >>= 1;
}
dsres=0;
}
void dswrite() /*向ds1302写入数据年月日时分秒*/
{
uchar *p;
miao=miao0+miao1*16;
p=&miao;
xie(0x80,*p);
p=&fen;
fen=fen0+fen1*16;
xie(0x82,*p);
p=&shi;
shi=shi0+shi1*16;
xie(0x84,*p);
p=&ri;
ri=ri0+ri1*16;
xie(0x86,*p);
p=&yue;
yue=yue0+yue1*16;
xie(0x88,*p);
p=&nian;
nian=nian0+nian1*16;
xie(0x8c,*p);
}
uchar du(uchar addr) /* 读芯片返回一个字节十进制的数据 */
{
uchar i;
uchar dd,du,du1,du2;
dsres=0;
dssclk=0;
dsres=1;
for(i = 0; i < 8; i++)
{
dssclk=0;
dsio=0;
if(addr & 0x01)
dsio= 1;
dssclk = 1;
addr >>= 1;
}
dsio=1;/*此处作为数据口读入数据拉高电平不可缺少*/
for(i = 0; i < 8; i++)
{
ACC=ACC>>1;
dssclk=0;
if(dsio==0)
ACC_7=0;
else
ACC_7=1;
dssclk=1;
}
dsres=0;
dd=ACC;
du1=dd/16;
du2=dd%16;
du=du1*10+du2;
return du;
}
void dsread()/*向ds1302读取数据年月日时分秒*/
{
miao=du(0x81);
miao0=miao%10;
miao1=miao/10;
fen=du(0x83);
fen0=fen%10;
fen1=fen/10;
shi=du(0x85);
shi0=shi%10;
shi1=shi/10;
ri=du(0x87);
ri0=ri%10;
ri1=ri/10;
yue=du(0x89);
yue0=yue%10;
yue1=yue/10;
nian=du(0x8d);
nian0=nian%10;
nian1=nian/10;
}
void write_order(uchar order) /*1602写入命令函数*/
{
lcdrs=0;
P1=order;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void write_data(uchar date)/*1602写数据函数*/
{
lcdrs=1;
P1=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void lcdwrite1()/*1602从第五位开始写入时:分:秒信息*/
{
write_order(0x84);
write_data(48+shi1);
write_data(48+shi0);
write_data(58);
write_data(48+fen1);
write_data(48+fen0);
write_data(58);
write_data(48+miao1);
write_data(48+miao0);
}
void lcdwrite2()/*1602从第五位开始写入年:月:日信息*/
{
write_order(0x84);
write_data(48+nian1);
write_data(48+nian0);
write_data(58);
write_data(48+yue1);
write_data(48+yue0);
write_data(58);
write_data(48+ri1);
write_data(48+ri0);
}
void init()
{
EA=1; /*开启中断*/
EX0=1;
IT0=0;
EX1=1;
IT1=0;
i=1;/*变量给初值*/
k=0;
right=1;
left=1;
set=1;
xie(0x80,0x00); /*初始化时间*/
xie(0x82,0x00);
xie(0x84,0x12);
xie(0x86,0x01);
xie(0x88,0x01);
xie(0x8c,0x10);
}
void int_0() interrupt 0/*中断0函数作用是reset复位*/
{
dsinit();
lcdinit();
init();
}
void int_1() interrupt 2/*中断1函数作用是检测mode功能键*/
{
k++;
delay(500);
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
1302and1602+proteus+keil.rar (20个子文件)
1302and1602
bb.OBJ 23KB
bb.Uv2 2KB
bb_Opt.Bak 1KB
bb.DSN 80KB
bb.LST 19KB
bb.Opt 1KB
Backup of HT1621.SCH 41KB
bb.lnp 21B
bb_Uv2.Bak 2KB
bb.hex 5KB
HT1621-3.PCB 1.03MB
bb.plg 311B
HT1621-3.DDB 1.23MB
HT1621.DDB 234KB
HT1621.SCH 41KB
bb.c 7KB
bb 20KB
Last Loaded bb.DBK 80KB
bb.M51 25KB
bb.PWI 1KB
共 20 条
- 1
资源评论
xuhuaibo2826
- 粉丝: 0
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- asp.net高校网上教材征订系统的设计与实现(源码)
- asp.net动态口令认证的网上选课系统的设计与实现(源码)
- NetAssist网络调试助手
- ASP.NET公文管理系统的设计与实现(源码)
- 操作系统原理与设计Chapter 2: OS Structure
- torch-2.3.1-cp312-cp312-manylinux2014-aarch64.whl
- CSR8675蓝牙芯片 CSR内部培训资料教材资料.zip
- 43-2-每日英语听力 10.9.2会员版_鹿蜀 【20240530更新】.apk
- 期末大作业基于EasyX和C语言的可视化学生成绩管理系统(95分以上)
- 数字电路芯片74系列芯片datasheet技术手册资料总汇合集(241个).zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功