电子表定时响的原理(转)_后来者居上_百度空间

电子表

电子表是内部装配有电子元件的表,一般分液晶显示数字式和石英指针式两种。戴电子表的人一定都为它的方便和准确性好而感到高 兴。它不但能显示时间,而且能显示星期和日期。一提到时钟,大家一定会想起振动。机械表利用的是机械振动,电子表当然是利用电学振荡。

最 早的振荡电路是由电感器和电容器构成,称为LC电路,但其频率稳定性却不大好,后来,科学家们用石英晶体代替LC振荡器,就大大提高了频率稳定性。石英为 规则的六边形晶体。在石英晶体上按一定方位切割下的薄片叫做三长两短英晶片。石英晶片有一个可妙的特性:若晶片上加以机械力,则在相应的方向上就会产生电 场。这种物理现象称为“压电效应”。当在石英晶片的极板上接上交流电场。当外加交变电压的频率与石英晶片的固有频率相等时,就会产生共振。这种现象称为 “压电共振”。利用这种稳定的振荡特性,人们就创造出了精度极高的电子表和石英钟。

电子表的分类

电子表可分为数字式石英电 子手表、指针式石英电子手表及自动石英表和光动能手表

1.数字式石英电子手表:石英晶体的压电效应和两极管式液晶显示相结合的手表,其功能 xx由电子元件完成。

2.指针式石英表:石英表的能源来自氧化银扣式电池,氧化银扣式电池向集成电路提供特定电压之后,通过其中的振荡电路 和石英谐振器使石英振子起振,形成振荡电路源。从振荡电路中输出的频率为32768赫兹的电信号进入分频电路后经过16级分频产生出0.5Hz的脉冲信 号,再经过窄脉冲电路输出脉冲信号进入驱动电路中去放大,并且形成交替变化的双向脉冲信号,从而驱动步进电机作间歇性转动,进一步带动传动轮系,使表针准 确地显示时间。

电池-----提供能源,确保电路正常工 作。                                              
电路部分-----提供频率和功率稳定的 电脉冲,推进步进电机转动。
X步进电机-----把电子器件部分输出的电能转换成机械能。
传动轮系-----把电机转了输出的机械能转动 逐级传递给秒轮、分轮、时轮、拨历轮。
走针机构-----带动指针转动指示时间。
拨针机构-----调校时间和日历、周历、还具有止秒功 能。

电子表的工作原理

电子表和其他一切钟表的计时原理一样,就是利用周而复始、连续不停的振动。不同的是,机械表是以发条的 弹性形变作为动力,带动表内的计时器振动计时;而电子表是利用电池作为动力,然后将电能转化成磁能,选用一种敏感器件(如石英晶体管)作为开关带动计时器 做不停振动,同时磁能又转化成机械能,带动表针转动(或数字变化),显示时间。

电子表工作原理
电子表工作原理:
电源 -----晶体振荡产生32768HZ频率------分频------整流------滤波------模数转换-----输出。
电子元器件
无 方向器件(无源器件):
电阻:单位:欧姆
电容:单位:法拉
电感:单位:亨
有方向器件(有源器件):电解电容、 二极管 、三极管、蜂鸣器
机芯结构:
电源(电池)部分、PCB、元器件、胶罩、五金
检测要求:
检测环境、设备、方法。
精 度、工作电流、静态电流、功能。(使用寿命)
生产流程:
PCB---COB---焊锡----测试-----EL片 ----LCD----入罩----上板(上五金片)----测试----上电池----功能测试-----贴电池贴纸。
常见故障排除:
白 板:1、首先电池是否有电,无电,更换电池;有电,将机芯AC点短路即可。2、电池有电,短路任不好的,修理PCB。
断字(缺划):1、可能是螺 丝松动,打紧螺丝即可;2、驳马条上有污物,重装去除污物即可;3、LCD或PCB坏,更换以上元件。
按灯字闪或无字:1、电池无电,更换电 池;2、电池电压正常,按灯字闪,是亮灯干扰,增加干扰电容;

回答人的补充   2009-08-13 11:36

给楼主程序的源代码

;                 变量地址分配
;********************************************************* 
SwDelay             equ  2;       设 置按键时去抖动时间
DisplayBuffer       equ  30h;     设置显示缓冲区的地址为30h-35h共6个字节
BeepVal             equ  36h;     蜂 鸣时间长短存储器地址 
OneSecondCounter    equ  39h;     设置1秒计数器的地址,1秒计数器是用来计数1秒 内计时器的中断次数
Hour                equ  3ah;     设置小时计数器的地址
Minute              equ  3bh;     设 置分钟计数器的地址
Second              equ  3ch;     设置秒计数器的地址
P1Val               equ  3dh;     设 置数码管位驱动值的地址
ClockMode           equ  20h.0;   模式(正常走时/闹时)设置寄存器地址,值为0时 正常走时,为1时闹时设定
AlarmOnOff          equ  20h.1;   闹钟开启/关闭标志,为0关闭,为1开启
AlarmTimeOn         equ  20h.2;   此 位为1时表示闹时时间到
DispHour            equ  21h;     设置小时显示寄存器的地址
DispMinute          equ  22h;     设 置分钟显示寄存器的地址
DispSecond          equ  23h;     设置秒显示寄存器的地址
AlarmHour           equ  2eh;     设 置闹时小时计数器的地址
AlarmMinute         equ  2fh;     设置闹时分钟计数器的地址
AlarmSetKey         bit  P3.2;    闹 钟设置键
MinuteKey           bit  P3.5;    定义分设置键
HourKey             bit  P3.3;    定 义小时设置键
RelayOut            equ  P1.7;    定义输出引脚

回答人的补充   2009-08-13 11:37
;**********************************************************************
;                     程 序开始
;**********************************************************************
org 00h
ajmp   Reset;            程 序开始
org 0bh     ;            Timer0中断向量地址
ajmp TimeInt;            跳 到中断处理程序
org 0020h
Reset:               ;            以下为初始 化程序,为各个变量赋初值
mov sp,#70h;
setb RelayOut 
mov OneSecondCounter,#125
;
mov Hour,#12;
mov Minute,#00;
mov Second,#00;       设 置上电时时钟显示的初值
;
mov AlarmHour,#06;
mov AlarmMinute,#00;  设 置上电时闹时时间的初值
;
clr AlarmOnOff;        上点复位后闹时功能处于 关闭状态
clr ClockMode;         正常走时模式
clr AlarmTimeOn;
setb RelayOut;          清 闹时输出

;************************************
;   Use Timer 0 Mode 1
;   400us interrupt
;************************************
mov tmod,#00000001b;
mov th0,#0E3h;                  
mov tl0,#39h;
mov ie, #82h;            开 全局中断
setb  tr0;               开定时中断
;*****************************************
;         以 下为主程序
;*****************************************
MainLoop:
jb AlarmSetKey,CheckMinuteKey;  闹 时设置键按下了吗?没有则转去检测秒设置键
;                      
call Delay;
jb AlarmSetKey,CheckMinuteKey;  按 下的时间超过500ms吗?
setb ClockMode;                 置为闹时设置模式
call AlarmSet;
CheckMinuteKey:
jb MinuteKey,CheckHourKey;      分 设置键按下了吗?没有则转去检测小时设置键
;                      如按下调用蜂鸣器发音程序
mov a,Minute
add a,#1;                       如 果按下则将分钟加一                          十进制调整
mov Minute,a;
cjne a,#3ch,NotOver1;           到 60分钟了吗?
mov Minute,#0;                  到60分钟则将分钟清0
NotOver1:                                ; 以下等待按键释放及防抖动
jnb  MinuteKey,$
CheckHourKey:
jb HourKey,CheckAlarm;          小 时设置键按下了吗?没有则转去闹时状态检测
;                      如按下调用蜂鸣器发音程序
mov a,Hour
add a,#1;                       如 果按下则将小时加1
mov Hour,a
cjne a,#18h,NotOver2
mov Hour,#0;                    到 24小时则将小时清0
NotOver2:                                ;以下等待按键释放及防抖动
jnb  HourKey,$
CheckAlarm:          ;
jnb AlarmTimeOn,ToReturn
call AlarmProcess
ToReturn:
ajmp MainLoop

;**********************************************
;  定时器Timer0中断服务程 序(此程序每8ms执行一次)
;**********************************************
TimeInt:
mov th0,#0E3h;                      重 新加载定时参数
mov tl0,#39h;
push acc
push psw;                           保 护累加器及程序状态字的内容
setb rs0;                           选择工作寄存器组 1,
clr  rs1;                           这样可保护原工作寄存器组(0组)的内容
djnz OneSecondCounter,NotoneSecond; 中 断了125次了吗?即够1秒了吗?
mov OneSecondCounter,#125;          如够1秒则重 新设置"OneSecondCounter"计数器
call Clock               ;          调 用将时钟内容加1秒的子程序
call ConvertoBuffer      ;          调用将时钟内容转换 到显示缓冲区子程序
NotoneSecond:
call ScanDisplay         ;          调 用扫描显示子程序
pop  psw
pop  acc                 ;          恢 复累加器及程序状态字的内容
reti                     ;          中断返回
;*********************************************
;            扫 描显示子程序
;*********************************************
ScanDisplay:
MOV   R1,#DisplayBuffer       ; 指向显示数据首址
MOV   R4,#11111011b      ;扫描控制字初值
PLAY: MOV   A,R4          ; 扫描字放入A
MOV   P2,A          ;从P2口输出
MOV   A,@R1         ; 取显示数据到A
MOV   DPTR,#TAB     ;取段码表地址
MOVC  A,@A+DPTR     ; 查显示数据对应段码
MOV   P0,A          ;段码放入P1口

LCALL        Delay

                   INC   R1            ; 指向下一地址
MOV   A,R4            ;扫描控制字放入A
JNB   ACC.7,ENDOUT    ; 扫到第六位时结束
RL   A               ;A中数据循环左移
MOV   R4,A            ; 放回R5内
AJMP  PLAY            ;跳回PLAY循环
ENDOUT: SETB  P2.7            ; 一次显示结束,P2口复位
MOV    P0,#0FFH       ;P0口复位
RET                      ; 子程序返回
TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,7FH,0B7H,0FFH
; 共阳段码表          "0""1""2" "3""4""5""6""7" "8""9"".""=""不亮"

;****************************************************
;            时 钟内容加1秒的子程序
;****************************************************
Clock:
mov a,Second;                     将 原秒值送入a
add a,#1;                         加1秒

mov Second,a
cjne a,#3cH,NotOverFlow;          够 60秒了吗?
mov Second,#0;                    够了则将秒值清0
;
mov a,Minute
add a,#1
mov Minute,a;                     分 钟加1
cjne a,#3cH,NotOverFlow;          够60分了吗?
mov Minute,#0;                    够 了则将分值清0
;
mov a,Hour
add a,#1
mov Hour,a;                       小 时加1
cjne a,#18H,NotOverFlow;          够24小时吗?
mov Hour,#0;                      够 了则将小时值清0
NotOverFlow:
jnb AlarmOnOff,NotAlarm;          闹 钟开启了吗?如没有开启则无需理会是否到闹时时间
mov a,Second
jnz NotAlarm;                     秒 为零吗?
mov a,Minute
cjne a,AlarmMinute,NotAlarm;      时 间分钟值和闹时设置分钟值相等吗?
mov a,Hour
cjne a,AlarmHour,NotAlarm;        时 间小时值和闹时设置小时值相等吗?
setb AlarmTimeOn;                 到了闹时时间则将 “闹时时间到”标志设为1
NotAlarm:
ret
;

回答人的补充   2009-08-13 11:37
;**************************************************************************
;            将 时钟内容或闹时设置值转换到显示缓冲区子程序
;**************************************************************************
ConvertoBuffer:
mov r1,#DisplayBuffer
jb ClockMode,DispAlarmSet;        判 断时钟模式,以决定是显示实时时间还是闹时时间
mov a,Second;
mov DispSecond,a;
mov a,Minute;
mov Dispminute,a;
mov a,Hour;
mov DispHour,a;                   显 示实时时间
;
ajmp Convert
DispAlarmSet:
jb AlarmOnOff,AlarmOn
mov DispSecond,#00h
ajmp Next
AlarmOn:
mov DispSecond,#11;             显 示闹时时间及显示闹钟状态:显示“00”表示关闭闹钟,
Next:                                    ;“11” 表示开启闹钟
mov a,AlarmMinute;
mov Dispminute,a;
mov a,AlarmHour;
mov DispHour,a;
;
Convert:
mov a,DispSecond;                取 秒值
mov b,#10
div ab                              
mov @r1,b;                       
inc r1;                          缓 冲寄存器的地址加1
mov @r1,a;                       将秒值的十位值存入缓冲区
;                                
inc r1
mov a,DispMinute
mov b,#10
div ab                            
mov @r1,b;                       
inc r1;                          缓 冲寄存器的地址加1
mov @r1,a;                       将秒值的十位值存入缓冲区
;                                
inc r1
mov a,DispHour
mov b,#10
div ab                             
mov @r1,b;                       
inc r1;                          缓 冲寄存器的地址加1
mov @r1,a;                       将秒值的十位值存入缓冲区
;                                
ret;

;**************************************************
;                   闹 时设置子程序
;**************************************************
AlarmSet:
jnb  AlarmSetKey,$
call Delay;                     等 待“AlarmSetKey”键释放
CheckArmMinuteKey:          ;
jb MinuteKey,CheckArmHourKey;   分 设置键按下了吗?没有则转去检测小时设置键
setb AlarmOnOff
mov a,AlarmMinute
add a,#1;                       如 果按下则将分钟加1                          十进制调整
mov AlarmMinute,a;
cjne a,#3ch,ArmNotOver1;        到 60分钟了吗?
mov AlarmMinute,#0;             到60分钟则将分钟清0
ArmNotOver1:                             ; 以下等待按键释放及防抖动
jnb  MinuteKey,$
CheckArmHourKey:
jb HourKey,AlarmSetEnd;         小 时设置键按下了吗?没有则返回反复检测
setb AlarmOnOff
mov a,AlarmHour
add a,#1;                       如 果按下则将小时加1
mov AlarmHour,a
cjne a,#18h,ArmNotOver2
mov AlarmHour,#0;               到 24小时则将小时清0
ArmNotOver2:                             ;以下等待按键释放及防抖动
jnb  HourKey,$
AlarmSetEnd:
jb AlarmSetKey,AlarmSet;        设 置完毕了吗?
jnb AlarmSetKey,$;
clr ClockMode;                  从 设置模式转为走时模式
ret

;**************************************************
;             闹 时服务子程序
;**************************************************
AlarmProcess:
clr RelayOut;
jb AlarmSetKey,AlarmReturn;   停 止闹时键(即闹时设置键)按下了吗?
clr AlarmOnOff
jnb AlarmSetKey,$;
setb  RelayOut;                如 停止闹时键按下则停止闹时
clr AlarmTimeOn;
AlarmReturn:
ret
;**************************************************
;          延 时子程序
;**************************************************
Delay:
mov r6,#2
Del:
mov r7,#249
djnz r7,$
djnz r6,Del
ret
end



郑重声明:资讯 【电子表定时响的原理(转)_后来者居上_百度空间】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——