📄 lcd1602电子钟源程序.c
字号:
return(t);
}
//***********************************************//
void tem_conv() //温度转换
{
uint8 flagdat ;//定义温度值符号
if(tflag==0)
temdata[4]=flagdat=0x20;//温度为正不显示符号
else
temdata[4]=flagdat=0x2d;//负温度显示负号:-
temdata[0]=tdat/1000+0x30;//温度十位
temdata[1]=tdat%1000/100+0x30;//温度个位
temdata[2]=tdat%100/10+0x30;//小数十位
temdata[3]=tdat%10+0x30;//小数百位
/*if(temdata[0]==0x30)
{temdata[0]=0x20;//?????0,???
if(temdata[1]==0x30)
{
temdata[1]=0x20;//?????0,???0????
}
}*/
}
/**************************************************************
更新显示缓冲区
***************************************************************/
void updata_buffer(void)
{
display_buffer1[0] = '2' ;
display_buffer1[1] = '0' ;
display_buffer1[2] = timedata[0]/16+0x30 ;
display_buffer1[3] = timedata[0]%16+0x30 ;
display_buffer1[4] = 0 ;
display_buffer1[5] = timedata[1]/16+0x30 ;
display_buffer1[6] = timedata[1]%16+0x30 ;
display_buffer1[7] = 1 ;
display_buffer1[8] = timedata[2]/16+0x30 ;
display_buffer1[9] = timedata[2]%16+0x30 ;
display_buffer1[10] = 2 ;
display_buffer1[11] = ' ' ;
switch(timedata[6]%16)
{
case 1 : {display_buffer1[12] = 'M' ;
display_buffer1[13] = 'o' ;
display_buffer1[14] = 'n' ; }break ;
case 2 : {display_buffer1[12] = 'T' ;
display_buffer1[13] = 'u' ;
display_buffer1[14] = 'e' ; }break ;
case 3 : {display_buffer1[12] = 'W' ;
display_buffer1[13] = 'e' ;
display_buffer1[14] = 'd' ; }break ;
case 4 : {display_buffer1[12] = 'T' ;
display_buffer1[13] = 'h' ;
display_buffer1[14] = 'u' ; }break ;
case 5 : {display_buffer1[12] = 'F' ;
display_buffer1[13] = 'r' ;
display_buffer1[14] = 'i' ; }break ;
case 6 : {display_buffer1[12] = 'S' ;
display_buffer1[13] = 'a' ;
display_buffer1[14] = 't' ; }break ;
case 7 : {display_buffer1[12] = 'S' ;
display_buffer1[13] = 'u' ;
display_buffer1[14] = 'n' ; }break ;
default : break;
}
if(ALARM_VALUE == 1)
display_buffer1[15] = 3 ;
else
display_buffer1[15] = ' ' ;
display_buffer2[0] = timedata[3]/16+0x30 ;
display_buffer2[1] = timedata[3]%16+0x30 ;
display_buffer2[2] = ':' ;
display_buffer2[3] = timedata[4]/16+0x30 ;
display_buffer2[4] = timedata[4]%16+0x30 ;
display_buffer2[5] = ':' ;
display_buffer2[6] = timedata[5]/16+0x30 ;
display_buffer2[7] = timedata[5]%16+0x30 ;
display_buffer2[8] = temdata[4] ;
display_buffer2[9] = temdata[0] ;
display_buffer2[10] = temdata[1] ;
display_buffer2[11] = '.' ;
display_buffer2[12] = temdata[2] ;
display_buffer2[13] = temdata[3] ;
display_buffer2[14] = 0xdf ;
display_buffer2[15] = 'C' ;
}
/******************************************************************
显示缓冲区内容
*******************************************************************/
void display_buffer(void)
{
uint8 i ;
LCD1602_write_cmd(0x80) ;
for(i=0;i<16;i++)
LCD1602_write_data(display_buffer1[i]);
LCD1602_write_cmd(0xc0) ;
for(i=0;i<16;i++)
LCD1602_write_data(display_buffer2[i]);
}
/*****************************************************************
按键扫描函数
******************************************************************/
void key_scan(void)
{
if(MODE == 0)
{
delay_ms(20) ;
while(!MODE) ;
speakers(5) ;
DIS_ON = 0 ;
MODE_ON ++ ;
if(MODE_ON == 1 && OK_VALUE == 0)
LCD1602_write_cmd(0x01) ;
if(MODE_ON == 2 && OK_VALUE == 0)
{
MODE_ON = 0 ;
DIS_ON = 1 ;
self_pos = 0 ;
}
}
if(INC == 0 && MODE_ON == 1 && OK_VALUE == 0)
{
delay_ms(20) ;
while(!INC) ;
speakers(5) ;
LCD1602_write_cmd(0x01) ;
self_pos++ ;
if(self_pos > 2)
self_pos = 0 ;
}
if(DEC == 0 && MODE_ON == 1 && OK_VALUE == 0)
{
delay_ms(20) ;
while(!DEC) ;
speakers(5) ;
LCD1602_write_cmd(0x01) ;
self_pos-- ;
if(self_pos < -3)
self_pos = -1 ;
}
if(DEC == 0 )
{
delay_ms(20) ;
while(!DEC) ;
speakers(5) ;
DEC_VALUE++;
}
if(INC == 0)
{
delay_ms(20) ;
while(!INC) ;
speakers(5) ;
INC_VALUE++;
}
if(OK == 0 && MODE_ON != 0)
{
delay_ms(20) ;
while(!OK) ;
speakers(5) ;
LCD1602_write_cmd(0x01) ;
OK_VALUE++;
INC_VALUE = 0 ;
DEC_VALUE = 0 ;
}
if(OK == 0 && MODE_ON == 0)
{
delay_ms(20) ;
while(!OK) ;
speakers(5) ;
ALARM_ON = 1 ;
if(ALARM_VALUE == 1)
ALARM_VALUE = 0 ;
else
ALARM_VALUE = 1 ;
}
}
/*******************************************************************
按键菜单人机交互函数(第一级)
********************************************************************/
void menu_display_1()
{
if(MODE_ON == 1 && OK_VALUE == 0)
{
switch(self_pos)
{
case -3 : {
LCD1602_write_char(0,1,4) ;
LCD1602_write_string(1,1,"1 Time setting ") ;
LCD1602_write_string(1,0,"2 Alarm setting") ;
}break;
case -2 : {
LCD1602_write_char(0,0,4) ;
LCD1602_write_string(1,1,"1 Time setting ") ;
LCD1602_write_string(1,0,"2 Alarm setting") ;
}break;
case -1 : {
LCD1602_write_char(0,0,4) ;
LCD1602_write_string(1,1,"2 Alarm setting ") ;
LCD1602_write_string(1,0,"3 Stopwatch") ;
}break;
case 0 : {
LCD1602_write_char(0,1,4) ;
LCD1602_write_string(1,1,"1 Time setting ") ;
LCD1602_write_string(1,0,"2 Alarm setting") ;
}break ;
case 1 : {
LCD1602_write_char(0,0,4) ;
LCD1602_write_string(1,1,"1 Time setting ") ;
LCD1602_write_string(1,0,"2 Alarm setting") ;
}break ;
case 2 : {
LCD1602_write_char(0,0,4) ;
LCD1602_write_string(1,1,"2 Alarm setting ") ;
LCD1602_write_string(1,0,"3 Stopwatch") ;
}break ;
default : break ;
}
}
}
/*******************************************************************
按键菜单人机交互函数(第二级)
********************************************************************/
void menu_display_2(void)
{
uint8 i ,j;
if(MODE_ON != 0 && OK_VALUE != 0)
{
LCD1602_write_cmd(0x0f) ;
if(self_pos == 0 || self_pos == -3)
{
LCD1602_write_cmd(0x81) ;
for(i=0;i<15;i++)
LCD1602_write_data(display_buffer1[i]) ;
LCD1602_write_cmd(0xc4) ;
for(j=0;j<8;j++)
LCD1602_write_data(display_buffer2[j]) ;
if(MODE_ON == 1)
{
uint8 item ;
LCD1602_write_cmd(0x84) ;
if(INC_VALUE !=0 )
{
item = DS1302_read_byte(0x8d) ;
item=(item/16)*10+item%16;
item++;
if(item==100)item=0;
item=(item/10)*16+item%10;
DS1302_write_byte(0x8e,0x00);//允许写操作
DS1302_write_byte(0x8c,item);
INC_VALUE = 0 ;
}
if(DEC_VALUE != 0)
{
item = DS1302_read_byte(0x8d) ;
item=(item/16)*10+item%16;
item--;
if(item < 0)item=99;
item=(item/10)*16+item%10;
DS1302_write_byte(0x8e,0x00);//允许写操作
DS1302_write_byte(0x8c,item);
DEC_VALUE = 0 ;
}
}
else if(MODE_ON == 2)
{
uint8 item ;
LCD1602_write_cmd(0x87) ;
if(INC_VALUE !=0 )
{
item = DS1302_read_byte(0x89) ;
item=(item/16)*10+item%16;
item++;
if(item==13)item=1;
item=(item/10)*16+item%10;
DS1302_write_byte(0x8e,0x00);//允许写操作
DS1302_write_byte(0x88,item);
INC_VALUE = 0 ;
}
if(DEC_VALUE != 0)
{
item = DS1302_read_byte(0x89) ;
item=(item/16)*10+item%16;
item--;
if(item == 0)item=12;
item=(item/10)*16+item%10;
DS1302_write_byte(0x8e,0x00);//允许写操作
DS1302_write_byte(0x88,item);
DEC_VALUE = 0 ;
}
}
else if(MODE_ON == 3)
{
uint8 item ;
LCD1602_write_cmd(0x8a) ;
if(INC_VALUE !=0 )
{
item = DS1302_read_byte(0x87) ;
item=(item/16)*10+item%16;
item++;
if(item==32)item=1;
item=(item/10)*16+item%10;
DS1302_write_byte(0x8e,0x00);//允许写操作
DS1302_write_byte(0x86,item);
INC_VALUE = 0 ;
}
if(DEC_VALUE != 0)
{
item = DS1302_read_byte(0x87) ;
item=(item/16)*10+item%16;
item--;
if(item == 0)item=31;
item=(item/10)*16+item%10;
DS1302_write_byte(0x8e,0x00);//允许写操作
DS1302_write_byte(0x86,item);
DEC_VALUE = 0 ;
}
}
else if(MODE_ON == 4)
{
uint8 item ;
LCD1602_write_cmd(0x8f) ;
if(INC_VALUE !=0 )
{
item = DS1302_read_byte(0x8b) ;
item=(item/16)*10+item%16;
item++;
if(item==8)item=1;
item=(item/10)*16+item%10;
DS1302_write_byte(0x8e,0x00);//允许写操作
DS1302_write_byte(0x8a,item);
INC_VALUE = 0 ;
}
if(DEC_VALUE != 0)
{
item = DS1302_read_byte(0x8b) ;
item=(item/16)*10+item%16;
item--;
if(item == 0)item=7;
item=(item/10)*16+item%10;
DS1302_write_byte(0x8e,0x00);//允许写操作
DS1302_write_byte(0x8a,item);
DEC_VALUE = 0 ;
}
}
else if(MODE_ON == 5)
{
uint8 item ;
LCD1602_write_cmd(0xc5) ;
if(INC_VALUE !=0 )
{
item = DS1302_read_byte(0x85) ;
item=(item/16)*10+item%16;
item++;
if(item==24)item=0;
item=(item/10)*16+item%10;
DS1302_write_byte(0x8e,0x00);//允许写操作
DS1302_write_byte(0x84,item);
INC_VALUE = 0 ;
}
if(DEC_VALUE != 0)
{
item = DS1302_read_byte(0x85) ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -