标题:
实时时钟(DS1302)LCD1602显示和串口显示
[打印本页]
作者:
xiao1074234390
时间:
2013-8-1 18:56
标题:
实时时钟(DS1302)LCD1602显示和串口显示
下面是我写的,不对啊(读不出),如果哪位有通过DS1302,将时间显示在1602LCD上的代码,贴出来感激不尽。
问题已解决,代码在2楼,感谢51黑电子论坛
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit wela=P1^4;
sbit dula=P3^6;
sbit lcdrs=P1^7;
sbit lcdrw=P1^6;
sbit lcden=P1^5;
sbit ds_sclk=P3^0;
sbit ds_io=P3^1;
sbit ds_rst=P3^2;
sbit ACC0=ACC^0;
sbit ACC7=ACC^7;
//sbit s1=P3^3;
//sbit s2=P3^4;
uchar a[7]={0x05,0x00,0x06,0x11,0x02,0x06,0x06};
uchar b[7]={0x01,0x01,0x01,0x00,0x01,0x01,0x01};
uchar code table[]=" 2013-12-31 0";
uchar code table1[]=" 23:59:54";
uint num;//tt,shi,fen,miao,year,mon,day,week,s1num,monnum,daynum;
void delay(uchar z) //延迟1ms
{
uchar x,y;
for(x=0;x<z;x++)
for(y=124;y>0;y--);
}
void write_comment(uchar com) //液晶写地址
{
lcdrs=0;
delay(5);
P2=com;
lcden=1;
delay(5);
lcden=0;
}
void write_date(uchar date) //液晶写数据
{
lcdrs=1;
delay(5);
P2=date;
lcden=1;
delay(5);
lcden=0;
}
void T_year(uchar pos,uint date) //年份转化写入液晶
{
uchar m,n,p,q;
m=date/1000;
n=(date%1000)/100;
p=((date%1000)%100)/10;
q=((date%1000)%100)%10;
write_comment(0x80+pos);
write_date(0x30+m);
write_date(0x30+n);
write_date(0x30+p);
write_date(0x30+q);
}
void T_mon(uchar pos,uchar date) //月份转化写入液晶
{
uchar m,n;
m=date/10;
n=date%10;
write_comment(0x80+pos);
write_date(0x30+m);
write_date(0x30+n);
}
void T_week(uchar date) //星期转化写入液晶
{
write_comment(0x80+12);
write_date(date);
}
void T_day(uchar pos,uchar date) //日期转化写入液晶
{
uchar m,n;
m=date/10;
n=date%10;
write_comment(0x80+pos);
write_date(0x30+m);
write_date(0x30+n);
}
void T_sfm(uchar pos,uchar date) //时分秒转化写入液晶
{
uchar m,n;
m=date/10;
n=date%10;
write_comment(0x80+0x40+pos);
write_date(0x30+m);
write_date(0x30+n);
}
void inputbyte(uchar ds_date) //按位写入
{
uchar i;
ACC=ds_date;
for(i=0;i<8;i++)
{
ds_io=ACC0;
ds_sclk=1;
ds_sclk=0;
ACC=ACC>>1;
}
}
uchar outputbyte() //按位读出
{
uchar i;
for(i=0;i<8;i++)
{
ACC=ACC>>1;
ACC7=ds_io;
ds_sclk=1;
ds_sclk=0;
}
return ACC;
}
void w1302(uchar ds_pos,uchar ds_date) //写时钟
{
ds_rst=0;
ds_sclk=0;
ds_rst=1;
inputbyte(ds_pos);
inputbyte(ds_date);
ds_sclk=1;
ds_rst=0;
}
uchar r1302(uchar ds_pos) //读时钟
{
uchar ds_date;
ds_rst=0;
ds_sclk=0;
ds_rst=1;
inputbyte(ds_pos);
ds_date=outputbyte();
ds_sclk=1;
ds_rst=0;
return ds_date;
}
void init() //初始化写液晶
{
wela=0;
dula=0;
lcdrw=0;
lcden=0;
write_comment(0x38);
write_comment(0x01);
write_comment(0x06);
write_comment(0x0c);
for(num=0;num<13;num++)
{
write_date(table[num]);
delay(5);
}
write_comment(0x80+0x40);
for(num=0;num<12;num++)
{
write_date(table1[num]);
delay(5);
}
}
void main()
{
uchar i;
uchar address1,address2;
init();
address1=0x80;
w1302(0x8e,0x00);
for(i=0;i<7;i++) //写入时钟
{
w1302(address1,a[i]);
address1+=2;
}
w1302(0x8e,0x80);
while(1)
{
address2=0x81;
for(i=0;i<7;i++) //读时钟
{
b[i]=r1302(address2);
address2+=2;
T_sfm(10,b[0]);
delay(1);
}
for(i=0;i<25;i++)//写入液晶
{
T_sfm(10,b[0]);
delay(1);
T_sfm(7,b[1]);
delay(1);
T_sfm(4,b[2]);
delay(1);
T_week(b[5]);
delay(1);
T_day(9,b[3]);
delay(1);
T_mon(6,b[4]);
delay(1);
T_year(1,b[6]);
delay(1);
}
}
}
复制代码
作者:
扬帆远航
时间:
2013-8-3 15:20
我正在做12864显示的。
作者:
huyan1230
时间:
2013-8-3 16:46
在百度文库里搜一下,多的很,我在里面搜了一个,还不错!
作者:
叫姐姐13
时间:
2017-3-29 11:22
0.png
(51.72 KB, 下载次数: 75)
下载附件
2017-3-29 14:46 上传
DS1302-LCD1602仿真成功源码.zip
(428.72 KB, 下载次数: 33)
2017-3-29 14:45 上传
点击文件名下载附件
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1