LCD12864单片机电子万年历程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
*********************************
#include<>
#include<>
#define LCD_Data P0
#define uchar unsigned char
unsigned char
sec,min,hour,day,month,year,cen,week, next,aa,bb,cc,dd,mm,temp0,LunarMonth, LunarDay,LunarYear;
int temp;
uchar tt=1;
bit c_moon;
bit cenbit=1;
bit w;
sbit LCD_RS=P2^0;
sbit LCD_RW=P2^1;
sbit LCD_E=P2^2;
sbit PSB=P2^3;
sbit DS1302_CLK=P3^7;
sbit DS1302_IO=P3^6;
sbit DS1302_RST=P3^5;
sbit DS18B20=P2^5;
sbit speak=P2^7;
sbit SetKey=P1^4; // 按键功
能:设置
sbit SureKey=P1^5; // 按键功
能:确认
sbit PlusKey=P1^6; // 按键功
能:加
sbit ReduceKey=P1^7; // 按键功
能:减
sbit scl=P1^1;
sbit sda=P1^0;
void DisplayShengXiao(void);
void delay(unsigned int a)
// 延时 1MS/ 次
{
unsigned char i;
while(--a)
{
for(i=0;i<125;i++) ;
}
}
void delayb(unsigned int count)
{
while(count--);
}
void delays()
{ ; ;}
void start()
{
sda=1;
scl=1;
delays();
sda=0;
delays();
}
void stop()
{
sda=0;
scl=1;
delays();
sda=1;
delays();
}
void response()
{
uchar i;
while((sda==1)&&i<255)i++; //
给应答信号 sda=0 ;错误( while (( sda==0 )|i<255 ) i++ ;)程序进入 while 死循环
scl=1;
delays();
scl=0; // 没有这一步出错,如果
没有 sda 将保持 0 状态,一直处于应答中。
程序停止。
delays();
}
void write24c02(uchar date)
{
uchar temp,i;
temp=date;
for(i=0;i<8;i++)
{
scl=0;
sda=temp&0x80;
delays();
scl=1;
delays();
temp=temp<<1;
}
scl=0;
delays();
sda=1;
delays();
}
uchar read24c02()
{
uchar k,i;
scl=0;
delays();
sda=1;// 仅仅是释放数据线,可有
可无
for(i=0;i<8;i++)
{
scl=1;delays();
k=k<<1;
if(sda)
k++;
scl=0;
delays();
}
return k;
}
void write_24c02add(uchar address,uchar date)
{
start();
write24c02(0xa0);
response();
write24c02(address);
response();
write24c02(date);
response();
stop();
}
uchar read_24c02add(uchar address) {
uchar a;
start();
write24c02(0xa0);
response();
write24c02(address);
response();
start();
write24c02(0xa1);
response();
a=read24c02();
stop();
return a;
}
unsigned char DS18B20Init()
{ unsigned char x;
DS18B20=1;
delayb(2);
DS18B20=0;
delayb(80);
DS18B20=1;delayb(5);
x=DS18B20;
delayb(20);
return x;
}
unsigned char TempRead(void)
{
unsigned char i,dat;
DS18B20=1;
delayb(1);
for(i=0;i<8;i++)
{
DS18B20=0;
dat=dat>>1;
DS18B20=1;
if(DS18B20)
dat=dat|0x80;
delayb(4);
}
return dat;
}
void TempWriteByte(unsigned char
dat)
{
unsigned int i;
DS18B20=1;
delayb(2);
for(i=0;i<8;i++)