|
干货,上代码。
- #include <reg52.h>
- #include"1602.h"
- #include"delay.h"
- #include "ds1302.h"
- #include "key.h"
- #include"dh11.h"
- #include <intrins.h>
- sbit BEEP=P3^7;
- extern uchar S1num,flag,second,minute,hour,week,day,month,year;//秒、分、时、星期、日、月、年
- extern bit keyflag;
- /////////////////////////////////////////////////////
- extern uchar RHL,RHH,CL,CH;
- extern uint m,n;
- /////////////////////////////////////////////////////////
- uchar num;
- //uchar fan;
- ////////////////////////////////////////////////////////////////
- uchar code line1_data[] = {" : : "}; //定义第2行显示的字符
- extern bit k4flag;
- extern uchar second1,minute1,hour1;
- /////////////////////////////////////////////////////
- void beep()
- {
- BEEP=!BEEP;
- Delay_ms(200);
- BEEP=!BEEP;
- Delay_ms(200);
- }
- /*****************读出秒的十进制数***************************/
- uchar readsecond()
- {
- uchar dat;
- dat=read_1302add(0x81);
- second=((dat&0x70)>>4)*10+(dat&0x0f);
- return second;
- }
- /*****************读出分的十进制数***************************/
- uchar readminute()
- {
- uchar dat;
- dat=read_1302add(0x83);
- minute=((dat&0x70)>>4)*10+(dat&0x0f);
- return minute;
- }
- /*****************读出小时的十进制数***************************/
- uchar readhour()
- {
- uchar dat;
- dat=read_1302add(0x85);
- hour=((dat&0x70)>>4)*10+(dat&0x0f);
- return hour;
- }
- /*****************读出天的十进制数***************************/
- uchar readday()
- {
- uchar dat;
- dat=read_1302add(0x87);
- day=((dat&0x70)>>4)*10+(dat&0x0f);
- return day;
- }
- /*****************读出月的十进制数***************************/
- uchar readmonth()
- {
- uchar dat;
- dat=read_1302add(0x89);
- month=((dat&0x70)>>4)*10+(dat&0x0f);
- return month;
- }
- /*****************读出周的十进制数***************************/
- //uchar readweek()
- //{
- //uchar dat;
- //dat=read_1302add(0x8b);
- //week=((dat&0x70)>>4)*10+(dat&0x0f);
- //return week;
- //}
- /*****************读出年的十进制数***************************/
- uchar readyear()
- {
- uchar dat;
- dat=read_1302add(0x8d);
- year=((dat&0xf0)>>4)*10+(dat&0x0f);
- return year;
- }
- /************************读出所有时间**********************/
- void readtime()
- {
- readsecond();
- readminute();
- readhour();
- // readday();
- // readmonth();
- // readweek();
- // readyear();
- }
- void Init_Timer0(void)
- {
- TMOD |= 0x01; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响
- TH0=0xb0; //给定初值,这里使用定时器最大值从0开始计数一直到65535溢出
- TL0=0xc3;
- EA=1; //总中断打开
- ET0=1; //定时器中断打开
- // TR0=1; //定时器开关打开
- }
- void main()
- {
- uchar i;
- Init_Timer0();
- LCD_Init(); //初始化液晶
- Delay_ms(20); //延时有助于稳定
- LCD_Clear(); //清屏
- init_1302();
- LCD_Write_Com(0x40|0x80); //设置显示位置为第2行第0列
- i = 0;
- while(line1_data[i] != '\0') //在第2行0~3列显示"****"
- {
- LCD_Write_Data(line1_data[i]); //显示第2行字符
- i++; //指向下一字符
- }
- Delay_ms(1000);
- while(1)
- {
-
- if(k4==0)
- {
- Delay_ms(10);
- if(k4==0)
- {
- while(!k4);
- k4flag=~k4flag;
- }
- }
- if(k4flag==1)
- {
-
- TR0=1;
- if(((second1==0)&minute1==0)&hour1==0)
- {
-
- beep();
- }
-
- }
-
- else TR0=0;
-
-
-
- keyscan();
- if(keyflag==0)
- {
-
- readtime(); //读取年,月,日,时,分,秒
- // write_DTC();
- write_second(); //写秒
- write_minute(); //写分
- write_hour(); //写时
- // write_day(); //写日
- // write_month(); //写月
- // write_year(); //写年
- // write_week();
-
- // write_second1(); //写秒
- // write_minute1(); //写分
- // write_hour1(); //写时
-
- disp_nz();
-
- }
- Delay_ms(100);
- receive();
-
- }
- }
复制代码 |
|