📄 12864 具有菜单显示的电子钟 温度计.txt
字号:
/****************************************************************************
时间设置
****************************************************************************/
void timereset(void)
{
bit BACK4=1;
clear();
write_character(0,2,"时",0);
write_character(0,4,"间",0);
write_character(0,10,"返",0);
write_character(0,12,"回",0);
write_character(2,4,"年",0);//写入 年月日星期等不变汉字
write_character(2,8,"月",0);
write_character(2,12,"日",0);
write_character(4,4,"星",0);
write_character(4,6,"期",0);
delayms(2000);
write_ascii(6,7,11,0);
readtime();
write_ascii(2,2,YEAR>>4,0);
write_ascii(2,3,YEAR&0x0f,0);
write_ascii(2,6,MONTH>>4,0);
write_ascii(2,7,MONTH&0x0f,0);
write_ascii(2,10,DAY>>4,0);
write_ascii(2,11,DAY&0x0f,0);
write_week(4,8,WEEK,0);
write_ascii(6,5,HOUR>>4,0);
write_ascii(6,6,HOUR&0x0f,0);
write_ascii(6,8,MINUTE>>4,0);
write_ascii(6,9,MINUTE&0x0f,0);
delayms(2000);
while(BACK4!=0)
{
readtime();
if((K1&&K2&&K3)!=1)
{
write_character(0,10,"返",0);
write_character(0,12,"回",0);
write_ascii(2,2,YEAR>>4,0);
write_ascii(2,3,YEAR&0x0f,0);
write_ascii(2,6,MONTH>>4,0);
write_ascii(2,7,MONTH&0x0f,0);
write_ascii(2,10,DAY>>4,0);
write_ascii(2,11,DAY&0x0f,0);
write_week(4,8,WEEK,0);
write_ascii(6,5,HOUR>>4,0);
write_ascii(6,6,HOUR&0x0f,0);
write_ascii(6,8,MINUTE>>4,0);
write_ascii(6,9,MINUTE&0x0f,0);
delayms(2000);
}
if(K1==0)
{
delayms(40);
while(K1==0);
TMF++;
}
if(K3==0)
{
delayms(40);
while(K3==0);
TMF--;
}
if(TMF==0xff)
{
TMF=6;
}
if(TMF==7)
{
TMF=0;
}
switch(TMF)
{
case 0:write_character(0,10,"返",1);
write_character(0,12,"回",1);
delayms(2000);
delayms(2000);
if(K2==0)
{
delayms(60);
while(K2==0);
BACK4=0;
clear();
}
break;
case 1:write_ascii(2,2,YEAR>>4,1);
write_ascii(2,3,YEAR&0x0f,1);
delayms(2000);
if(K2==0)
{
delayms(60);
while(K2==0);
YEAR=turntobcd(2,2,YEAR,99,0);
write_ds1302(0x8c,YEAR);
}
break;
case 2:write_ascii(2,6,MONTH>>4,1);
write_ascii(2,7,MONTH&0x0f,1);
delayms(2000);
if(K2==0)
{
delayms(60);
while(K2==0);
MONTH=turntobcd(2,6,MONTH,12,1);
write_ds1302(0x88,MONTH);
}
break;
case 3:write_ascii(2,10,DAY>>4,1);
write_ascii(2,11,DAY&0x0f,1);
delayms(2000);
if(K2==0)
{
delayms(60);
while(K2==0);
DAY=turntobcd(2,10,DAY,31,1);
write_ds1302(0x86,DAY);
}
break;
case 4:write_week(4,8,WEEK,1);
delayms(2000);
if(K2==0)
{
delayms(60);
while(K2==0);
WEEK=turntobcd(4,8,WEEK,7,1);
write_ds1302(0x8a,WEEK);
}
break;
case 5:write_ascii(6,5,HOUR>>4,1);
write_ascii(6,6,HOUR&0x0f,1);
delayms(2000);
if(K2==0)
{
delayms(60);
while(K2==0);
HOUR=turntobcd(6,5,HOUR,23,0);
}
write_ds1302(0x84,HOUR);
break;
case 6:write_ascii(6,8,MINUTE>>4,1);
write_ascii(6,9,MINUTE&0x0f,1);
delayms(2000);
if(K2==0)
{
delayms(60);
while(K2==0);
MINUTE=turntobcd(6,8,MINUTE,59,0);
write_ds1302(0x82,MINUTE);
}
break;
}
}
}
/****************************************************************************
选择设置
****************************************************************************/
void keyscanf1(void)
{
bit BACK1=1;
clear();
write_character(0,2,"设",0);
write_character(0,4,"置",0);
write_character(0,10,"返",0);
write_character(0,12,"回",0);
write_character(2,6,"时",0);
write_character(2,8,"间",0);
write_character(4,6,"闹",0);
write_character(4,8,"钟",0);
write_character(6,6,"温",0);
write_character(6,8,"度",0);
write_ascii(2,5,1,0);
write_ascii(4,5,2,0);
write_ascii(6,5,3,0);
while(BACK1!=0)
{
if(K1==0)
{
delayms(30);
while(K1==0);
MF++;
}
if(K3==0)
{
delayms(30);
while(K3==0);
MF--;
}
if(MF==4)
{
MF=0;
}
if(MF==0xff)
{
MF=3;
}
switch(MF)
{
case 0:write_character(0,10,"返",1);
write_character(0,12,"回",1);
write_character(0,2,"设",0);
write_character(0,4,"置",0);
write_ascii(2,5,1,0);
write_character(2,6,"时",0);
write_character(2,8,"间",0);
write_ascii(4,5,2,0);
write_character(4,6,"闹",0);
write_character(4,8,"钟",0);
write_ascii(6,5,3,0);
write_character(6,6,"温",0);
write_character(6,8,"度",0);
delayms(2000);
if(K2==0)
{
delayms(30);
while(K2==0);
clear();
BACK1=0;
}
break;
case 1:write_ascii(2,5,1,1);
write_character(2,6,"时",1);
write_character(2,8,"间",1);
write_character(0,2,"设",0);
write_character(0,4,"置",0);
write_character(0,10,"返",0);
write_character(0,12,"回",0);
write_ascii(4,5,2,0);
write_character(4,6,"闹",0);
write_character(4,8,"钟",0);
write_ascii(6,5,3,0);
write_character(6,6,"温",0);
write_character(6,8,"度",0);
if(K2==0)
{
delayms(30);
while(K2==0);
timereset();
}
break;
case 2:write_ascii(4,5,2,1);
write_character(4,6,"闹",1);
write_character(4,8,"钟",1);
write_character(0,2,"设",0);
write_character(0,4,"置",0);
write_character(0,10,"返",0);
write_character(0,12,"回",0);
write_ascii(2,5,1,0);
write_character(2,6,"时",0);
write_character(2,8,"间",0);
write_ascii(6,5,3,0);
write_character(6,6,"温",0);
write_character(6,8,"度",0);
delayms(2000);
if(K2==0)
{
delayms(30);
while(K2==0);
//ringreset();
}
break;
case 3:write_ascii(6,5,3,1);
write_character(6,6,"温",1);
write_character(6,8,"度",1);
write_character(0,2,"设",0);
write_character(0,4,"置",0);
write_character(0,10,"返",0);
write_character(0,12,"回",0);
write_ascii(2,5,1,0);
write_character(2,6,"时",0);
write_character(2,8,"间",0);
write_ascii(4,5,2,0);
write_character(4,6,"闹",0);
write_character(4,8,"钟",0);
delayms(2000);
if(K2==0)
{
delayms(30);
while(K2==0);
//tempreset();
}
break;
}
}
}
/****************************************************************************
按键处理
****************************************************************************/
void keyscanf(void)
{
if(K1==0)
{
delayms(20);
while(K1==0);
//tempdisplay();
BeiGuang=~BeiGuang;
}
if(K2==0)
{
delayms(20);
while(K2==0);
keyscanf1();
clear();
}
if(K3==0)
{
delayms(20);
while(K3==0);
clear();
BeiGuang=1;
delays(30);
clear();
while(K3==1);
{while(K3==0);
}
}
}
/***************************************************************************
调整
****************************************************************************/
unsigned char turntobcd(unsigned char x,unsigned char y,unsigned char value,
unsigned char max,unsigned char min)
{
unsigned char valueh;
unsigned char valuel;
valueh=value>>4;
valuel=value&0x0f;
value=valueh*10+valuel;
while(K2!=0)
{
if(K1==0)
{
delayms(60);
while(K1==0);
value++;
}
if(K3==0)
{
delayms(60);
while(K3==0);
value--;
}
if(min==0)
{
if(value==0x0ff) value=max;
}
else
{
if(value<min) value=max;
}
if(value>max)
{
value=min;
}
if((x==4)&&(y==8))
{
if(SCNF==1) write_week(x,y,value,1);
else
{
write_ascii(x,y,12,0);
write_ascii(x,y+1,12,0);
}
}
else
{
if(SCNF==1)
{
write_ascii(x,y,value/10,1);
write_ascii(x,y+1,value%10,1);
}
else
{
write_ascii(x,y,12,0);
write_ascii(x,y+1,12,0);
}
}
}
delayms(60);
while(K2==0);
valueh=value/10;
valuel=value%10;
value=((valueh<<4)|valuel);
return value;
}
/****************************************************************************
主函数
****************************************************************************/
void main(void)
{
unsigned char i;
unsigned char count;
unsigned char RF=1;
//init_ds1302();
init_12864();
initTimer0();
IE=0x82;
TR0=1;
clear();
while(1)
{delayms(2000);
if(!(K1&&K2&&K3))
{
keyscanf();
}
init_12864();
write_character(0,5,"年",0);//写入 年月日星期室温等不变汉字
write_character(0,9,"月",0);
write_character(0,13,"日",0);
write_character(2,4,"星",0);
write_character(2,6,"期",0);
write_character(6,1,"室",0);
write_character(6,3,"温",0);
write_character(6,11,"℃",0);
write_week(2,8,WEEK,0);//写入星期
readtime();//写入时间
write_ascii(0,1,2,0);
write_ascii(0,2,0,0);
write_ascii(0,3,YEAR>>4,0);
write_ascii(0,4,YEAR&0x0f,0);
write_ascii(0,7,MONTH>>4,0);
write_ascii(0,8,MONTH&0x0f,0);
write_ascii(0,11,DAY>>4,0);
write_ascii(0,12,DAY&0x0f,0);
write_ascii(4,5,HOUR>>4,0);
write_ascii(4,6,HOUR&0x0f,0);
write_ascii(4,8,MINUTE>>4,0);
write_ascii(4,9,MINUTE&0x0f,0);
if(SCNF==1) write_ascii(4,7,11,0);
else write_ascii(4,7,12,0);
count=read_temp();//写入温度
for(i=0;i<count+1;i++)
{
write_ascii(6,10-i,bcddis[i],0);
}
write_week(3,14,9,0);
write_week(5,14,10,0);
delayms(2000);
delayms(2000);
}
}
2007-6-23 21:03:00举报帖子
使用道具
LO单片机VE
等级:业余侠客
文章:65
积分:536
门派:无门无派
注册:2005年7月28日第 12 楼
--------------------------------------------------------------------------------
/****************************************************************************
*描述:12864+ds1302+ds18b20 *
*硬件:AT89C52单片机,晶振为11.0592MHz,KS0108驱动的128*64液晶 *
* SPI总线的DS1302时钟,1-WIRE温度传感器DS18B20。 *
*作者:LO单片机VE *
*文件:12864.c *
*日期:2007-06-10 *
*****************************************************************************
*描述: *
****************************************************************************/
/****************************************************************************
头文件区
****************************************************************************/
#include<reg52.h>
#include<intrins.h>
/****************************************************************************
内存区定义
****************************************************************************/
sbit BF=P0^7; //12864
sbit DI=P2^0;
sbit RW=P2^1;
sbit ENABLE=P2^2;
sbit CS1=P2^3;
sbit CS2=P2^4;
sbit TIMECLK=P2^7; //DS1302
sbit TIMEDATA=P1^7;
sbit TIMERST=P1^6;
sbit K1=P1^2; //三个按键
sbit K2=P1^3;
sbit K3=P1^4;
sbit K4=P1^5;
sbit LN1=P3^2; //水位控制端口
//sbit LN2=P3^7;
sbit DQ=P3^6; //DS18b20*1
sbit HT=P3^4; //温度控制端口
sbit CR=P3^5;
sbit WT=P3^3;
sbit BUZZ=P3^7;//蜂鸣器
sbit BeiGuang=P2^6;//液晶背光控制
bit SCNF=1; //秒闪烁标志位
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -