LCD12864单片机电子万年历程序

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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++)

相关文档
最新文档