自制万年历年月日时分秒周温度
- 格式:doc
- 大小:279.50 KB
- 文档页数:7
万年历
#include
#include "ds1302.h"
#include "hareware.h"
#include "18b20.h"
//1MS延时子程序
void delay_ms(int x){
int i,j;
for(i=0;i for(j=0;j<120;j++);} } unsigned char code TAB[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//数据0---9 unsigned char code TAB1[]={0xe8,0xe9,0xea,0xeb,0xec,0xed,0xee,0xef, 0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7, 0xc0,0xb0,0x60};//数据选择输出口 char disp1[17]; //char init[7]; int j,temperture,y,t_cnt,t_cnt1,flag,mos,yiwei,shezhi,a; void trasfer(void); //数据转换 //void trasfer1(void); //数据转换2 void anjian(void);//按键判断 void shuzhi1(void);//数值的转化 void wendu(void);//温度报警 main(){ TMOD = 0X11;//定时器0和定时器0工作在方式一 TH0=(65536-time0_us)/256; TL0=(65536-time0_us)%256;//定时器0赋初值 TH1=(65536-time_us)/256; TL1=(65536-time_us)%256;//定时器0赋初值 EA=1;//开总中断开关 ET0=1;//开定时器0中断开关 TR0=1;//定时器0开始定时 ET1=1;//开定时器0中断开关 TR1=1;//定时器0开始定时 DS1302_Initial(); //初始化DS1302 // DS1302_SetTime(init1); //设置初始时间 DS1302_GetTime(now); //读取当前时间 y=temperture; flag=1; mos=0; yiwei=0; shezhi=0; a=0x20; while(1){ temperture=ReadTemperature(); anjian(); // trasfer1(); trasfer(); wendu(); } } /**************************************************/ /**************定时器T0中断服务子函数**************/ /**************************************************/ void T0_ISR() interrupt 1 using 1 { TH0=(65536-time0_us)/256; TL0=(65536-time0_us)%256; //定时器0重新赋初 switch(mos){ case 0:{ SEG7P=0x00; // 关闭7节显示器 SCANP=TAB1[j]; // 输出扫瞄信号 SEG7P=TAB[(disp1[j])]; // 转换成驱动信号,并输出到P0 j++; if(j==17)j=0; break; } case 1:{ SEG7P=0x00; // 关闭7节显示器 SCANP=TAB1[j]; // 输出扫瞄信号 if((j==yiwei||j==yiwei+1)&&flag==1){ SEG7P=0x00; } else{ SEG7P=TAB[(disp1[j])]; // 转换成驱动信号,并输出到P0 } j++; if(j==17)j=0; break; } } } /**************************************************/ /**************定时器T1中断服务子函数**************/ /**************************************************/ void T1_ZD() interrupt 3 using 1 //定时器中断子程序 { TH1=(65536-time_us)/256; TL1=(65536-time_us)%256;//设定定时器初值 t_cnt++;//定时器定时一次就加一 t_cnt1++;//定时器定时一次就加一 if(t_cnt>=time_cnt){//判断是否有20次 t_cnt=0; //清零 flag=~flag; // y=temperture; //2秒钟温度稳定变化一次,以稳定温度的显示} if(t_cnt1>=time_cnt1){//判断是否有20次 t_cnt1=0; //清零