if(minset>60)
minset=0;
min=minset;
}
break;
case 5:
case 6:
case 7:
if(stop)
{
minset-=step[key-5];
if(minset>60)
minset=0;
min=minset;
}
break;
case 9:
case 10:
case 11:
posset+=step[key-9];
break;
case 13:
case 14:
case 15:
posset-=step[key-13];
break;
default:
break;
}
TR0=!stop;
KeyboardDelay();
P1=0xF0;
EA=1;
}
Timer0_process() interrupt 1 using 0
{
EA=0;
TR0=0;
TL0=0x00;
TH0=0x4C;
count++;
if(count==20) //如果到累计定时到达1s
{
if(sec==0) //定时处理
{
if(min==0) //总定时到,则置结束标志
timeover=1;
else
{
min--;
sec=59;
}
}
else
sec--;
count=0;
}
TR0=1;
EA=1;
}
/*--------------------------------------LCD驱动子程序--------------------------------------------------*/
void DelayL()
{unsigned char i,j;
i=0xF0;
j=0xFF;
while(i--)
while(j--);
}
void DelayS()
{
unsigned char i;
i=0x1F;
while(i--);
}
void WriteCommand(unsigned char c)
{
DelayS();
EN=0;
RS=0;
RW=0;
_nop_();
EN=1;
P0=c;
EN=0;
}
void WriteData(unsigned char c)
{
DelayS();
EN=0;
RS=1;
RW=0;
_nop_();
EN=1;
P0=c;
EN=0;
RS=0;
}
void ShowChar(unsigned char pos,unsigned char c)
{
unsigned char p;
if(pos>=0x10)
p=pos+0xB0;
else
p=pos+0x80;
WriteCommand(p);
WriteData(c);
}
void ShowString(unsigned char line,char *ptr)
{
unsigned char l,i;
l=line<<4;
for(i=0;i<16;i++)
ShowChar(l++,*(ptr+i));
}
void InitLcd()
{
DelayL();
WriteCommand(0x38);
WriteCommand(0x38);
WriteCommand(0x06);
WriteCommand(0x0C);
WriteCommand(0x01);
WriteCommand(0x80);
}
/*---------------------------------------------键盘子程序-------------------------------------------------*/
unsigned char GetKey()
{
unsigned k,t,i,j;
k=P1;
k=k&0xF0;
i=0;
while((k&0x10)&&i<4)
{
i++;
k=k>>1;
}
k=0x01;
j=0;
while(j<4)
{
P1=0xFF^k;
_nop_();
t=P1;
t=t^0xFF;
t=t&0xF0;
if(t)
break;
j++;
k=k<<1;
}
k=j*4+i;
return k;
}
/*-----------------------------------------数字温度计驱动子程序--------------------------------------*/
void ChangePos(bit sel,unsigned char pos1,unsigned char pos2)
{ unsigned char i;
RST=0;
DQ=0;
CLK=0;
RST=1;
DQ=sel;
_nop_();
CLK=1;
_nop_();
CLK=0;
for(i=0;i<8;i++)
{
if(pos1&0x80)
DQ=1;
else
DQ=0;
_nop_();
CLK=1;
_nop_();
CLK=0;
pos1=pos1<<1;
}
for(i=0;i<8;i++)
{
if(pos2&0x80)
DQ=1;
else
DQ=0;
_nop_();
CLK=1;
_nop_();
CLK=0;
pos2=pos2<<1;
}
RST=0;
}
/*------------------------------------------温度传感器子程序-------------------------------------------*/
void Delay100ms() //延时100ms
上一页 [1] [2] [3] [4] 下一页
本文关键字:程序 数字温度计 51单片机,单片机-工控设备 - 51单片机