友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!
lcd带温度显示万年历-第2部分
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部! 如果本书没有阅读完,想下次继续接着阅读,可使用上方 "收藏到我的浏览器" 功能 和 "加入书签" 功能!
时间设定程序
程序说明:
*******************************************************f*********************************************************/
void time_set()
{
//按1下数字键“0”,进入时间设定状态,时间停止走动,光标在秒钟处闪动
if(key00)
delay(5);
if(key00)
{
while(!key0); //松手检测
delay(5);
while(!key0);
funtion_flag++;
if(funtion_flag1)
{
write_(0x0f;1);
write_(0x80+0x0f;1);
}
//当按两下“0”按键时,光标跑到分钟上闪动
if(funtion_flag2)
{
write_(0x80+0x0c;1);
}
//当按三下“0”按键时,光标跑到小时上闪动
if(funtion_flag3)
{
write_(0x80+0x09;1);
}
//当按4下“0”按键时,光标跑年时上闪动
if(funtion_flag4)
{
write_(0x80+0x40+3;1);
}
//当按5下“0”按键时,光标跑月时上闪动
if(funtion_flag5)
{
write_(0x80+0x40+6;1);
}
//当按6下“0”按键时,光标日时上闪动
if(funtion_flag6)
{
write_(0x80+0x40+9;1);
}
//当按7下“0”按键时,光标星期时上闪动
if(funtion_flag7)
{
write_(0x80+0x40+13;1);
}
//当按第八下的时候,退出时间设定,时间继续开始运行
if(funtion_flag8)
{
l_tmpdate'1'=fen;
l_tmpdate'2'=shi;
l_tmpdate'5'=nian;
l_tmpdate'4'=yue;
l_tmpdate'3'=ri;
l_tmpdate'6'=xin;
Set_RTC();
write_(0x0c;1);
funtion_flag=0;
}
}
if(funtion_flag!=0)
{
if(key10)//加
delay(10);
if(key10)
{
while(!key1);
delay(10);
while(!key1);
temp_num=funtion_flag;
switch(temp_num)
{
case 2:
{ //分钟加
l_tmpdate'2'=fen++;
if(fen60) fen=0;
display_scan(11;fen);
write_(0x80+0x0c;1);
break;
}
case 3:
{//时钟加
l_tmpdisplay'2'=shi++;
if(shi24) shi=0;
display_scan(8;shi);
write_(0x80+0x09;1);
break;
}
case 4:
{
l_tmpdisplay'5'=nian++;
if(nian100) nian=0;
display_scan(0x40+2;nian);
write_(0x80+0x40+3;1);
break;
}
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)
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!