程序(7)

2019-08-30 17:48

{ case 1: nz_miao--; if(nz_miao==-1) nz_miao=59;//秒数据减到-1时自动变成59 write_sfm(14,nz_miao);//在LCD的正确位置显示改变后新的秒数 write_1602com(er+15); break; case 2: nz_fen--; if(nz_fen==-1) nz_fen=59; write_sfm(11,nz_fen); write_1602com(er+12);//因为设置液晶的模式是写入数据后,指针自动加一,在这里是写回原来的位置 break; case 3: nz_shi--; if(nz_shi==-1) nz_shi=23; write_sfm(8,nz_shi); write_1602com(er+9);//因为设置液晶的模式是写入数据后,指针自动加一,所以需要光标回位 break; } } } } }

//-------------------------------

void init(void) //定时器、计数器设置函数 { TMOD=0x11; //指定定时/计数器的工作方式为3 TH0=0; //定时器T0的高四位=0 TL0=0; //定时器T0的低四位=0 TH1=0x3C; TL1=0xB0; EA=1; //系统允许有开放的中断 ET0=1; //允许T0中断 ET1=1; IT1=1;

IT0=0; TR0=1; //开启中断,启动定时器 TR1=0; }

void alarm(void) { if((shi==nz_shi)&&(fen==nz_fen)&&(miao==0)) { TR1=1; } if((shi==nz_shi)&&(fen==(nz_fen+1))) { TR1=0; buzzer=1; } }

void ZD_baoshi(void) { buzzer=0; delay(5); buzzer=1; bsn++; if(bsn==temp_hour) { baoshi=0; } }

//*******************主函数************************** //*************************************************** void main() { P1=0xff; lcd_init(); //调用液晶屏初始化子函数 ds1302_init(); //调用DS1302时钟的初始化子函数 init(); //调用定时计数器的设置子函数 led=0; //打开LCD的背光电源 led1=0; buzzer=0; //蜂鸣器长响一次 delay(80);

buzzer=1; LED=0; while(1) //无限循环下面的语句: {

keyscan(); //调用键盘扫描子函数 led=led1; if(timerOn==1) alarm(); //闹钟输出 if((fen==0)&&(miao==0)) { if(shi>12) temp_hour=shi-12; else { if(shi==0) temp_hour=12; else temp_hour=shi; } shangyimiao=miao; baoshi=1; } if(baoshi==1) { ZD_baoshi(); do keyscan(); while(shangyimiao==miao); shangyimiao=miao; } } }

void timer0() interrupt 1 //取得并显示日历和时间 {

//Init_DS18B20();//温度传感器DS18b2初始化子函数,在头文件中

// flag=ReadTemperature();//将18b2头文件运行返回的函数结果送到变量FLAG中,用于显示

//读取秒时分周日月年七个数据(DS1302的读寄存器与写寄存器不一样):

miao = BCD_Decimal(read_1302(0x81));

fen = BCD_Decimal(read_1302(0x83)); shi = BCD_Decimal(read_1302(0x85)); ri = BCD_Decimal(read_1302(0x87)); yue = BCD_Decimal(read_1302(0x89)); nian=BCD_Decimal(read_1302(0x8d)); //week=BCD_Decimal(read_1302(0x8b)); //不读取,直接通过日期计算得到 if((led1==0)) { if(temp_miao!=miao) { temp_miao=miao; bltime++; } if(bltime==10) { led1=1; LED=1; bltime=0; } }

if(T_NL_NZ==1) //显示农历 { uint nian_temp,temp; temp=nian; nian_temp=2000+(temp&0xF0)*10+temp&0x0F; if((nian_temp@0==0)||((nian_temp0!=0)&&(nian_temp%4==0))) 为闰年 p_r=1; else p_r=0; Conversion(0,nian,yue,ri); write_1602com(er);//时间显示固定符号写入位置? for(a=0;a<16;a++) { if(p_r==0) write_1602dat(nlp[a]);//写显示时间固定符号,两个冒号 else write_1602dat(nlr[a]); } write_nl(3,year_moon);//农历 年 write_nl(6,month_moon);//农历 月

//判断是否

}

write_nl(9,day_moon);//农历 日 do keyscan();

while(T_NL_NZ==1);

write_1602com(er);//时间显示固定符号写入位置,从第2个位置后开始显示 for(a=0;a<16;a++) { write_1602dat(qk[a]);//写显示时间固定符号,两个冒号 }

write_1602com(er);//时间显示固定符号写入位置,从第2个位置后开始显示 for(a=0;a<8;a++) { write_1602dat(tab2[a]);//写显示时间固定符号,两个冒号 }

if(T_NL_NZ==2) //显示闹钟时间, { write_1602com(er);//时间显示固定符号写入位置? for(a=0;a<16;a++) write_1602dat(NZd[a]);//写显示时间固定符号,两个冒号 write_sfm(8,nz_shi);//农历 年 write_sfm(11,nz_fen);//农历 月 write_sfm(14,nz_miao);//农历 日

do keyscan();

while(T_NL_NZ==2);

write_1602com(er);//时间显示固定符号写入位置,从第2个位置后开始显示 for(a=0;a<16;a++) { write_1602dat(qk[a]);//写显示时间固定符号,两个冒号 }

write_1602com(er);//时间显示固定符号写入位置,从第2个位置后开始显示 for(a=0;a<8;a++) { write_1602dat(tab2[a]);//写显示时间固定符号,两个冒号 }


程序(7).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:AutoCAD三维建模系列教程 - 图文

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

马上注册会员

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