android课程设计时钟,单片机制作的电子钟(含闹钟功能)课程设计报告

#include

#include

unsigned char code displaywelcome[]={" Welcome To My Lcd Timer"};//欢迎界面

unsigned char code displaywish[]={" Happy Every Day ^_^"}; //欢迎界面

unsigned char code overtemperature[]={"OVERTEMPERATURE!"};

unsigned char code digit[]={"0123456789"}; //数字代码

unsigned char mode,TH,TL,TN,TD,length,tempswitch,Maxtemp=40,amode,alarmmode,minutes,hours,

minutea,seconds,houra=12;

sbit SCLK=P3^6; //DS1302 时钟输入

sbit DATE=P3^4; //DS1302 数据输入

sbit REST=P3^5; //DS1302 复位端口

sbit SET=P1^4; //DS1302 设置模式选择位

sbit ADD=P1^5; //增加

sbit RED=P1^6; //减小

sbit CANL=P1^7;

void delay1ms(int i)//1 毫秒延时

{

int j,k;

while(i--)

for(j=76;j>1;j--);

for(k=29;k>1;k--);

}

void delaynus(unsigned char n) //延时若干微秒

{

unsigned char i;

for(i=0;i

}

/***********蜂鸣器模块************/

sbit beep=P1^5; //位定义,定义P.6 位fmp

void dely500(void)

{

unsigned char i;

for(i=250;i>0;i--)

{

_nop_();

}

}

void baojing(unsigned char n)

{

unsigned char x,i;

while(n--)

{

for(i=0;i<5;i++)

{

for(x=0;x<200;x++)

{

beep=~beep;

dely500();

}

}

for(i=0;i<3;i++)

{

for(x=0;x<200;x++)

{

beep=~beep;

dely500();

dely500();

}

}

}

}

/*******DS1302 模块*************/

void Write1302(unsigned char date)//向1302 写数据

{

unsigned char i;

SCLK=0;

delaynus(2);

for(i=0;i<8;i++)

{

DATE=date&0x01;

SCLK=1;

delaynus(2);

SCLK=0;

delaynus(2);

date>>=1;

}

}

void WriteSet1302(unsigned char cmd,unsigned char date) //根据相应的命令输入相应的数据

{

REST=0;

SCLK=0;

REST=1;

Write1302(cmd);

delaynus(5);

Write1302(date);

SCLK=1;

REST=0;

}

unsigned char Read1302(void) //读取1302 数据

{

unsigned char i,date;

delaynus(2);

for(i=0;i<8;i++)

{

date>>=1;

if(DATE==1)

date|=0x80;

SCLK=1;

delaynus(2);

SCLK=0;

delaynus(2);

}

return date;

}

unsigned char ReadSet1302(unsigned char cmd)//根据命令读取1302 相应的值

{

unsigned char date;

REST=0;

SCLK=0;

REST=1;

Write1302(cmd);

delaynus(2);

date=Read1302();

SCLK=1;

REST=0;

return date;

}

void IntDS1302(void) //DS1302 初始化

{

unsigned char flag;

flag= ReadSet1302(0x81);

if(flag&0x80) { //判断时钟芯片是否关闭

WriteSet1302(0x8E,0x00); //根据写状态寄存器命令字,写入不保护指令

WriteSet1302(0x80,((0/10)<<4|(0%10))); //根据写秒寄存器命令字,写入秒的初始值

WriteSet1302(0x82,((0/10)<<4|(0%10))); //根据写分寄存器命令字,写入分的初始值

WriteSet1302(0x84,((0/10)<<4|(0%10))); //根据写小时寄存器命令字,写入小时的初始值

WriteSet1302(0x86,((0/10)<<4|(0%10))); //根据写日寄存器命令字,写入日的初始值

WriteSet1302(0x88,((0/10)<<4|(0%10))); //根据写月寄存器命令字,写入月的初始值

WriteSet1302(0x8c,((10/10)<<4|(10%10))); //根据写年寄存器命令字,写入年的初始值

WriteSet1302(0x90,0xa5); //打开充电功能选择2K 电阻充电方式

WriteSet1302(0x8E,0x80); //根据写状态寄存器命令字,写入保护指令

}

}

/***************液晶显示模块*****************/

sbit RS=P2^6;

sbit RW=P2^5;

sbit E=P2^7;

sbit BF=P0^7;

/*液晶忙检测*/

bit BusyTest(void)

{

bit result;

RS=0;

RW=1;

E=1;

_nop_();

_nop_();

_nop_();

result=BF;

_nop_();

_nop_();

_nop_();

E=0;

return result;

}

/*写指令*/

void Write_com(unsigned char command)

{

while(BusyTest()!=0);

RS=0;

RW=0;

E=0;

_nop_();

_nop_();

_nop_();

P0=command;

_nop_();

_nop_();

_nop_();

E=1;

_nop_();

_nop_();

_nop_();

E=0;

}

/*写地址*/

void Write_Address(unsigned char address)

{

Write_com(address|0x80);

delay1ms(1);

}

/*写数据*/

void Write_Date(unsigned char date)

{

RS=1;

RW=0;

E=0;

_nop_();

_nop_();

_nop_();

P0=date;

_nop_();

_nop_();

_nop_();

E=1;

_nop_();

_nop_();

_nop_();

E=0;

delay1ms(1);

}

/*初始化*/

void Lcd_Int(void)

{

Write_com(0x38);

delay1ms(1);

Write_com(0x38);

delay1ms(1);

Write_com(0x06);

delay1ms(1);

Write_com(0x0c);

delay1ms(1);

Write_com(0x01);

}

void displaymainpart(void)//显示液晶主要部分(不变化部分)

{

Write_Address(0x01);

delay1ms(1);

Write_Date('D');

Write_Date('A');

Write_Date('T');

Write_Date('E');

Write_Date(':');

delay1ms(1);

Write_Address(0x0A);

delay1ms(1);

Write_Date('-');

Write_Address(0x0D);

Write_Date('-');

Write_Address(0x42);

Write_Date('T');

Write_Date('I');

Write_Date('M');

Write_Date('E');

Write_Date(':');

Write_Address(0x4A);

Write_Date('-');

Write_Address(0x4D);

Write_Date('-');

Write_Address(0x06);

Write_Date('2');

Write_Date('0');

}

void display_Second(unsigned char second) //在液晶上显示秒

{

unsigned char i,j;

i=second/10;

j=second%10;

Write_Address(0x4E);

Write_Date(digit[i]);

Write_Date(digit[j]);

delay1ms(1);

}

void display_Minute(unsigned char minute) //在液晶上显示分

{

unsigned char i,j;

i=minute/10;

j=minute%10;

Write_Address(0x4B);

Write_Date(digit[i]);

Write_Date(digit[j]);

delay1ms(1);

}

void display_Hour(unsigned char hour) //在液晶上显示时

{

unsigned char i,j;

i=hour/10;

j=hour%10;

Write_Address(0x48);

Write_Date(digit[i]);

Write_Date(digit[j]);

delay1ms(1);

}

void display_Day(unsigned char day) //在液晶上显示日

{

unsigned char i,j;

i=day/10;

j=day%10;

Write_Address(0x0E);

Write_Date(digit[i]);

Write_Date(digit[j]);

delay1ms(1);

}

void display_Month(unsigned char month) //在液晶上显示月

{

unsigned char i,j;

i=month/10;

j=month%10;

Write_Address(0x0B);

Write_Date(digit[i]);

Write_Date(digit[j]);

delay1ms(1);

}

void display_Year(unsigned char year) //在液晶上显示年

{

unsigned char i,j;

i=year/10;

j=year%10;

Write_Address(0x08);

Write_Date(digit[i]);

Write_Date(digit[j]);

delay1ms(1);

}

void display_houra(unsigned char x) //闹钟小时部分显示

{

unsigned char i,j;

i=x/10;

j=x%10;

Write_Address(0x44);

Write_Date(digit[i]);

Write_Date(digit[j]);

}

void display_minutea(unsigned char x)//闹钟分钟部分显示

{

unsigned char i,j;

i=x/10;

j=x%10;

Write_Address(0x47);

Write_Date(digit[i]);

Write_Date(digit[j]);

}

void display_Time(void) //显示实时时间

{

unsigned char value,day,month,year;

Write_com(0x0c);

value=ReadSet1302(0x81);

seconds=(((value&0x70)>>4)*10+(value&0x0f));

display_Second(seconds);

value=ReadSet1302(0x83);

minutes=(((value&0x70)>>4)*10+(value&0x0f));

display_Minute(minutes);

value=ReadSet1302(0x85);

hours=(((value&0x70)>>4)*10+(value&0x0f));

display_Hour(hours);

value=ReadSet1302(0x87);

day=(((value&0x70)>>4)*10+(value&0x0f));

display_Day(day);

value=ReadSet1302(0x89);

month=(((value&0x70)>>4)*10+(value&0x0f));

display_Month(month);

value=ReadSet1302(0x8D);

year=(((value&0xf0)>>4)*10+(value&0x0f));

display_Year(year);

}

void displaystar(void) //显示欢迎界面

{

unsigned char i,j;

Write_Address(0x0f);

while(displaywelcome[i]!='\0')

{

Write_Date(displaywelcome[i]);

i++;

delay1ms(1);

}

i=0;

Write_Address(0x4f);

while(displaywish[i]!='\0')

{

Write_Date(displaywish[i]);

i++;

delay1ms(1);

}

j=40;

while(j--)

{

Write_com(0x18);//循环左移

delay1ms(700);

}

Write_com(0x01);

delay1ms(10);

}

void gbdisplay(unsigned char address) //时间调整时光标闪烁

{

Write_Address(address);

delay1ms(5);

Write_com(0x0f);

delay1ms(5);

}

void displaymaxt(unsigned char x) //显示最大温度

{

unsigned char i,j,k;

Write_com(0x0c);

delay1ms(2);

Write_Address(0x44);

i=x/100;

j=x/10;

k=x%10;

Write_Date(digit[i]);

Write_Date(digit[j]);

Write_Date(digit[k]);

}

/*****************时间调整部分*********************/

void hourset(void) //调时

{

unsigned char timevalue,hour;

delay1ms(500); //防止多次触发

WriteSet1302(0x8e,0x00);//将写保护去掉,确保能正常将调整后的数值写入DS1302

timevalue=ReadSet1302(0x85); //读取此时的数值

hour=(((timevalue&0x70)>>4)*10+(timevalue&0x0f));

while(1)

{

if(ADD==0)

{

delay1ms(50);

if(ADD==0)

{

hour++;

delay1ms(300);

while(ADD==0);

}

}

if(RED==0)

{

delay1ms(50);

if(RED==0)

{

hour--;

delay1ms(300);

if(hour==0) hour=23;

while(RED==0);

}

}

timevalue=(((hour)/10)<<4|(hour%10));

WriteSet1302(0x84,timevalue);

delay1ms(1);

display_Hour(hour);

Write_Address(0x49);

delay1ms(5);

if(hour>=24) hour=0;

delay1ms(5);

if(CANL==0)

{

mode=0;

Write_com(0x0c);

break;

}

if(SET==0) break;

}

WriteSet1302(0x8e,0x80);

}

void minuteset(void) //调分

{

unsigned char timevalue,minute;

delay1ms(500);

WriteSet1302(0x8e,0x00);

timevalue=ReadSet1302(0x83);

minute=(((timevalue&0x70)>>4)*10+(timevalue&0x0f));

while(1)

{

if(ADD==0)

{

delay1ms(10);

if(ADD==0)

{

minute++;

if(minute>=60) timevalue=0;

while(ADD==0);

}

}

if(RED==0)

{

delay1ms(10);

if(RED==0)

{

minute--;

delay1ms(300);

if(minute==0) minute=59;

while(RED==0);

}

}

timevalue=((minute/10)<<4|(minute%10));

WriteSet1302(0x82,timevalue);

delay1ms(1);

display_Minute(minute);

Write_Address(0x4c);

delay1ms(5);

if(minute>=60) minute=0;

delay1ms(5);

if(CANL==0)

{

mode=0;

Write_com(0x0c);

break;

}

if(SET==0) break;

}

WriteSet1302(0x8e,0x80);

}

void secondset(void) //秒归零

{

unsigned char second;

delay1ms(500);

WriteSet1302(0x8e,0x00);

while(1)

{

if(ADD==0)

{

delay1ms(10);

if(ADD==0)

{

second=0;

WriteSet1302(0x80,0x00);

while(ADD==0);

}

}

delay1ms(1);

display_Second(second);

Write_Address(0x4f);

delay1ms(5);

if(CANL==0)

{

mode=0;

Write_com(0x0c);

break;

}

if(SET==0) break;

}

WriteSet1302(0x8e,0x80);

}

void yearset(void) //调年

{

unsigned char datevalue,year;

delay1ms(500);

WriteSet1302(0x8e,0x00);

datevalue=ReadSet1302(0x8d);

year=(((datevalue&0x70)>>4)*10+(datevalue&0x0f));

while(1)

{

if(ADD==0)

{

delay1ms(10);

if(ADD==0)

{

year++;

while(ADD==0);

}

}

if(RED==0)

{

delay1ms(10);

if(RED==0)

{

year--;

delay1ms(300);

while(RED==0);

}

}

datevalue=((year/10)<<4|(year%10));

WriteSet1302(0x8c,datevalue);

delay1ms(5);

display_Year(year);

delay1ms(5);

Write_Address(0x09);

delay1ms(5);

if(CANL==0)

{

mode=0;

Write_com(0x0c);

break;

}

if(SET==0) break;

}

WriteSet1302(0x8e,0x80);

}

void monthset(void) //调月

{

unsigned char datevalue,month;

delay1ms(500);

WriteSet1302(0x8e,0x00);

datevalue=ReadSet1302(0x89);

month=(((datevalue&0x70)>>4)*10+(datevalue&0x0f));

while(1)

{

if(ADD==0)

{

delay1ms(10);

if(ADD==0)

{

month++;

if(month>12) month=1;

while(ADD==0);

}

}

if(RED==0)

{

delay1ms(10);

if(RED==0)

{

month--;

delay1ms(300);

if(month==0) month=12;

while(RED==0);

}

}

datevalue=((month/10)<<4|(month%10));

WriteSet1302(0x88,datevalue);

delay1ms(1);

display_Month(month);

Write_Address(0x0c);

delay1ms(5);

if(CANL==0)

{

mode=0;

Write_com(0x0c);

break;

}

if(SET==0) break;

}

WriteSet1302(0x8e,0x80);

}

void dayset(void) //调日

{

unsigned char datevalue,day;

delay1ms(500);

WriteSet1302(0x8e,0x00);

datevalue=ReadSet1302(0x87);

day=(((datevalue&0x70)>>4)*10+(datevalue&0x0f));

while(1)

{

if(ADD==0)

{

delay1ms(10);

if(ADD==0)

{

day++;

if(day>31) day=1;

while(ADD==0);

}

}

if(RED==0)

{

delay1ms(10);

if(RED==0)

{

day--;

delay1ms(300);

if(day==0) day=31;

while(RED==0);

}

}

datevalue=((day/10)<<4|(day%10));

WriteSet1302(0x86,datevalue);

delay1ms(1);

display_Day(day);

Write_Address(0x0f);

delay1ms(5);

if(CANL==0)

{

mode=0;

Write_com(0x0c);

break;

}

if(SET==0) break;

}

WriteSet1302(0x8e,0x80);

}

void alarmhourset(void) //闹钟小时调整

{

unsigned char value;

value=houra;

while(1)

{

if(ADD==0)

{

delay1ms(20);

if(ADD==0)

{

Write_com(0x0c);

delay1ms(5);

value++;

if(value>23) value=0;

while(ADD==0);

}

}

if(RED==0)

{

delay1ms(20);

if(RED==0)

{

value--;

if(value==0) value=23;

while(RED==0);

}

}

houra=value;

display_houra(houra);

gbdisplay(0x45);

if(CANL==0)

{

delay1ms(500);

break;

}

}

}

void alarmminuteset(void) //闹钟分钟调整

{

while(1)

{

if(ADD==0)

{

delay1ms(20);

if(ADD==0)

{

minutea++;

if(minutea>59) minutea=0;

while(ADD==0) ;

}

}

if(RED==0)

{

delay1ms(20);

if(RED==0)

{

minutea--;

if(minutea==0) minutea=59;

while(RED==0) ;

}

}

display_minutea(minutea);

gbdisplay(0x48);

if(CANL==0)

{

delay1ms(500);

break;

}

}

}

void TimeSet(void) //时间调整函数

{

display_Time();

if(SET==0)

{

delay1ms(10);

if(SET==0)

{

mode++;

delay1ms(20);

switch(mode)

{

case(1):{gbdisplay(0x48);hourset(); delay1ms(500);} break;

case(2):{gbdisplay(0x4c);minuteset();delay1ms(500);} break;

case(3):{gbdisplay(0x4f);secondset();delay1ms(500);} break;

case(4):{gbdisplay(0x09);yearset();delay1ms(500);} break;

case(5):{gbdisplay(0x0c);monthset();delay1ms(500);} break;

case(6):{gbdisplay(0x0f);dayset();delay1ms(500);} break;

}

if(mode==7) mode=0;

}

}

}

/***************显示温度模块********************/

unsigned char code displayexplain[]={"Digit thermometer"};

unsigned char code displayerror[]={"DS18B20 ERROR"};

unsigned char code displayerror1[]={"PLEASE CHECK "};

unsigned char code displaypart1[]={"WenDu:"};

unsigned char code displaypart2[]={"Cent"};

unsigned char flag;

/**********************操作DS18B20 模块***************************/

sbit DQ=P3^7;

unsigned char time;

/**********************DS18B20 初始化****************************/

bit IntDS18B20(void)

{

bit temp;

DQ=1;

for(time=0;time<2;time++);

DQ=0;

for(time=0;time<200;time++);

DQ=1;

for(time=0;time<10;time++);

temp=DQ;

for(time=0;time<200;time++);

return temp;

}

/**************************读DS18B20**********************/

unsigned char ReadDS18B20(void)

{

unsigned char i;

unsigned char dat;

for(i=0;i<8;i++)

{

DQ=1;

_nop_();

DQ=0;

_nop_();

DQ=1;

for(time=0;time<2;time++);

dat>>=1;

if(DQ==1)

dat=dat|0x80;

else

dat=dat|0x00;

for(time=0;time<10;time++);

}

return dat;

}

/*********************向DS18B20 写数据**************************/

void WriteDS18B20(unsigned char date)

{

unsigned char i;

for(i=0;i<8;i++)

{

DQ=1;

_nop_();

DQ=0;

DQ=date&0x01;

for(time=0;time<10;time++);

DQ=1;

for(time=0;time<1;time++);

date>>=1;

}

for(time=0;time<4;time++);

}

/*******************为读取温度做好准备************************/

void ReadyreadDS18B20(void)

{

IntDS18B20();

WriteDS18B20(0XCC);

WriteDS18B20(0X44);

delay1ms(200);

IntDS18B20();

WriteDS18B20(0XCC);

WriteDS18B20(0XBE);

}

/*************在1602 液晶上显示相关信息模块**********************/

/****************当未检测到DS18B20 时显示信息模块****************/

void Display_Error(void)

{

unsigned char i=0;

Write_Address(0x00);

while(displayerror[i]!='\0')

{

Write_Date(displayerror[i]);

i++;

delay1ms(100);

}

delay1ms(5);

i=0;

Write_Address(0x40);

while(displayerror1[i]!='\0')

{

Write_Date(displayerror1[i]);

i++;

delay1ms(100);

}

delay1ms(3000) ;

}

/*************温度显示模块****************/

void Display_Explain(void)

{

unsigned char i=0;

Write_Address(0x00);

delay1ms(5);

while(displayexplain[i]!='\0')

{

Write_Date(displayexplain[i]);

i++;

delay1ms(5);

}

i=0;

Write_Address(0x40);

while(displaypart1[i]!='\0')

{

Write_Date(displaypart1[i]);

i++;

delay1ms(5);

}

i=0;

Write_Address(0x4C);

while(displaypart2[i]!='\0')

{

Write_Date(displaypart2[i]);

i++;

delay1ms(5);

}

Write_Address(0x49);

Write_Date('.');

delay1ms(5);

}

/*********************显示温度整数部分*************************/

void Display_Integer(unsigned char x)

{

unsigned char i,j,k;

i=x/100;

j=x%100/10;

k=x%10;

Write_Address(0x46);

if(flag==1) Write_Date('-');

Write_Date(digit[i]);

Write_Date(digit[j]);

Write_Date(digit[k]);

delay1ms(50) ;

}

/************显示温度小数部分*********************/

void Display_Decimal(unsigned char x)

{

Write_Address(0x4A);

delay1ms(5);

Write_Date(digit[x]);

delay1ms(50);

}

void displayovert(void)

{

unsigned char i;

Write_com(0x01);

delay1ms(10);

Write_Address(0x03);

delay1ms(10);

Write_Date('W');

Write_Date('A');

Write_Date('R');

Write_Date('N');

Write_Date('I');

Write_Date('N');

Write_Date('G');

Write_Date('!');

Write_Address(0x40);

while(overtemperature[i]!='\0')

{

Write_Date(overtemperature[i]);

i++;

delay1ms(10);

}

}

/*******************温度主函数********************/

void Temperature(void)

{

unsigned char i;

delay1ms(5);

if(IntDS18B20()!=0) Display_Error();

else

{

delay1ms(1);

Write_com(0x01);

delay1ms(5);

Display_Explain();

for(length=50;length>0;length--)

{

for(i=0;i<6;i++)

{

flag=0;

ReadyreadDS18B20();

TL=ReadDS18B20();

TH=ReadDS18B20();

if((TH&0XF8)!=0X00)

{

flag=1;

TL=~TL;

TH=~TH;

TL+=1;

if(TL>255) TH+=1;

TN=TH*16+TL/16;

TD=(TL%16)*10/16;

}

TN=TH*16+TL/16;

TD=(TL%16)*10/16;

Display_Integer(TN);

Display_Decimal(TD);

delay1ms(10);

}

if(tempswitch==1)

{

if(TN>=Maxtemp)

{

Write_Address(0x03);

delay1ms(5);

displayovert();

while(1)

{

baojing(1);

if(CANL==0)

{

Write_com(0x01);

delay1ms(5);

break;

}

}

}

}

if(CANL==0) break;

}

}

}

void tempset(void)

{

if(ADD==0)

{

delay1ms(10);

if(ADD==0)

{

Maxtemp++;

while(ADD==0);

}

}

if(RED==0)

{

delay1ms(10);

if(RED==0)

{

Maxtemp--;

while(RED==0);

}

}

}

void Maxtempset(void) //高温报警设置

{

Write_com(0x01);

delay1ms(10);

Write_Address(0x03);

delay1ms(10);

Write_Date('T');

Write_Date('E');

Write_Date('M');

Write_Date('P');

Write_Address(0x09);

Write_Date('S');

Write_Date('E');

Write_Date('T');

Write_Address(0x40);

Write_Date('M');

Write_Date('A');

Write_Date('X');

Write_Date(':');

while(1)

{

if(SET==0)

{

delay1ms(20);

if(SET==0)

{

Write_Address(0x4e);

Write_com(0x0f);

while(1)

{

if(ADD==0)

{

delay1ms(20);

if(ADD==0)

{

Write_Address(0x4b);

delay1ms(5);

Write_Date('O');

Write_Date('N');

Write_Date(' ');

tempswitch=1;

}

}

if(RED==0)

{

delay1ms(20);

if(RED==0)

{

Write_Address(0x4b);

Write_Date('O');

Write_Date('F');

Write_Date('F');

tempswitch=0;

}

}

if(CANL==0)

{

delay1ms(500);

break;

}

}

}

}

if(tempswitch==1)

{

Write_Address(0x4b);

Write_Date('O');

Write_Date('N');

Write_Date(' ');

tempset();

displaymaxt(Maxtemp);

if(CANL==0)

{

Write_com(0x01);

displaymainpart();

break;

}

}

if(tempswitch==0)

{

Write_com(0x0c);

Write_Address(0x4b);

Write_Date('O');

Write_Date('F');

Write_Date('F');

}

if(CANL==0)

{

Write_com(0x01);

displaymainpart();

break;

}

}

}

void alarmswitchset(void)

{

while(1)

{

if(ADD==0)

{

delay1ms(100);

if(ADD==0)

{

alarmmode=1;

Write_Address(0x4c);

Write_Date('O');

Write_Date('N');

Write_Date(' ');

}

}

if(RED==0)

{

alarmmode=0;

Write_Address(0x4c);

Write_Date('O');

Write_Date('F');

Write_Date('F');

}

if(CANL==0)

{

delay1ms(500);

break;

}

}

}

/**************** 设置模块******************/

void Set(void)

{

if(SET==0)

{

delay1ms(10);

if(SET==0)

{

Write_Address(0x40);

Write_Date('T');

Write_com(0x0f);

delay1ms(1000);

Write_com(0x0c);

while(1)

{

TimeSet();

if(ADD==0)

{

delay1ms(20);

if(ADD==0)

{

Write_com(0x01);

Write_Address(0x00);

delay1ms(5);

Write_Date('S');

delay1ms(10);

Maxtempset();

}

}

if(RED==0)

{

delay1ms(20);

if(RED==0)

{

Write_com(0x01);

delay1ms(5);

Write_Address(0x02);

Write_Date('A');

Write_Date('L');

Write_Date('A');

Write_Date('R');

Write_Date('M');

Write_Address(0x09);

Write_Date('S');

Write_Date('E');

Write_Date('T');

Write_Address(0x46);

Write_Date('-');

display_houra(houra);

display_minutea(minutea);

if(alarmmode==1)

{

Write_Address(0x4c);

Write_Date('O');

Write_Date('N');

Write_Date(' ');

}

if(alarmmode==0)

{

Write_Address(0x4c);

Write_Date('O');

Write_Date('F');

Write_Date('F');

}

while(1)

{

if(SET==0)

{

delay1ms(100);

if(SET==0)

{

amode++;

switch(amode)

{

case(1):{gbdisplay(0x45);alarmhourset();Write_com(0x0c);delay1ms(500);} break;

case(2):{gbdisplay(0x48);alarmminuteset();Write_com(0x0c);delay1ms(500);} break;

case(3):{gbdisplay(0x4c);alarmswitchset();Write_com(0x0c);delay1ms(500);} break;

}

if(amode==4) amode=0;

}

}

if(CANL==0)

{

Write_com(0x01);

delay1ms(5);

displaymainpart();

break;

}

}

}

}

if(CANL==0)

{

Write_Address(0x40);

Write_Date(' ');

Write_com(0x0c);

break;

}

}

}

}

}

/***************主函数**********************/

void main()

{

IE=0X82; //打开定时中断

TMOD=0X01; //选择定时器0 工作在方式1

TR0=0; //启动定时器0

IntDS1302(); //初始化DS1302

delay1ms(1);

Lcd_Int(); //1602 液晶初始化

delay1ms(2);

displaystar(); //显示欢迎界面

displaymainpart(); //显示主要部分(不变化)

while(1)

{

display_Time( );

Set( );

if(ADD==0)

{

Write_com(0x01);

delay1ms(5);

Temperature();

Write_com(0x01);

displaymainpart();

}

if((hours==houra)&&(minutes==minutea)&&(seconds==0))

{

if(alarmmode==1)

{

Write_com(0x01);

delay1ms(5);

Write_Address(0x03);

Write_Date('T');

Write_Date('I');

Write_Date('M');

Write_Date('E');

Write_Address(0x08);

Write_Date('U');

Write_Date('P');

Write_Date('!');

delay1ms(5);

while(1)

{

baojing(1);

if(CANL==0)

{

Write_com(0x01);

delay1ms(5);

displaymainpart();

break;

}

}

}

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值