- 5
- 0
- 约2.83千字
- 约 5页
- 2018-03-09 发布于河南
- 举报
自己写的DS1302与LCD1602
#include reg52.h
#define uchar unsigned char
#define uint unsigned int
uchar code table2[]=TIME:;
uchar code table3[]=0123456789;
uchar code table1[]=DATE:;
sbit rs=P3^3;
sbit en=P3^2;
sbit rst=P1^7;
sbit io=P1^6;
sbit clk=P1^5;
sbit ACC0=ACC^0;
sbit ACC7=ACC^7;
sbit key1=P1^0;
sbit key2=P1^1;
sbit key3=P1^2;
sbit key4=P1^3;
sbit key5=P1^4;
uchar num;
uchar sec,sec1,sec2;
uchar min,min1,min2;
uchar hour,hour1,hour2;
uchar month,month1,month2;
uchar date,date1,date2;
uchar year,year1,year2;
uchar day,day1;
//输入一个字节的数字
void input_1byte(uchar TD)
{
uchar i;
ACC=TD;
for(i=8;i0;i--)
{
io=ACC0;
clk=1;
clk=0;
ACC=ACC1;
}
}
//输出一个字节的数字
uchar output_1byte(void)
{
uchar i;
for(i=8;i0;i--)
{
ACC=ACC1;
ACC7=io;
clk=1;
clk=0;
}
return(ACC);
}
//根据地址 写入数(初始化的时候用)
void write_ds1302(uchar add,uchar dat)
{
rst=0;
clk=0;
rst=1;
input_1byte(add);
input_1byte(dat);
clk=1;
rst=0;
}
//根据地址 读出数(得到当前时间的时候用)
uchar read_ds1302(uchar add)
{
uchar inf;
rst=0;
clk=0;
rst=1;
input_1byte(add);
inf=output_1byte();
clk=1;
rst=0;
return(inf);
}
void delay(uint z) //延时
{
uint x,y;
for(x=110;x0;x--)
for(y=z;z0;z--);
}
//LCD1602
void write_com(uchar com) //写指令
{
rs=0;
en=0;
P2=com;
delay(5);
en=1;
delay(5);
en=0;
}
//LCD1602
void write_date(uchar date) //写数据
{
rs=1;
en=0;
P2=date;
delay(5);
en=1;
delay(5);
en=0;
}
void init_lcd()
{
en=0;
write_com(0x38); //显示
write_com(0x0c); //光标不显示
write_com(0x06); //指针加1,整屏不移动
write_com(0x01); //清屏
write_com(0x80);
}
void init_1302()
{
write_ds1302(0x8e,0x00);//关闭写保护
write_ds1302(0x90,0xaa); //定义充电
write_ds1302(0x80,0x00); //秒
write_ds1302(0x82,0x55);//分
write_ds1302(0x84,0x21);//时
write_ds1302(0x86,0x8);//日
write_ds1302(0x88,0x4);//月
write_ds1302(0x8a,0x07);//星期
write_ds1302(0x8c,0x12);//年
write_ds1302(0x8e,0x80);//打开写保护
}
void display()
{
sec=read_ds1302(0x81);
min=read_ds1302(0x83);
hour=read_ds1302(0x85);
date=read_ds1302(0x87);
month=read_ds1302(
原创力文档

文档评论(0)