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