write_clock(0x8e,0x00);//允许写操作
write_clock(address,(item/10)*16+item%10);//转换成16进制写入1302
write_clock(0x8e,0x80);//写保护,禁止写操作
add_key_st=0;//关闭增加键标志
}
/*****读取时间*****/
voidcheck_shijian(void)
{
read_clockS();//读取时间
m=hour/16;//计算得到小时十位数字
n=hour&0x0f;//计算得到小时个位数字
p=min/16;//计算得到分钟十位数字
t=min&0x0f;//计算得到分钟个位数字
}
/*****读取温度*****/
voidcheck_wendu(void)
{
uinti;
i=ReadTemperature()-5;//获取温度值并减去DS18B20的温漂误差
m=i/100;//计算得到十位数字
n=i%10/10;//计算得到个位数字
p=i%10;//计算得到小数位数字
}
/*****将待显示时间内容存至缓冲区*****/
voidload_shijian(void)
{
uchara;
if(set_st==1&&k==1)//调时,小时位闪烁,x的取反频率为闪烁频率
{
for(a=0;a<16;a++){disbuf[a]=0;}
for(a=16;a<32;a++){disbuf[a]=0;}
}
else//正常显示,加载小时信息
{
for(a=0;a<16;a++){disbuf[a]=shuzi1[m*16+a];}
for(a=16;a<32;a++){disbuf[a]=shuzi2[n*16+a-16];}
}
if(set_st==2&&k==1)//调分,分钟位闪烁,x的取反频率为闪烁频率
{
for(a=32;a<48;a++){disbuf[a]=0;}
for(a=48;a<64;a++){disbuf[a]=0;}
}
else//正常显示,加载分钟信息
{
for(a=32;a<48;a++){disbuf[a]=shuzi3[p*16+a-32];}
for(a=48;a<64;a++){disbuf[a]=shuzi4[t*16+a-48];}
}
}
/*****将待显示温度内容存至缓冲区*****/
voidload_wendu(void)
{
uchara;
for(a=0;a<16;a++)
{
if(m==0)
disbuf[a]=0x00;//如果十位为0则不显示,目的在于消除前置0
else
disbuf[a]=shuzi[m*16+a];
}//加载温度十位信息
for(a=16;a<32;a++){disbuf[a]=shuzi[n*16+a-16];}//加载温度个位信息
for(a=32;a<48;a++){disbuf[a]=shuzi[p*16+a-32];}//加载温度小数位信息
for(a=48;a<64;a++){disbuf[a]=fuhao[a-48];}//加载摄氏度符号
}
/*****显示子程序*****/
voiddisplay(void)
{
uchari;
for(i=0;i<8;i++)
{
lie=i|0xB0;//左屏列扫描信号输出
hang1=disbuf[i];
hang2=disbuf[i+8];//行信号输出
delay();//扫描延时
hang1=0;hang2=0;
}
for(i=8;i<16;i++)
{
lie=i|0xB0;//左屏列扫描信号输出
hang1=disbuf[i-8+16];
if(i==15)hang1=dian1;//显示冒号
hang2=disbuf[i+16];//行信号输出
if(i==15)hang2=dian2;//显示冒号
delay();//扫描延时
hang1=0;hang2=0;
}
for(i=0;i<8;i++)
{
lie=i|0x70;//右屏列扫描信号输出
hang1=disbuf[i+32];
if(i==0)hang1=dian3;//显示冒号
hang2=disbuf[i+8+32];//行信号输出
if(i==0)hang2=dian4;//显示冒号
delay();//扫描延时
hang1=0;hang2=0;
}
for(i=8;i<16;i++)
{
lie=i|0x70;//右屏列扫描信号输出
hang1=disbuf[i-8+48];
hang2=disbuf[i+48];//行信号输出
delay();//扫描延时
hang1=0;hang2=0;
}
}
/*****显示图片子程序*****/
voiddisplay_pic(uchar*pic)
{
uchari;
for(i=0;i<16;i++)
{
hang1=hang2=0;
lie=i|0xb0;//左屏列扫描信号输出
hang1=pic[i];//上半屏行信号输出
hang2=pic[i+32];//下半屏行信号输出
delay();hang1=hang2=0;
}
for(i=16;i<32;i++)
{
hang1=hang2=0;
lie=i|0x70;//右屏列扫描信号输出
hang1=pic[i];//上半屏行信号输出
hang2=pic[i+32];//下半屏行信号输出
delay();hang1=hang2=0;
}
}
/*****主程序*****/
voidmain(void)
{
P1=0xff;
delayms(500);//等待芯片复位,目的是稳定检测是否需要初始化
while(SET==0)//通电前按下SET键不放,接通电源时便初始化时间信息
{
init_1302();
display_pic(init_pic);//显示初始化提示画面
}
initTimer();//初始化定时器
TR0=1;//开启定时器0
ET0=1;
EA=1;//开中断总开关
y=0;//系统时基清零
while(y<20)
{
display_pic(LED3216);//开机标识
}
while(y<40)
{
display_pic(kecheng);
}
while(y<60)
{
display_pic(sheji);
}
while(y<80)
{
display_pic(tanyue);
}
while(y<100)
{
display_pic(xia);
}
IT0=1;//开启外部中断0
EX0=1;
IT1=1;//开启外部中断1
EX1=1;
check_wendu();//开机时读取一次温度信息,使DS18B20稳定
y=0;//系统时基清零
while
(1)
{
while(set_key_st)//设置键按下
{
delayms
(1);set_key();EX0=1;
}
if(set_st==1||set_st==2)//进入调时选中状态后如果长时间无调整则自动退出
{
if(z>=200){set_st=0;z=0;}
}
if(set_st==1||set_st==2)y=0;//系统时基清零
if(y<150||set_st==1||set_st==2)
{
check_shijian();//读取时间信息
while(add_key_st&&set_st>0)//增加键按下
{
Set_time(set_st);EX1=1;
}
if(k==1)//控制秒冒号闪烁
{dian1=dian3=0x30;dian2=dian4=0x18;}//秒闪烁,x取反频率即为闪烁频率
else{dian1=dian3=0x00;dian2=dian4=0x00;}
load_shijian();//加载时间
display();//显示
}
elseif(y<152&&set_st==0)
{
check_wendu();//读取温度信息
}
elseif(y<210&&set_st==0)
{
dian1=dian3=dian4=0x00;dian2=0x40;
load_wendu();//加载温度
display();//显示
}
elseif(y<300&&set_st==0)
{
display_pic(xiaxia);//显示霞霞
}
}
}
Ziku
/*****温度显示字形编码*****/
unsignedcharcodeshuzi[]=
{
/*--文字:
0--*/
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,
/*--文字:
1--*/
0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,
/*--文字:
2--*/
0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,
/*--文字:
3--*/
0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,
/*--文字:
4--*/
0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,
/*--文字:
5--*/
0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,
/*--文字:
6--*/
0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,
/*--文字:
7--*/
0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,
/*--文字:
8--*/
0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,
/*--文字:
9--*/
0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00
};
/*****小时十位字形编码*****/
unsignedcharcodeshuzi1[]=
{
0x00,0xF8,0x08,0x08,0x08,0x08,0xF8,0x00,0x00,0x3F,0x20,0x20,0x20,0x20,0x3F,0x00,//"未命名文件",0
0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x00,//"未命名文件",1
0x00,0x08,0x08,0x08,0x08,0x08,0xF8,0x00,0x00,0x3F,0x21,0x21,0x21,0x21,0x21,0x00,//"未命名文件",2
0x00,0x08,0x08,0x08,0x08,0x08,0xF8,0x00,0x00,0x21,0x21,0x21,0x21,0x21,0x3F,0x00,//"未命名文件",3
0x00,0xF8,0x00,0x00,0x00,0x00,0xF8,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x3F,0x00,//"未命名文件",4
0x00,0xF8,0x08,0x08,0x08,0x08,0x08,0x00,0x00,0x21,0x21,0x21,0x21,0x21,0x3F,0x00,//"未命名文件",5
0x00,0xF8,0x08,0x08,0x08,0x08,0x08,0x00,0x00,0x3F,0x21,0x21,0x21,0x21,0x3F,0x00,//"未命名文件",6
0x00,0x08,0x08,0x08,0x08,0x08,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x00,//"未命名文件",7
0x00,0xF8,0x08,0x08,0x08,0x08,0xF8,0x00,0x00,0x3F,0x21,0x21,0x21,0x21,0x3F,0x00,//"未命名文件",8
0x00,0xF8,0x08,0x08,0x08,0x08,0xF8,0x00,0x00,0x21,0x21,0x21,0x21,0x21,0x3F,0x00//"未命名文件",9
};
/*****小时个位字形编码*****/
unsignedcharcodeshuzi2[]=
{
0xF8,0x08,0x08,0x08,0x08,0xF8,0x00,0x00,0x3F,0x20,0x20,0x20,0x20,0x3F,0x00,0x00,//"未命名文件",0
0x00,0x00,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,//"未命名文件",1
0x08,0x08,0x08,0x08,0x08,0xF8,0x00,0x00,0x3F,0x21,0x21,0x21,0x21,0x21,0x00,0x00,//"未命名文件",2
0x08,0x08,0x08,0x08,0x08,0xF8,0x00,0x00,0x21,0x21,0x21,0x21,0x21,0x3F,0x00,0x00,//"未命名文件",3
0xF8,0x00,0x00,0x00,0x00,0xF8,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x3F,0x00,0x00,//"未命名文件",4
0xF8,0x08,0x08,0x08,0x08