delaynms(30); if(add==0) {
while(!add);
mint++; if(mint==60) mint=0; BCD(mint); LCD_WRITE(LINE2+4,COM); LCD_WRITE(SW+0x30,DAT); LCD_WRITE(GW+0x30,DAT); } }
if(miu==0) {
delaynms(30); if(miu==0) {
while(!miu); mint--;
if(mint==-1)mint=59; BCD(mint); LCD_WRITE(LINE2+4,COM); LCD_WRITE(SW+0x30,DAT); LCD_WRITE(GW+0x30,DAT); } } }
if(a==3) {
if(add==0) {
delaynms(30); if(add==0) {
while(!add); hourt++; if(hourt==24)hour=0; BCD(hourt); LCD_WRITE(LINE2+1,COM); LCD_WRITE(SW+0x30,DAT); LCD_WRITE(GW+0x30,DAT); }
//显示十位//显示个位//显示十位//显示个位//显示十位//显示个位
}
if(miu==0) {
delaynms(30); if(miu==0) {
while(!miu); hourt--;
if(hourt==-1)hourt=23; BCD(hourt); LCD_WRITE(LINE2+1,COM); LCD_WRITE(SW+0x30,DAT); //显示十位 LCD_WRITE(GW+0x30,DAT); //显示个位 } } } } }
//====光标定位 void guangbiao(void) {
switch(a) {
case(1):LCD_WRITE(0b11001000,COM);LCD_WRITE(0b00001111,COM);break;//定位秒,光标打开,B(d0)=1:光标闪烁
case(2):LCD_WRITE(0b11000101,COM);LCD_WRITE(0b00001111,COM);break;//定位分,光标打开,B(d0)=1:光标闪烁
case(3):LCD_WRITE(0b11000010,COM);LCD_WRITE(0b00001111,COM);break;//定位时,光标打开,B(d0)=1:光标闪烁
case(4):LCD_WRITE(0b10001110,COM);LCD_WRITE(0b00001111,COM);break;//定位星期,光标打开,B(d0)=1:光标闪烁
case(5):LCD_WRITE(0b10001010,COM);LCD_WRITE(0b00001111,COM);break;//定位日,光标打开,B(d0)=1:光标闪烁
case(6):LCD_WRITE(0b10000111,COM);LCD_WRITE(0b00001111,COM);break;//定位月,光标打开,B(d0)=1:光标闪烁
case(7):LCD_WRITE(0b10000100,COM);LCD_WRITE(0b00001111,COM);break;//定位秒,光标打开,B(d0)=1:光标闪烁
case(8):LCD_WRITE(0b10000010,COM);LCD_WRITE(0b00001111,COM);break;//定位秒,光标打开,B(d0)=1:光标闪烁 } }
//=====读TC74的温度值 signed char READ_T(void) { signed char R1; SEN=1; //开始条件 while (SEN==1); //检测开始条件是否完成? IIC_SEND(TC74_ADD<<1); //送TC74地址(写) IIC_SEND(RTR); //写RTR命令(写) RSEN=1; //重新开始条件 while (RSEN==1); //等待重新开始条件结束 IIC_SEND((TC74_ADD<<1)+1);//发送TC74地址(读) RCEN=1; //接收使能 while (RCEN==1); //等待接收完成 R1=SSPBUF; //接收数据存入R1 PEN=1; //停止位 while(PEN==0); return(R1); }
//从R1双字节数转换为十进制数万位-个位:WW,QW,BW,SW,GW void BCD(unsigned int R1)
{ WW=0;QW=0;BW=0;SW=0;GW=0; while(R1>=10000) {R1-=10000;WW++;} while(R1>=1000) {R1-=1000;QW++;} while(R1>=100) {R1-=100;BW++;} while(R1>=10) {R1-=10; SW++;} GW=R1; }
//===温度显示
void DISP_T(signed char R1) //温度在R1 { char R2; if (R1>=0) BCD(R1); else { R2=~(R1)+1; BCD(R2); } if (R1<0)
{LCD_WRITE(LINE2+10,COM); //DDRAM地址,第1行的第5个字符 LCD_WRITE('-',DAT); } if (R1>=0) //只在温度为正时才显示百位 LCD_WRITE(BW+0x30,DAT); //显示百位,数字加上0x30即为相应的ASCII码,下同 LCD_WRITE(SW+0x30,DAT); //显示十位 LCD_WRITE(GW+0x30,DAT); //显示个位 LCD_WRITE(0xDF,DAT); //° LCD_WRITE('C',DAT); LCD_WRITE(' ',DAT); }
//====闹钟 void clock()
{ if(!mod||!set||!add||!miu) {delaynms(30); if(!mod||!set||!add||!miu); CCP2CON=0b00000000; //关PWM模式 } BCD(sect); if(SW==(A[0]>>4)&&GW==(A[0]&0x0F)) {BCD(mint); if(SW==(A[1]>>4)&&GW==(A[1]&0x0F)) {BCD(hourt); if(SW==(A[2]>>4)&&GW==(A[2]&0x0F)) CCP2CON=0b00001100; //开PWM模式 } } }