lcd带温度显示万年历-第2章
按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
}
case 5:
{
l_tmpdisplay'4'=yue++;
if(yue13) yue=0;
display_scan(0x40+5;yue);
write_(0x80+0x40+6;1);
break;
}
case 6:
{
l_tmpdisplay'3'=ri++;
if(ri32) ri=0;
display_scan(0x40+8;ri);
write_(0x80+0x40+8;1);
break;
}
case 7:
{
l_tmpdisplay'6'=xin++;
if(xin8) xin=0;
week_display();
write_(0x80+0x40+11;1);
break;
}
}
}
}
if(key20) //减
delay(10);
if(key20)
{
while(!key2);
delay(10);
while(!key2);
temp_num=funtion_flag;
switch(temp_num)
{
case 2:
{
l_tmpdate'1'=fen;
if(fen…1) fen=59;
display_scan(11;fen);
write_(0x80+0x0c;1);
break;
}
case 3:
{
l_tmpdisplay'2'=shi;
if(shi…1) shi=23;
display_scan(8;shi);
write_(0x80+0x09;1);
break;
}
case 4:
{
l_tmpdisplay'2'=nian;
if(nian…1) nian=12;
display_scan(0x40+2;nian);
write_(0x80+0x40+3;1);
break;
}
case 5:
{
l_tmpdisplay'2'=yue;
if(yue…1) shi=31;
display_scan(0x40+5;yue);
write_(0x80+0x40+6;1);
break;
}
case 6:
{
l_tmpdisplay'3'=ri;
if(ri…1) ri=31;
display_scan(0x40+8;ri);
write_(0x80+0x40+8;1);
break;
}
case 7:
{
l_tmpdisplay'6'=xin;
if(xin…1) xin=7;
week_display();
write_(0x80+0x40+11;1);
break;
}
}
}
}
/*us级延时函数 */
/*******************************************************************/
void Delay1(uint num)
{
while( num ) ;
}
/*******************************************************************/
Init_DS18B20(void)
{
DQ = 1 ; //DQ复位
Delay1(8) ; //稍做延时
DQ = 0 ; //单片机将DQ拉低
Delay1(90) ; //精确延时 大于 480us
DQ = 1 ; //拉高总线
Delay1(8) ;
presence = DQ ; //如果=0则初始化成功 =1则初始化失败
Delay1(100) ;
DQ = 1 ;
return(presence) ; //返回信号,0=presence;1= no presence
}
/* 读一个字节 */
/*******************************************************************/
ReadOneChar(void)
{
uchar i = 0 ;
uchar dat = 0 ;
for (i = 8 ; i 》 0 ; i)
{
DQ = 0 ; // 给脉冲信号
dat 》》= 1 ;
DQ = 1 ; // 给脉冲信号
if(DQ)
dat |= 0x80 ;
Delay1(4) ;
}
return (dat) ;
}
/* 写一个字节 */
/*******************************************************************/
WriteOneChar(uchar dat)
{
unsigned char i = 0 ;
for (i = 8 ; i 》 0 ; i)
{
DQ = 0 ;
DQ = dat&0x01 ;
Delay1(5) ;
DQ = 1 ;
dat》》=1 ;
}
}
/* 读取温度 */
/*******************************************************************/
Read_Temperature(void)
{
Init_DS18B20() ;
WriteOneChar(0xCC) ; // 跳过读序号列号的操作
WriteOneChar(0x44) ; // 启动温度转换
Init_DS18B20() ;
WriteOneChar(0xCC) ; //跳过读序号列号的操作
WriteOneChar(0xBE) ; //读取温度寄存器
temp_data'0' = ReadOneChar() ; //温度低8位
temp_data'1' = ReadOneChar() ; //温度高8位
}
/* 设定显示位置 */
/*******************************************************************/
void lcd_pos(uchar pos)
{
write_ (pos | 0x80) ; //数据指针=80+地址变量
}
/*自定义字符写入CGRAM */
/* 数据转换与温度显示 */
/*******************************************************************/
Disp_Temperature()
{
display'4'=temp_data'0'&0x0f ;
display'0'=ditab'display'4''+0x30 ; //查表得小数位的值
display'4'=((temp_data'0'&0xf0)》》4)|((temp_data'1'&0x0f)