带有温度显示的万年历
- 格式:ppt
- 大小:2.31 MB
- 文档页数:13


电子万年历的维修!!
电子万年历近几年较流行!!时间,日期,温度,节气同屏显示,给日常生活带来不少方便!但是也较易出现故障!下面谈一下如何维修!!
故障:(按键损坏,温度不准的不做分析)
例1:不通电.
分析检修:多为供电部分损坏。
供电方式有:1:变压器式,测量变压器次极有无电压,可以判断其好坏,无电压,更换变压器(9V,3W),后级整流滤波和7805稳压块极少损坏,2:开关电源,用万用表直流10V档位测量其输出电压,无电压多为开关电源损坏,多为开关电源内部的启动电阻损坏,此时也可改为变压器供电,比较耐用。
***《极少数存在开关电源停振,此时可以拔下开关电源至主板的连线(5V,地),接通市电(220V),开关电源起振后再插上连线》例2:死机,包括:无字符和有部分子符。
分析检修:电压不稳和其他干扰造成的,首先更换记忆电池(3V,型号:2032)多数可以排除故障,仍不工作,接通市电(220V),拔下电源至主板连线,再次插上,部分死机故障可以恢复正常,若还不工作,可以在不通电的情况下,用镊子短路主板上的所有滤波电容,即给滤波电容放电后,通电看是否正常工作,最后检查晶振(32.768K),可以用石英钟表芯里的代
换。
(集成块极少损坏)
例3:走时不准
分析检修:+5V电压低,记忆电池欠压,晶振性能不良,修理电源使其恢复正常,更换电池,更换晶
振。
对于电源坏的,可以用小型市售调伏变压器(5--10元)加7805解决!!
———谢谢———。
#include <reg52.h>#include <string.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intsbit CLK=P1^1; //DS1302时钟线sbit SDA=P1^0; // DS1302数据线sbit RST=P1^2; //DS1302复位线sbit RS=P2^0;//数据/指令选择端口sbit RW=P2^1;//读写端口sbit EN=P2^2;//使能端口sbit K1=P3^4; // 选择sbit K2=P3^5; // 加sbit K3=P3^6; // 减sbit K4=P3^7; // 确定uchar tCount=0;//一年中每个月的天数,2月的天数由年份决定uchar MonthsDays[]={0,31,0,31,30,31,30,31,31,30,31,30,31};uchar *WEEK[]={"sun","mon","tus","wen","thu","fri","sat"};//周日,周一到周六uchar LCD_DSY_BUFFER1[]={"Date 00-00-00 "}; //LCD显示缓冲uchar LCD_DSY_BUFFER2[]={"Time 00-00-00 "};uchar DateTime[7]; //所读取的日期时间char Adjust_Index=-1; //当前调节的时间:秒,分,时,日,uchar Change_Flag[]="-MHDM-Y";uchar Read_LCD_State();//读LCD状态void LCD_Busy_Wait();//判忙void Write_LCD_Data(uchar dat);//写数据void Write_LCD_Command(uchar cmd);//写命令void Init_LCD();//LCD初始化void Set_LCD_POS(uchar p);//设置显示位置void Display_LCD_String(uchar p,uchar *s);//写字符串void DelayMS(uint x)//延时{uchar i;while(x--) for(i=0;i<120;i++);}uchar Read_LCD_State()//读LCD状态{uchar state;RS=0;RW=1;EN=1;DelayMS(1);state=P0;EN=0;DelayMS(1);return state;}void LCD_Busy_Wait()//判忙{while((Read_LCD_State()&0x08)==0x80);DelayMS(5);}void Write_LCD_Data(uchar dat) //写数据{LCD_Busy_Wait();RS=1;RW=0;EN=0;P0=dat;EN=1;DelayMS(1);EN=0;}void Write_LCD_Command(uchar cmd)//写命令{LCD_Busy_Wait();RS=0;RW=0;EN=0;P0=cmd;EN=1;DelayMS(1);EN=0;}void Init_LCD() //LCD初始化{Write_LCD_Command(0x38); DelayMS(1);Write_LCD_Command(0x01); DelayMS(1);Write_LCD_Command(0x06); DelayMS(1);Write_LCD_Command(0x0C); DelayMS(1);Display_LCD_String(0x00,"zhongzhoudaxue "); // DelayMS(1000);Display_LCD_String(0x40," dian zi ri li ");DelayMS(2000);}void Set_LCD_POS(uchar p){Write_LCD_Command(p|0x80);}void Display_LCD_String(uchar p,uchar *s) {uchar i;Set_LCD_POS(p);for(i=0;i<16;i++){Write_LCD_Data(s[i]);DelayMS(1);}}/*--------------------------向DS1302写入一字节---------------------------*/void DS1302_Write_Byte(uchar x){uchar i;for(i=0;i<8;i++){SDA=x&1;CLK=1;CLK=0;x>>=1;}}/*-------------------------------从DS1302读取一字节--------------------------------*/uchar DS1302_Read_Byte(){uchar i,b,t;for(i=0;i<8;i++){b>>=1;t=SDA;b|=t<<7;CLK=1;CLK=0;}return b/16*10+b%16;}/*-------------------------------从DS1302指定位置数据--------------------------------*/uchar Read_Data(uchar addr){uchar dat;RST=0;CLK=0;RST=1;DS1302_Write_Byte(addr);dat=DS1302_Read_Byte();CLK=1;RST=0;return dat;}/*-------------------------------向DS1302某地址写入数据--------------------------------*/void Write_DS1302(uchar addr,uchar dat){CLK=0;RST=1;DS1302_Write_Byte(addr);DS1302_Write_Byte(dat);CLK=0;RST=0;}/*------------------------------------设置时间------------------------------------*/void SET_DS1302(){uchar i;Write_DS1302(0x8e,0x00);for(i=0;i<7;i++){Write_DS1302(0x80+2*i,(DateTime[i]/10<<4|(DateTime[i]%10)));}Write_DS1302(0x8e,0x80);}/*------------------------------------读取当前时期时间------------------------------------*/void GetTime(){uchar i;for(i=0;i<7;i++){DateTime[i]=Read_Data(0x81+2*i);}}/*------------------------------------时间和日期转换成数字字符------------------------------------*/void Format_DateTime(uchar d,uchar *a){a[0]=d/10+'0';a[1]=d%10+'0';}/*------------------------------------判断是否为闰年------------------------------------*/uchar isLeapYear(uint y){return (y%4==0&&y%100!=0)||(y%400==0);}/*------------------------------------星期转换------------------------------------*/void RefreshWeekDay(){uint i,d,w=5;for(i=2000;i<2000+DateTime[6];i++){d=isLeapYear(i) ? 366 : 365;w=(w+d)%7;}d=0;for(i=1;i<DateTime[4];i++) d+=MonthsDays[i];d+=DateTime[3];DateTime[5]=(w+d)%7+1;}/*------------------------------------年月日时分秒++/--------------------------------------*/void DateTime_Adjust(char x){switch (Adjust_Index){case 6: //年if(x== 1&&DateTime[6]<99) DateTime[6]++;if(x==-1&&DateTime[6]>0) DateTime[6]--;MonthsDays[2]=isLeapYear(2000+DateTime[6])? 29:28;if(DateTime[3]>MonthsDays[DateTime[4]])DateTime[3]=MonthsDays[DateTime[4]];RefreshWeekDay();break;case 4: //月if(x== 1&&DateTime[4]<12) DateTime[4]++;if(x==-1&&DateTime[4]>1) DateTime[4]--;MonthsDays[2]=isLeapYear(2000+DateTime[6])? 29:28;if(DateTime[3]>MonthsDays[DateTime[4]])DateTime[3]=MonthsDays[DateTime[4]];RefreshWeekDay();break;case 3: //日MonthsDays[2]=isLeapYear(2000+DateTime[6])? 29:28;if(x== 1&&DateTime[3]<MonthsDays[DateTime[4]]) DateTime[3]++;if(x==-1&&DateTime[3]>0) DateTime[3]--;RefreshWeekDay();break;case 2: //时if(x== 1&&DateTime[2]<23) DateTime[2]++;if(x==-1&&DateTime[2]>0) DateTime[2]--;break;case 1: //秒if(x== 1&&DateTime[1]<59) DateTime[1]++;if(x==-1&&DateTime[1]>0) DateTime[1]--;break;}}/*------------------------------------定时器每秒刷新LCD显示------------------------------------*/void T0_INT() interrupt 1{TH0=-50000/256;TL0=-50000%256;if(++tCount!=2) return;tCount=0;Format_DateTime(DateTime[6],LCD_DSY_BUFFER1+5);Format_DateTime(DateTime[4],LCD_DSY_BUFFER1+8);Format_DateTime(DateTime[3],LCD_DSY_BUFFER1+11);strcpy(LCD_DSY_BUFFER1+13,WEEK[DateTime[5]-1]);Format_DateTime(DateTime[2],LCD_DSY_BUFFER2+5);Format_DateTime(DateTime[1],LCD_DSY_BUFFER2+8);Format_DateTime(DateTime[0],LCD_DSY_BUFFER2+11);Display_LCD_String(0x00,LCD_DSY_BUFFER1);Display_LCD_String(0x40,LCD_DSY_BUFFER2);}/*------------------------------------键盘中断------------------------------------*/void EX_INT0() interrupt 0{if(K1==0) //选择调整对象:年,月,日,时,分,秒{while(K1==0);if(Adjust_Index==-1||Adjust_Index==1) Adjust_Index=7;Adjust_Index--;if(Adjust_Index==5) Adjust_Index=4;LCD_DSY_BUFFER2[13]='[';LCD_DSY_BUFFER2[14]=Change_Flag[Adjust_Index];LCD_DSY_BUFFER2[15]=']';}elseif(K2==0) // 加{while (K2==0); DateTime_Adjust(1);}elseif(K3==0) // 减{while (K3==0); DateTime_Adjust(-1);}elseif(K4==0) // 确定{while(K4==0);SET_DS1302(); //调整后的时间写入DS1302LCD_DSY_BUFFER2[13]=' ';LCD_DSY_BUFFER2[14]=' ';LCD_DSY_BUFFER2[15]=' ';Adjust_Index=-1;}}/*------------------------------------主程序------------------------------------*/void main(){Init_LCD(); //CLD初始化IE=0x83; // 允许INT0,T0中断IP=0x01;IT0=0x01;TMOD=0x01;TH0=-50000/256;TL0=-50000%256;TR0=1;while(1){if(Adjust_Index==-1) GetTime();}}。
内置“中文报时、和弦铃声、生日提醒、流水鸟叫”数码万年历芯片一TG2555说明书一.功能简介:1 •中文语音报时,优美和弦铃声,美妙生日提醒,内置流水鸟叫。
2.公历年、月、日、时、分、秒、星期、温度、农历月、日显示,根据机型的不同有如下部分或全部功能:显示农历24节气、12生肖、12星座、闰月指示灯、彩灯等。
3.2001-2049年公农历同步翻查显示。
4.12/24小时制可转换。
5.中文和弦音乐报时,当整点报时打开时,整点报时指示灯点亮,每天7:00~21: 00整点时,会敲整点钟声,并报“现在时刻几点整”,再放一段和弦音乐;外销版为打点再放和旋音乐。
6.8组和弦音乐闹钟,每天报闹一次,闹铃为和弦音乐+报时+和弦音乐+报时,持续一分多钟。
7.生日和弦音乐提醒:最多可设置11位亲人及朋友的生日提醒。
8.星期显示多种选择:①数字显示1-6,8适用于内销;②数字显示2-8适用于越南;③数字显示1-7适用于俄罗斯、中东;④7个LED灯指示适用于日本、韩国;⑤米字数码管显示(有英法西德意五国版本)适用于美国、印度、欧洲。
9.温度测量范围为-9~50摄氏度。
10.自动控制开/关灯•马达(用户可自由设定开/关灯•马达时间)。
11.红外遥控控制,可用遥控器设置、调校。
12.若市电停电,数码管显示关闭,芯片内部能正常走时,来电时不需重新设置时间。
13.数码管亮度自动调整:22:00—7:00,显示亮度自动降低一半;其他时段亮度显示正常。
.操作说明:1 •按键说明:设置键,上调键,下调/闹钟键,退出/报时键,流水键。
2.时间设置:在万年历正常走时状态下,按“设置键”进入时间设置状态,同时“年”位闪烁,按“上调键或下调键”修改年份;按“设置键”将闪烁位移到公历“月” 位,按“上调键或下调键”修改月份;依次类推即可设置日、时、分、秒;当“秒”设置完成时,按“设置键”万年历则回到正常走时状态。
3.12/24小时制切换:在万年历正常走时状态下,按住“上调键” 3秒钟,则可进行12小时制与24小时制的切换,语音报时按24小时制报。