微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > c51实现万年历、温度与闹钟功能程序

c51实现万年历、温度与闹钟功能程序

时间:11-18 来源:互联网 点击:

/******************************************************************************/
void Lcd_Mark1(void)//在预定的位置上写入汉字)
{
Clr_Scr();//清屏
frame();//显示边框
Mcs=1;Scs=0;
Disp_Chinese(5,8,shi);
Disp_Chinese(5,24,wen);
Disp_Chinese(3,8,xing);
Disp_Chinese(3,24,qi);
Disp_Chinese(1,40,nian);
Disp_Digit(5,56,point);
Mcs=0;Scs=1;
Disp_Chinese(5,8,sheshidu);
if(Bell_Swh == 1)//闹钟为开
{
Mcs=0;Scs=1;
Disp_Chinese(5,40,biaozhi);//显示闹钟图标
}

}

/******************************************************************************/
void Lcd_Mark2(void)
{
Clr_Scr();//清屏
frame();//显示边框

Mcs=1;Scs=0;//显示闹钟设定等几个汉字
Disp_Chinese(2,16,nao);
Disp_Chinese(2,32,zhong);
Disp_Chinese(2,48,she);
Mcs=0;Scs=1;
Disp_Chinese(2,0,ding);
Disp_Digit(4,0,maohao);
Disp_Digit(4,24,maohao);
}

/******************************************************************************/
void main(void)
{
unsigned char a;

Timer0_Init();
Init_lcd();//设置液晶显示器
WP = 0;//允许2408的写操作!

Clr_Scr();//清屏
Disp_Img(logo); //显示湘灵电子LOGO
Delay12864(10000);//Delay

Bell_Swh = Read_One_Byte(0x04);//读取开关的状态
Lcd_Mark1();

while(1)//主循环
{
//设置时钟的初始值,显示05年1月1号12:00:00
if(Add_Key == 0 && Dec_Key == 0)
{
Delay(1000);
if(Add_Key == 0 && Dec_Key == 0)
{
Init_1302();
}
}

/* if(Add_Key == 0)
{ Delay(1000);
if(Add_Key ==0)
{
//写入闹钟初始值08:00:00
Write_One_Byte(0x01,18);
Write_One_Byte(0x02,0);
Write_One_Byte(0x03,0);
}
}*/

if(OK_Key == 0 && Dec_Key ==0 )//进入闹钟设置界面
{
Delay12864(100);
if(OK_Key == 0 && Dec_Key ==0 )
{
Lcd_Mark2();
if(Bell_Swh == 0){Mcs=0;Scs=1;Disp_Chinese(2,32,guan);}//关
else {Mcs=0;Scs=1;Disp_Chinese(2,32,kai);}
while(1)
{
if (OK_Key == 0) // 设置和选择项目键
{
Delay(1000);
if(OK_Key == 0)
{
id2++;if(id2>5) id2=0;
}
while(OK_Key == 0);

}
switch( id2 )
{
case 0:Disp2();break;//正常显示
case 1:Kgb = 1;id_case2_key();Disp2();break;//开关
case 2:Kgb= 0;Hourb=1;id_case2_key();Disp2();break;//
case 3:Hourb=0;Minb=1;id_case2_key();Disp2();break;
case 4:Minb=0;Secb=1;id_case2_key();Disp2();break;
case 5:Secb=0;id2 = 0;Lcd_Mark1();goto FF;break;//返回主界面
default:break;
}
}//while(1)
}//if
}//if
/*****************************************/
FF: //返回主界面
/*****************************************/
if(flag == 0)
{
Mcs=0;Scs=1;
Disp_Digit(3,8,maohao);// :闪烁
Disp_Digit(3,32,maohao);
}
else
{
Mcs=0;Scs=1;
Disp_Digit(3,8,space);//显示空格
Disp_Digit(3,32,space);
}
if (OK_Key == 0) // 设置和选择项目键
{
Delay(1000);
if(OK_Key == 0)
{
id++;if(id>7)id=0;
}
while(OK_Key == 0);

}
switch( id )
{
case 0:sec = 0; Disp( );break;//正常显示
case 1:year = 1;id_case1_key();Disp();break;//年
case 2:year=0;mon=1;id_case1_key();Disp();break;//月
case 3:mon=0;day=1;id_case1_key();Disp();break; //日
case 4:day=0;weekk=1;id_case1_key();Disp();break;//星期
case 5:weekk=0;hour=1;id_case1_key();Disp();break; //小时
case 6:hour=0;min=1;id_case1_key();Disp();break; //分钟
case 7:min=0;sec=1;id_case1_key();Disp();break; //秒
default:break;
}

if(Bell_Swh == 1)//闹钟为开
{
H_2402=Read_One_Byte(0x01);//读取2408的
S_2402=Read_One_Byte(0x02);

d=read_clock(0x85);//读小时
e=d;
d=d>>4;
e=e&0x0f;
H_1302=10*d+e;

d=read_clock(0x83);//读分钟
e=d;
d=d>>4;
e=e&0x0f;
S_1302=10*d+e;

if(H_2402 == H_1302)
{
if(S_2402 == S_1302)
{
Clr_Scr();//清屏
frame();//显示边框
Mcs=1;Scs=0;
Disp_Chinese(3,16,nao);//闹钟显示时间到!
Disp_Chinese(3,32,zhong);
Disp_Chinese(3,48,shit);
Mcs=0;Scs=1;
Disp_Chinese(3,0,jian);
Disp_Chinese(3,16,dao);
Disp_Digit(3,40,fh);

while(S_2402 == S_1302)//判断是否到闹钟设定时间
{
for(a=0; a<100; a++)//BELL脉冲输出,驱动蜂鸣器
{
if(a<50){Bell_Out = 0;Delay(100);}
else {Bell_Out = 1;Delay(100);}
}

d=read_clock(0x83);//读分钟
e=d;
d=d>>4;
e=e&0x0f;
S_1302=10*d+e;
}
Lcd_Mark1();
}//if
}
}//if
}//while
}//main

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top