单片机电子钟实训报告(3)

2019-02-14 23:46

for(i=2000;i

if(leep_year(i))day+=366; else day+=365; }

for(j=1;j

if(j==1||j==3||j==5||j==7||j==8||j==10||j==12) day+=31;

if(j==4||j==6||j==9||j==11) day+=30;

if(flag_year_leap&&j==2)day+=29; if((!flag_year_leap)&&j==2)day+=28; }

day+=time.mday; mweek=day%7; switch(mweek) {

case 0:time.week=5;break; case 1:time.week=6;break; case 2:time.week=7;break; case 3:time.week=1;break; case 4:time.week=2;break; case 5:time.week=3;break; case 6:time.week=4;break; } time_ch.ch_week[0]=time.week+0x30; }

//月份的进位处理

void time_carry_mon_year(void) {

flag_year_leap=leep_year(time.year);//判断闰年 if(time.mday>=30) {

if(time.month==1||time.month==3||time.month==5||time.month==7\\ ||time.month==8||time.month==10||time.month==12)

//天数为31天的月,1、3、5、7、8、10、12

{

if(time.mday==32)

{time.mday=1;time.month++;} }

if(time.month==4||time.month==6||time.month==9||time.month==11)

11

{

if(time.month==31)

{time.mday=1;time.month++;} }

tran_ch(); }

if(time.month==2&&time.mday>=28) {

if(flag_year_leap&&(time.mday==30)) { time.mday=1;time.month++;}

if((!flag_year_leap)&&(time.mday==29)) { time.mday=1;time.month++;} tran_ch(); }

if(time.month==13)

{time.month=1;time.year++;tran_ch();}//年的进位 }

//时间的进位

void time_carry(void) {

if(time.second==60)

{time.minute++;time.second=0;} if(time.minute==60)

{time.hour++ ;time.minute=0;} if(time.hour ==24)

{time.mday++ ;time.hour=0 ;time_carry_mon_year();de_week();} }

//屏幕的显示函数 void dsp(void) {

if(flag_en_key==0)//非设置模式下的显示 {

tran_ch();

wcmd(0x02);//return cursor wstring(time_ch.ch_hour,2); wdata(':');

wstring(time_ch.ch_minute,2); wdata(':');

wstring(time_ch.ch_second,2); wstring(\ \ wcmd(0x80+0x40); wstring(\ \

wstring(time_ch.ch_year,4);

12

wdata('-');

wstring(time_ch.ch_month,2); wdata('-');

wstring(time_ch.ch_mday,2); wstring(\

wdata(time_ch.ch_week[0]); }

if(flag_en_key==1)//设置模式下的显示 {

if(flag_set<=2) {

tran_ch();

wcmd(0x02);//return cursor wstring(time_ch.ch_year,4); wdata('-');

wstring(time_ch.ch_month,2); wdata('-');

wstring(time_ch.ch_mday,2); }

if(flag_set>2) {

tran_ch();

wcmd(0x02);//return cursor wstring(time_ch.ch_hour,2); wdata(':');

wstring(time_ch.ch_minute,2); wdata(':');

wstring(time_ch.ch_second,2); wstring(\ \ } } }

//显示字符串

void dsp_string(char *pt) {

char i=0;

wcmd(0x80+0x40);//将光标调整至第二行 while(pt[i]) {

wdata(pt[i]); i++; } }

//退出按键模式

13

void exit_key(void) {

char i;

flag_en_key=0; flag_en_ok=0; flag_ok=0; flag_mean=0; flag_set=0;

wcmd(0x80+0x40); for(i=0;i<=16;i++) wdata('\\0'); }

//按键的处理

int solve_key(void) {

//if(key_mean==0);

if(key_ok==0)//确定或退出 {

if(flag_ok) { exit_key(); time_carry_mon_year(); de_week(); return 0; } else flag_ok=1; }

if(key_set ==0) {

if(flag_ok==0)//时分秒的选择 {

flag_set++;

if(flag_set==6)flag_set=0; switch(flag_set) {

case 0:dsp_string(string_year);break; case 1:dsp_string(string_month);break; case 2:dsp_string(string_mday);break; case 3:dsp_string(string_hour);break; case 4:dsp_string(string_minute);break; case 5:dsp_string(string_second);break; } }

if(flag_ok==1)//时分秒的设置

14

{

switch(flag_set) {

case 0:{time.year++ ;if(time.year==10000)time.year=2000;break;} case 1:{time.month++ ;time_carry_mon_year();break;} case 2:{time.mday++ ;time_carry_mon_year();break;}

case 3:{time.hour++ ;if(time.hour==24)time.hour=0;break;} case 4:{time.minute++;if(time.minute==60)time.minute=0;break;} case 5:{time.second++;if(time.second==60)time.second=0;break;} } } }

if(flag_ok==1)//是否更改数据 是显示 OK {

wcmd(0x80+0x4e); wdata('O'); wdata('K'); } else {

wcmd(0x80+0x4e); wdata('\\0'); wdata('?'); }

return 0; }

//MCU的秒中断函数与显示函数的执行 void INT_sec() interrupt 1 using 0 {

if(flag_sec==20)//flag_sec==20代表1s {

flag_sec=0; TH0=0x3c;

TL0=0xb0+2;//定时器再次进入0.05s的中断 time.second++;

flag_en_ok=0;//去掉key_ok的特殊优先权 time_carry(); dsp(); } else {

flag_sec++; TH0=0X3C;

TL0=0XB0+2;//定时器再次进入0.05s的中断

15

否显示 ?


单片机电子钟实训报告(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:衡阳市承接产业转移的调查与思考

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: