基于单片机的个性化电子钟Word格式.docx
《基于单片机的个性化电子钟Word格式.docx》由会员分享,可在线阅读,更多相关《基于单片机的个性化电子钟Word格式.docx(28页珍藏版)》请在冰豆网上搜索。
4.程序模块框图
5.程序清单
6.设计或调试过程中碰到的问题及决计方法
7.测试数据,误差分析,补偿方法,补偿前后精度比较
8.完成课程设计后的收获或体会,对《单片机课程设计》提出改进意见。
三.课程设计验收标准:
本次课程设计的成绩由3大部分组成:
即硬件设计﹑软件设计和课程设计报告。
硬件设计主要是电路图设计(可以用手工画或计算机辅助设计)。
软件部分在答辩时验收,并结合答辩情况进行评定。
1.电路原理图设计(20%),包括以下知识点:
CPU及时钟,复位电路
显示接口电路
键盘接口电路
蜂鸣器驱动电路
电源部分
2.软件设计及答辩(60%),包括以下知识点:
主程序及初始化程序
定时中断及计时程序
定时中断及显示程序
键盘程序
闹铃程序
按键声程序
3.课程设计报告(20%),具体要求见上面所述.
四.基础较好的学生可以结合实际应用自拟题目,题目和具体设计内容定好后
由指导老师比准。
指导老师:
乐金松
2014,12,28
单片机系统原理图及工作原理描述
1.MCU:
采用40个引脚的芯片。
4个8位的并行I/o口:
p0,p1,P2和P3,可以外接各种元器件和电路,控制各个I/O口高低电平的输出,以实现预期的功能。
还有复位键,晶振时钟,EA口等组成单片机最小系统。
2.晶振模块:
晶振大小为11.0592MHZ。
分析整个振荡槽路可知,利用Cv来改变频率是有限的:
决定振荡频率的整个槽路电容C=Cbe,Cce,Cv三个电容串联后和Co并联再和C1串联。
可以看出:
C1越小,Co越大,Cv变化时对整个槽路电容的作用就越小。
因而能“压控”的频率范围也越小。
实际上,由于C1很小(1E-15量级),Co不能忽略(1E-12量级,几PF)。
所以,Cv变大时,降低槽路频率的作用越来越小,Cv变小时,升高槽路频率的作用却越来越大。
这一方面引起压控特性的非线性,压控范围越大,非线性就越厉害;
另一方面,分给振荡的反馈电压(Cbe上的电压)却越来越小,最后导致停振。
3.数码管显示模块:
此为共阴极的八个数码管,p0口控制各个数码管的段选;
再通过P2.2,P2.3,P2.4口,控制138译码器输入来控制译码器的8个输出口,以达到数码管的位控制。
如:
当p2口输入为11100011时,则控制第一个数码管点着,即LED1被点亮,其他熄灭。
4.复位模块:
上电或开关复位要求电源接通后,单片机自动复位,并且在单片机运行期间,用开关操作也能使单片机复位。
上电后,由于电容C5的充电和反相门的作用,使RST持续一段时间的高电平。
当单片机已在运行当中时,按下复位键K后松开,也能使RST为一段时间的高电平,从而实现上电或开关复位的操作。
5.独立按键模块:
分别为P3.0,P3.1,P3.2,P3.3口,为共阴极接法,当按键被按下时接入。
6.总电源模块:
实现5V电压转换,给其他元器件与电路供电。
7.蜂鸣器模块:
接入口为p1.5,当输入高电平时就会鸣响。
工作原理见附页
程序模块框图
主程序:
大概流程功能:
中断程序:
程序清单
;
1、其中:
P1.2,P1.3,P1.4,P1.5,P1.6,P1.7分别控制LED6,LED5,LED4LED3LED2LED1的公共端
P0口位正序连接的LED数码管段控制端口
2、产生2MS定时中断,每次中断调用扫描显示程序
3、系统时钟为12MHZ,N=1983
****************************************************************************
LED1EQU7FH
LED2EQU7EH
LED3EQU7DH
LED4EQU7CH
LED5EQU7BH
LED6EQU7AH
SCAN_COUNTEQU79H;
扫描显示计数器
H_MEM1EQU78H
M_MEM1EQU77H
S_MEM1EQU76H
H_MEMEQU75H
M_MEMEQU74H
S_MEMEQU73H
TIMER_COUNTEQU72H;
定时器中断次数软件计数器
TEMPEQU6EH;
模式寄存器
FLASH_FLAGEQU20H.0;
定义闪烁标志位
----------------------------------------------------------------------------------------
ORG0000H
LJMPMAIN
ORG000BH;
安装中断向量
LJMPT0_INT;
和外部中断向量
-------------------------------------------------------------------------------------------
ORG0030H
MAIN:
MOVSP,#2FH
MOVTL0,#(65536-1983)MOD256;
初始化时间常数
MOVTH0,#(65536-1983)/256
MOVTMOD,#00000001B
SETBET0;
开放定时器0中断
SETBTR0;
开启定时器0
SETBEA
LCALLCLR_MEM
;
---------------键盘扫描程序----------------------
KEYSCAN:
JNBP3.0,RING1
KEYSCAN1:
JNBP3.1,RING2
KEYSCAN2:
JNBP3.2,RING3
LJMPKEYSCAN
-----------------按键声程序----------------------
RING1:
CALLD10MS
CPLP1.5;
取反蜂鸣器
JNBP3.0,$
CPLP1.5
LJMPMODE
RING2:
JNBP3.1,$
LJMPUPSET_MODE11
RING3:
JNBP3.2,$
LJMPDOWNSET_MODE11
-------------------------------------------------
MODE:
INCTEMP
MOVA,TEMP
CJNEA,#5,EXIT1
MOVTEMP,#0
EXIT1:
JNBP3.0,$
LJMPKEYSCAN1
-----------------加键----------------------------------
UPSET_MODE11:
CJNEA,#1,UPSET_MODE12;
判断模式1,是就进入下一程序,否跳转另一模式判断
INCH_MEM
MOVA,H_MEM
CJNEA,#24,UP_EXIT
MOVH_MEM,#0
LJMPKEYSCAN2
UPSET_MODE12:
CJNEA,#2,UPSET_MODE23
INCM_MEM
MOVA,M_MEM
CJNEA,#60,UP_EXIT
MOVM_MEM,#0
LJMPKEYSCAN2
UPSET_MODE23:
CJNEA,#3,UPSET_MODE24
INCH_MEM1
MOVA,H_MEM1
CJNEA,#24,UP_EXIT
MOVH_MEM1,#0
UPSET_MODE24:
CJNEA,#4,UP_EXIT
INCM_MEM1
MOVA,M_MEM1
CJNEA,#60,UP_EXIT
MOVM_MEM1,#0
LJMPKEYSCAN
UP_EXIT:
JNBP3.1,$
-----------------减键--------------------------------
DOWNSET_MODE11:
CJNEA,#1,DOWNSET_MODE12
DECH_MEM
CJNEA,#0FFH,DOWN_EXIT
MOVH_MEM,#23
DOWNSET_MODE12:
CJNEA,#2,DOWNSET_MODE21
DECM_MEM
MOVM_MEM,#59
DOWNSET_MODE21:
CJNEA,#3,DOWNSET_MODE22
DECH_MEM1
MOVH_MEM1,#23
DOWNSET_MODE22:
CJNEA,#4,DOWN_EXIT
DECM_MEM1
MOVM_MEM1,#59
DOWN_EXIT:
JNBP3.2,$
**************定时中断程序**********************************************
T0_INT:
PUSHACC;
保护现场
PUSHPSW
PUSHDPL
PUSHDPH
SETBRS1;
选择2区工作寄存器单元
MOVTL0,#(65536-1983)MOD256;
恢复时间常数
MOVTH0,#(65536-1983)/256
LJMPMODE0
DIS:
LCALLDISPLAY
INCTIMER_COUNT
MOVA,TIMER_COUNT
CJNEA,#250,T0_INT1
MOVTIMER_COUNT,#0
CPLFLASH_FLAG;
每2MS*250=500MS取反闪烁标志位
JNBFLASH_FLAG,T0_INT1
INCS_MEM
MOVA,S_MEM
CJNEA,#60,T0_INT1;
对秒,分,时单元加1
MOVS_MEM,#0;
满计数后清零
INCM_MEM
MOVA,M_MEM
CJNEA,#60,T0_INT1
MOVM_MEM,#0
INCH_MEM
MOVA,H_MEM
CJNEA,#24,T0_INT1
MOVH_MEM,#0
---------------------闹钟-----------------
T0_INT1:
;
每一次中断
MOVA,M_MEM;
将现在的时间跟闹铃模式
CJNEA,M_MEM1,T0_INT2;
设置的时间比较
CJNEA,H_MEM1,T0_INT2
CPLP1.5;
取反蜂鸣器控制位
T0_INT2:
POPDPH;
中断结束恢复现场,注意出栈顺序
POPDPL
POPPSW
POPACC
RETI
****************************************************
-------------MODE0(正常)-----------------
MODE0:
CJNEA,#0,MODE1
MOVR3,S_MEM;
秒单元二翻十
MOVR2,#0
LCALLBTID
MOVA,R6
ANLA,#0FH
MOVDPTR,#LED_CODE
MOVCA,@A+DPTR
MOVLED1,A
ANLA,#0F0H
SWAPA
MOVDPTR,#LED_CODE
MOVLED2,A
MOVR3,M_MEM;
分钟单元二翻十
MOVA,R6
MOVCA,@A+DPTR
JNBFLASH_FLAG,MODE0_BCD1
CPLACC.7;
点亮小数点
MODE0_BCD1:
MOVLED3,A
MOVLED4,A
MOVR3,H_MEM;
时钟单元二翻十
JNBFLASH_FLAG,MODE0_BCD2
MODE0_BCD2:
MOVLED5,A
MOVLED6,A
LJMPDIS
------------MODE1(时钟小时校准)-----------------------------
MODE1:
CJNEA,#1,MODE2
MOVR3,S_MEM;
MOVR3,M_MEM;
JNBFLASH_FLAG,MODE1_BCD1
MODE1_BCD1:
MOVR3,H_MEM;
JNBFLASH_FLAG,MODE1_BCD2
CPLACC.7;
MOVA,#00H
MODE1_BCD2:
MOVA,R6
JNBFLASH_FLAG,MODE1_BCD3;
另时钟单元数码管闪烁
MOVA,#00H;
对数码管熄灭
MODE1_BCD3:
MOVLED6,A;
送显示到数码管
-------------MODE2(时钟分钟校准)-------------
MODE2:
CJNEA,#2,MODE3
MOVR3,S_MEM;
JNBFLASH_FLAG,MODE2_BCD1
点亮小数点
MODE2_BCD1:
JNBFLASH_FLAG,MODE2_BCD3;
另分钟单元闪烁
MOVA,#00H;
熄灭数码管
MODE2_BCD3:
MOVLED4,A
JNBFLASH_FLAG,MODE2_BCD2
MODE2_BCD2:
MOVLED6,A
LJMPDIS
-----------------MODE3(闹铃小时校准)----------------
MODE3:
CJNEA,#3,MODE4
MOVR3,S_MEM1;
MOVA,R