📄 main.c
字号:
}
/***********************************************************
// 函数名: GUI_Init()
// 入口参数: void
// 出口参数: void
// 功能: 图形界面初始化
// 说明: 一些永远不耍更新的图形(如线条,"年"、"月"、"日"等)
只是在初始化时写入,中间过程不再更新。
// 最后修改: 2008.07.29
***********************************************************/
void GUI_Init()
{
uint i,j;
////////进入界面///////////
LCD12864_init();
ClearLCD();
LCD_ShowTemp(); //在显示图片之前启动温度转换
img12864_disp(uBmp); //显示图片
for(i=0;i<10;i++)
for(j=0;j<32767;j++);
ClearLCD();
/////////描绘框架//////////
Rect(0,0,127,63,1);
Line(62,0,62,62,1);
Line(0,48,127,48,1);
Line(0,15,127,15,1);
Line(24,15,24,48,1);
Line(63,32,128,32,1);
Line(97,0,97,15,1);
//Line(24,15,24,48,1);
////////时间初始化//////////
SetTime(sys); //设置时间
GetTime(&sys); //获得时间
Show_YMD();
LCD_ShowTime(sys.cSec,6,111,Sec_Flag,UpLine,UnderLine);
en_disp(6,103,1,Asc,":",1,UpLine,UnderLine);
LCD_ShowTime(sys.cMin,6,87,Min_Flag,UpLine,UnderLine);
en_disp(6,79,1,Asc,":",1,UpLine,UnderLine);
LCD_ShowTime(sys.cHour,6,63,Hour_Flag,UpLine,UnderLine);
hz_disp(2,64,1,ucLunar[11],1,NoUpLine,NoUnderLine); //"农"
hz_disp(2,80,1,ucLunar[12],1,NoUpLine,NoUnderLine); //"历"
hz_disp(4,79,1,uMod[1],1,UpLine,NoUnderLine); //"月"
////////显示初始化温度//////
en_disp(0,65,2,Asc,dispBuf,1,UpLine,UnderLine);
hz_disp(0,81,1,ucLunar[18],1,UpLine,UnderLine);
}
/***********************************************************
// 函数名: DecToBCD()
// 入口参数: void
// 出口参数: void
// 功能: 把时间由10进制转为BCD
// 说明: DS1302以BCD存储
// 最后修改: 2008.07.29
***********************************************************/
void DecToBCD()
{
sys.cHour=(((sys.cHour)/10)<<4)+((sys.cHour)%10);
sys.cMin=(((sys.cMin)/10)<<4)+((sys.cMin)%10);
sys.cSec=((sys.cSec/10)<<4)+((sys.cSec)%10);
sys.cYear=((sys.cYear/10)<<4)+((sys.cYear)%10);
sys.cMon=((sys.cMon/10)<<4)+((sys.cMon)%10);
sys.cDay=((sys.cDay/10)<<4)+((sys.cDay)%10);
}
/***********************************************************
// 函数名: Time_Set()
// 入口参数: void
// 出口参数: void
// 功能: 时间设置
// 说明: 具体的时间设置
// 最后修改: 2008.07.29
***********************************************************/
void Time_Set()
{
if(State_Flag) //设置键按下
{
State_Flag=FALSE;
State_Set++;
//State_Set%=7;
if(State_Set==8) State_Set=0;
}
Hour_Flag=TRUE;Min_Flag=TRUE;Sec_Flag=TRUE;
Year_Flag=TRUE;Mon_Flag=TRUE;Day_Flag=TRUE;
switch(State_Set) //设置类型
{
case 0: //无设置
break;
case 1: //设置时
Hour_Flag=FALSE;
break;
case 2: //设置分
Min_Flag=FALSE;
break;
case 3: //设置秒
Sec_Flag=FALSE;
break;
case 4: //设置天
Day_Flag=FALSE;
break;
case 5:
Mon_Flag=FALSE; //设置月
break;
case 6:
Year_Flag=FALSE; //设置年
break;
case 7: //无动作,设置此值为让"年"的反白消失。
break;
}
if(Inc_Flag) //加键被按下
{
Inc_Flag=FALSE;
switch(State_Set)
{
case 0:
break;
case 1: //小时加
sys.cHour++;
(sys.cHour)%=24;
break;
case 2: //分加
sys.cMin++;
sys.cMin%=60;
break;
case 3: //秒加
sys.cSec++;
sys.cSec%=60;
break;
case 4: //天加
(sys.cDay)=(sys.cDay%Mon2[YearFlag(sys.cYear)][sys.cMon])+1;
break;
case 5: //月加
sys.cMon=(sys.cMon%12)+1;
break;
case 6:
sys.cYear++; //年加
sys.cYear=sys.cYear%100;
break;
}
sys.cWeek=GetWeekDay(sys.cYear,sys.cMon,sys.cDay); //算出星期
DecToBCD(); //转为BCD
SetTime(sys); //存入DS1302
}
if(Dec_Flag) //减键按下
{
Dec_Flag=FALSE;
switch(State_Set)
{
case 0:
break;
case 1:
sys.cHour=(sys.cHour+23)%24; //时减
break;
case 2: //分减
sys.cMin=(sys.cMin+59)%60;
break;
case 3: //秒减
sys.cSec=(sys.cSec+59)%60;
break;
case 4: //天减
sys.cDay=((sys.cDay+Mon2[YearFlag(sys.cYear)][sys.cMon]-1)%Mon2[YearFlag(sys.cYear)][sys.cMon]);
if(sys.cDay==0) sys.cDay=Mon2[YearFlag(sys.cYear)][sys.cMon];
break;
case 5: //月减
sys.cMon=(sys.cMon+11)%12;
if(sys.cMon==0) sys.cMon=12;
break;
case 6: //年减
sys.cYear=(sys.cYear+99)%100;
break;
}
sys.cWeek=GetWeekDay(sys.cYear,sys.cMon,sys.cDay);
DecToBCD();
SetTime(sys);
}
}
void main()
{
SFR_Init();
CAL_Init();
GUI_Init();
TR0=1;
TR1=1;
while(1)
{
GetTime(&sys); //获得时间
LCD_ShowTemp(); //显示温度
LCD_ShowWNL(); //显示万年历
Time_Set(); //时间设置
}
}
void timer0() interrupt 1 //控制温度采集
{
TH0= (-50000)/256;
TL0= (-50000)%256;
T0_Count++;
if(T0_Count==20)
{
Tmp_Count++;
T0_Count=0;
}
if(Tmp_Count==33)
{
Tmp_Count=0;
Tmp_Flag=TRUE;
}
}
void timer1() interrupt 3 //按键扫描
{
TH1= (-10000)/256;
TL1= (-10000)%256;
keyinput(); // 设置
if (keyvalue&0x10)
{
State_Flag=TRUE;
keyvalue &= 0xef; //清键值,保证一直按下只执行一次按键动作。
}
//精度键检测 //080616
if (keyvalue&0x20 ) //加
{
Inc_Flag=TRUE;
keyvalue &= 0xdf; //清键值,保证一直按下只执行一次按键动作。
}
//蜂鸣器键检测 //080616
if (keyvalue&0x40) //减
{
Dec_Flag=TRUE;
keyvalue &= 0xbf; //清键值,保证一直按下只执行一次按键动作。
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -