单片机课程设计

时间:2024.5.9

基于单片机的数字电子钟

序列号

论文题目: 基于单片机的数字电子钟

课程名称: 单片机原理机接口技术

LKH 1/21/2015 1

单片机课程设计

单片机课程设计

基于单片机的数字电子钟

目录1

1.

2.

3.

4.

5.

6.

7.

8.

9.

LKH 1/21/2015 2

基于单片机的数字电子钟

目录2

目录1 .............................................................................................................................................. 2

目录2 .............................................................................................................................................. 3

一、 课程设计任务书 ...................................................................................................... 4

1) 基本要求 .................................................................................................................. 4

2) 设计报告要求: ...................................................................................................... 4

3) 课程设计验收标准: .............................................................................................. 5

二、 个性化电子钟功能描述 .......................................................................................... 5

1. 基本计时功能: ...................................................................................................... 5

2. 校准功能 .................................................................................................................. 5

3. 闹钟模式 .................................................................................................................. 6

三、 单片机系统原理图及工作原理描述 ...................................................................... 6

1. 各模块介绍 .............................................................................................................. 6

2. 单片机系统总图 ...................................................................................................... 9

四、 程序模块框图 .......................................................................................................... 9

1. 功能框图 .................................................................................................................. 9

2. 程序框图 ................................................................................................................ 10

五、 程序清单 ................................................................................................................ 11

;变量定义....................................................................................................................... 11

;初始化 .......................................................................................................................... 12

;主要执行程序 ............................................................................................................... 12

;按键P3.7检测程序 ..................................................................................................... 13

;显示模式选择程序 ....................................................................................................... 13

; 中断服务程序 ............................................................................................................. 14

;闹钟显示及转码程序 ................................................................................................... 16

;检测闹钟程序 ............................................................................................................... 18

; 显示时分秒程序 ......................................................................................................... 18

; 显示年月日的程序 ..................................................................................................... 22

;年月日校准程序 ........................................................................................................... 26

;按键检测程序 ............................................................................................................... 28

;功能小程序................................................................................................................... 34

六、 设计或调试过程中碰到的问题及解决方法 ........................................................ 37

1. 存储错乱 ................................................................................................................ 37

2. 工作区的选择 ........................................................................................................ 38

3. 闹钟响的时间 ........................................................................................................ 38

4. 按键紊乱 ................................................................................................................ 39

七、 测试数据,误差分析,补偿方法,补偿前后精度比较 .................................... 39

a) 未考虑月份不同天数 ............................................................................................ 39

b) 中断服务程序造成的时间延迟 ............................................................................ 39

八、 收获及意见 ............................................................................................................ 40

九、 附录(完整电路图) ............................................................................................ 40

LKH 1/21/2015 3

基于单片机的数字电子钟

一、 课程设计任务书

1) 基本要求

根据《单片机原理及接口技术》所学的内容及其他相关课程的知识,结合各生的基础,充分发挥个人的特长,设计个性化数字电子钟。具体要求以下:

1. 基本电路

AT89S51CPU,12MHZ时钟,常规上电和手动复位电路。

2. 数码管显示模式

4位LED数码显示器(带钟点),分别显示“小时:分钟”或“分钟:秒”

3. 独立按键

3个独立试按键,具体功能描述如下:

[MODE]——模式转换键,具有“正常——小时(校准)——分钟(校准)——小时(闹铃)——分钟(闹铃)”等5种模式,每按一次,转换一种模式。假设当前处于正常模式,按一下此键,“小时”闪烁,表示进入“小时”调校模式,再按一次,转入分钟模式,如此类推,正常模式下不闪烁。

[UP]——加“1”键,按下此键,被选中的项目加“1”

[DOWN]——减“1”键,按下此键,被选中的项目减“1”

4. 蜂鸣器

设计1路蜂鸣器输出驱动电路,用于报警或按键声

5. 电源电路

电源:9V交流输入,全波整流,滤波,7805稳压电路,输出5V直

流电源共给单片机系统。

6. 软件

编写数字电字钟的所有软件,包括主程序,定时器中断计时程序,

定时器中断扫描显示程序,键盘扫描及功能程序,BCD码转换程序,“二翻十﹑拆字﹑转码”程序,闹铃程序等等。将这些程序整合成一个完整的电子钟程序,在软件模拟器上调试,在MCS51学习机上调试,并测试其功能及性能。在设计软件时,学生可充分发挥自己的特长和想象力,自行扩充功能,如“秒表”功能,通信功能,钟控功能等。

7. 精度分析

在程序调试通过后,测试计时精度,分析误差来源,提出补偿方法。

2) 设计报告要求:

每人一份设计报告,要求独立完成,用统一的封面装订,设计报告的内容包括以下部分:

1. 设计任务书

2. 个性化电子钟功能要求

3. 单片机系统原理图及工作原理描述

4. 程序模块框图

5. 程序清单

6. 设计或调试过程中碰到的问题及决计方法

7. 测试数据,误差分析,补偿方法,补偿前后精度比较

8. 完成课程设计后的收获或体会,对《单片机课程设计》提出改进意见。 LKH 1/21/2015 4

基于单片机的数字电子钟

3) 课程设计验收标准:

本次课程设计的成绩由3大部分组成:即硬件设计﹑软件设计和课程

设计报告。硬件设计主要是电路图设计(可以用手工画或计算机辅助设计)。软件部分在答辩时验收,并结合答辩情况进行评定。

1. 电路原理图设计(20%),

包括以下知识点:

CPU及时钟,复位电路

显示接口电路

键盘接口电路

蜂鸣器驱动电路

电源部分

2. 软件设计及答辩(60%),包括以下知识点:

主程序及初始化程序

定时中断及计时程序

定时中断及显示程序

键盘程序

闹铃程序

按键声程序

3. 课程设计报告(20%),具体要求见上面所述.

4) 基础较好的学生可以结合实际应用自拟题目,题目和具体设计内容定好后

由指导老师比准。

指导老师:乐金松 2014,12,28

二、 个性化电子钟功能描述

1. 基本计时功能:

①. 上电显示时钟、分钟、秒,时钟和分钟显示小数点以做区分

②. 当P3.7键按下,显示年月日,因为比较方便观察,并没有设置小数点以

作区分。

2. 校准功能

①. 上电显示为时分秒或年月日

②. 当P3.4按下一次,校准时钟位,时钟位闪烁

③. 当P3.4按下两次,校准分钟位,分钟位闪烁

④. 当P3.4按下三次,校准秒位,秒位闪烁,注意,此时若是显示年月日模

式,调整无效,数码管熄灭

⑤. 当P3.4按下四次,校准年的高位,年的高位闪烁

⑥. 当P3.4按下五次,校准年的低位,年的低位闪烁

⑦. 当P3.4按下六次,校准月份位,月份位闪烁

⑧. 当P3.4按下七次,校准日位,日位闪烁,此时若是显示时分秒模式,调

整无效,数码管熄灭,其中,若P3.5键按下,加1,若P3.6键按下,减1

LKH 1/21/2015 5

基于单片机的数字电子钟

⑨. 当P3.4按下八次或九次,为闹钟校准模式

⑩. 当P3.4按到十次,恢复显示年月日或者时分秒

3. 闹钟模式

①. 当P3.4按到八次,时钟和分钟位显示初始时间(12:00),设置小时闹

钟。若P3.5键按下,加1,若P3.6键按下,减1

②. 当P3.4按到九次,设置分钟闹钟,若P3.5键按下,加1,若P3.6键按

下,减1

③. 即使没有设置闹钟,在时间为12:00时,也会启动闹钟,闹钟声音为

十次简短的鸣声。

三、 单片机系统原理图及工作原理描述

1. 各模块介绍

a) CPU及时钟,复位电路

i. 复位电路

单片机课程设计

功能描述:上电时,单片机会自动复位,按下S1按键时,手动复位,

该电子钟系统会从0开始计时。

ii. 时钟

单片机课程设计

此电路系统配置的是12MHZ的晶振,拥有这个晶振,电路才会计时、

中断系统才会溢出。

LKH 1/21/2015 6

基于单片机的数字电子钟

iii.

单片机课程设计

CPU

此电子钟系统采用的是STC公司的89C52单片机,本电路主要使用其P0口(数码管)、P3口(按键)、和P1口(蜂鸣器),该单片机内部含有运算器、存储器、控制器、输入输出设备等。

b) 显示接口电路

单片机课程设计

LKH 1/21/2015 7

基于单片机的数字电子钟

这个开发板需要两个锁存器分别控制位选和断选,只有位选控制端置一,才能送位选信号,同理,断选控制端置一,才能送段选信号。 c) 键盘接口电路

单片机课程设计

d) 蜂鸣器驱动电路

单片机课程设计

此按键,按下为0,松开为1。

LKH 1/21/2015 8

单片机课程设计

基于单片机的数字电子钟

蜂鸣器送逻辑1的时候才能发出声音。

e) 电源部分

单片机课程设计

此电源用LM317芯片进行整流,进行滤波和稳压后,通过调节电位器,可以把输入的9V电压转变成5V的电压。

2. 单片机系统总图

(详见附录)

四、 程序模块框图

1. 功能框图

单片机课程设计

LKH 1/21/2015 9

基于单片机的数字电子钟

单片机课程设计

基于单片机的数字电子钟

五、 程序清单

;变量定义

LED1 EQU 7FH

LED2 EQU 7EH

LED3 EQU 7DH

LED4 EQU 7CH

LED5 EQU 7BH

LED6 EQU 7AH

LED1_2 EQU 6CH

LED2_2 EQU 6BH

LED3_2 EQU 6AH

LED4_2 EQU 69H

LED5_2 EQU 68H

LED6_2 EQU 67H

LED7_2 EQU 66H

LED8_2 EQU 65H

SCAN_COUNT2 EQU 64H

MODE2 EQU 60H

SCAN_COUNT3 EQU 5FH

SCAN_COUNT4 EQU 5EH

LED1_CLOCK_HOUR EQU 5DH

LED2_CLOCK_HOUR EQU 5CH

LED1_CLOCK_MIN EQU 5BH

LED2_CLOCK_MIN EQU 5AH

H_MEM_CLOCK EQU 59H

M_MEM_CLOCK EQU 58H

SCAN_COUNT5 EQU 57H

SCAN_COUNT EQU 77H ;扫描显示计数器

TEMP1 EQU 76H

TEMP2 EQU 75H

TEMP3 EQU 74H

H_MEM EQU 73H

M_MEM EQU 72H

S_MEM EQU 71H

D_MEM EQU 6DH

MON_MEM EQU 63H

Y_MEM_1 EQU 62H

Y_MEM_2 EQU 61H

MODE_REG EQU 6FH

TIMER_COUNT EQU 6EH ;定时器中断次数软件计数器 LKH 1/21/2015 11

基于单片机的数字电子钟

MODE EQU 70H

TEMP4 EQU 20H.1

;TEMP4 EQU 6CH

FLASH_FLAG EQU 20H.0 ;定义闪烁标志位

CLOCK_FLAG EQU 20H.2

;初始化

ORG 0000H

LJMP MAIN

ORG 0003H ;外部中断0的标志

RETI ;中断标志

ORG 000BH ;定时器中断0的标志

LJMP T0_INT

ORG 0013H ;外部中断1

RETI

;-------------------------------------------------------------

ORG 0030H ;好像一般都有这一句

MAIN:

MOV SP,#2FH

MOV TL0,#(65536-4608)MOD 256 ;MOD是取余数,初始化时间常数

MOV TH0,#(65536-4608)/256

MOV TMOD,#00000001B ;G=0,C/T取T(定时器),模式为模式1(16位定时器或计数器方式)

SETB ET0 ;T0(定时器0中断)中断允许

SETB TR0 ;定时器0控制位,置1 SETB EA ;CPU中断允许总开关

LCALL CLR_MEM

MOV MON_MEM,#1

MOV D_MEM,#1

;------------

MOV H_MEM_CLOCK,#12

CLR P1.4

;主要执行程序

;---------------------------------------------------------------

WAIT:

;LCALL CLOCK_CHOOSE

;LCALL DELAY_1S

LCALL KEY4_SCAN

LCALL CHOOSE

LCALL CHECK_TIME

SJMP WAIT

LKH 1/21/2015 12

基于单片机的数字电子钟

;按键P3.7检测程序

;------------------显示模式的选择程序--------------------------------

;------------------等待按键按下---------------------------

KEY4_SCAN:

NOKEY_4:

MOV C,P3.7

CPL C

JNC GATE4;CY为0跳转,没有按键,执行display程序 MOV C,P3.7

MOV TEMP4,C

LCALL DELAY_10MS

MOV C,P3.7

ORL C,TEMP4

JNC K4 ;按下跳转 ;没按下,返回

GATE4: RET

K4:

LCALL SOUND

INC MODE2

MOV A,MODE2

CJNE A,#2,K41 ;mode只能为0或者1 mode为1执行display2程序

MOV MODE2,#0

K41: JNB P3.7,$

RET

;显示模式选择程序

;----------无论如何都要选择一个模式-------------------------

CHOOSE:

MOV A,MODE2

CJNE A,#0,NOT_CLOCK0; MODE2为1,判断是模式8还是模式9

MOV A,MODE ;MODE2为0, 判断是否为8或者9 CJNE A,#8,NOT_CLOCK3;MODE2=0的情况下,不为模式8,判断是否为模式9

LCALL CONVERT_BCD3;为模式8,调用display——clock程序 LCALL CLOCK_DISPLAY ;为模式8

RET

NOT_CLOCK3:

CJNE A,#9,NOT_CLOCK4;判断是否为模式9

LCALL CONVERT_BCD3

LJMP CLOCK_DISPLAY

RET

NOT_CLOCK4:

LCALL CONVERT_BCD1 ;不为模式9,调用显示程序1 LCALL CHOOSE_DISPLAY1

LKH 1/21/2015 13

基于单片机的数字电子钟

RET

NOT_CLOCK0:

MOV A,MODE

CJNE A,#8,NOT_CLOCK1 ;MODE2为1时,不为模式8,判断是否为模式9

LCALL CONVERT_BCD3;为模式8,调用display——clock程序 LCALL CLOCK_DISPLAY

RET

NOT_CLOCK1:

CJNE A,#9,NOT_CLOCK2 ;不为模式9,显示mode2=0下的display程序

LCALL CONVERT_BCD3 ;为模式9,调用clockdisplay程序 LCALL CLOCK_DISPLAY

RET

NOT_CLOCK2:

LCALL CONVERT_BCD2; 此时为mode2模式为1的,选择闪烁模式,对DISPLAY程序经行选择

LCALL CHOOSE_DISPLAY2;模式0,display程序

RET

;-----------显示模式选择函数-----------------------

CHOOSE_DISPLAY1:

MOV A,MODE

CJNE A,#0,CH_1

LCALL DISPLAY1 ;模式为0,调用正常的显示程序

RET

CH_1:

LCALL DISPLAY1_2

RET

CHOOSE_DISPLAY2:

MOV A,MODE

CJNE A,#0,CH_2

LCALL DISPLAY2 ;模式为0,调用正常的显示程序

RET

CH_2:

LCALL DISPLAY2_2

RET

; 中断服务程序

;------------------------中断服务程序-------------------------------------

T0_INT:

PUSH ACC ;保护现场开始,保护A累加器

PUSH PSW ;保护程序状态字存储器

LKH 1/21/2015 14

基于单片机的数字电子钟

PUSH PUSH SETB MOV MOV LCALL INC MOV CJNE TO_INT1

MOV CPL 反闪烁标志位 ;CPL ; LCALL 位取反

JNB

INC MOV CJNE MOV

INC MOV CJNE MOV

INC MOV CJNE MOV

INC MOV CJNE MOV INC MOV CJNE MOV

INC

LKH DPL ;数据地址指针(低8位) DPH RS1 ;选择2区工作存储单元 TL0,#(65536-5000)MOD 256 ;恢复时间常数 TH0,#(65536-5000)/256 KEY_SCAN TIMER_COUNT A,TIMER_COUNT A,#100,T0_INT1 ;如果A不等于100,跳到 TIMER_COUNT,#0 FLASH_FLAG ;每5MS*100=500MS取 P1.4 FLASH ;CPL:Converse Position Logical FLASH_FLAG,T0_INT1 ;为0跳到TO_INT1 S_MEM A,S_MEM A,#60,T0_INT1 ;秒位 S_MEM,#0 M_MEM A,M_MEM A,#60,T0_INT1 ;分位 M_MEM,#0 A,H_MEM A,#24,T0_INT1 H_MEM,#0 ;时位 D_MEM A,D_MEM A,#32,T0_INT1 D_MEM,#1 ;天 MON_MEM A,MON_MEM A,#13,T0_INT1 MON_MEM,#1 ;月 Y_MEM_1 1/21/2015 15 H_MEM

基于单片机的数字电子钟

MOV A,Y_MEM_1

CJNE A,#100,T0_INT1

MOV Y_MEM_1,#0 ;低位年

INC Y_MEM_2

MOV A,Y_MEM_2

CJNE A,#100,T0_INT1

MOV Y_MEM_2,#0 ;高位年

T0_INT1:

POP DPH

POP DPL

POP PSW

POP ACC

RETI ;出栈

;闹钟显示及转码程序

;闹钟显示程序

;--------------------------时钟的显示函数---------------------------------

CLOCK_DISPLAY:

;SETB CLOCK_FLASH

MOV P0,#11111111B

SETB P2.7

NOP

NOP

CPL P2.7

MOV A,SCAN_COUNT5

ADD A,ACC

MOV R1,A

LCALL FLASH3 ;在flash函数中选择调用哪个表 ;MOV DPTR,#LED_SCAN_TABLE

MOV A,R1

MOVC A,@A+DPTR

SETB P2.7 ;位锁存

MOV P0,A

CLR P2.7

MOV A,SCAN_COUNT5

ADD A,ACC

INC A

MOVC A,@A+DPTR

MOV R0,A

MOV A,@R0

SETB P2.6

LKH 1/21/2015 16

基于单片机的数字电子钟

MOV P0,A

;LCALL DELAY_1S ;调试用

CLR P2.6 ;DB

3FH,06H,5BH,04FH,66H,6DH,7DH,07H

;DB

7FH,6FH,77H,7CH,39H,5EH,79H,71H,0FFH

INC SCAN_COUNT5

MOV A,SCAN_COUNT5

CJNE A,#4,DONE5

MOV SCAN_COUNT5,#0

DONE5:

RET

;闹钟闪烁及模式选择程序

;----------------时钟闪烁模式选择程序----------------------------

FLASH3:

JNB FLASH_FLAG,F31 ;若标志位位为0,显示闪烁程序,否则显示正常模式

;LCALL LIGHT_OFF

LJMP FLASH3

F31: MOV A,MODE

CJNE A,#8,F32

LJMP H_F_CLOCK;模式8,校准小时

F32: ;CJNE A,#0,F34;模式为0,则返回?

LJMP M_F_CLOCK;模式9,校准分钟

F34: RET ;

;----------------闪烁程序--------------------------

H_F_CLOCK:

MOV DPTR,#LED_SCAN_TABLE_CLOCK_1

RET

M_F_CLOCK:

MOV DPTR,#LED_SCAN_TABLE_CLOCK_2

RET

;闹钟BCD转码程序

;-----------------------为闹钟做BCD转码----------------

CONVERT_BCD3:

;第一个数码管

MOV R3,H_MEM_CLOCK

MOV R2,#0

LCALL BTID

MOV A,R6

ANL A,#0FH ;保留低四位

LKH 1/21/2015 17

基于单片机的数字电子钟

MOV DPTR,#LED_CODE

MOVC A,@A+DPTR

MOV LED1_CLOCK_HOUR,A

;第二个数码管

MOV A,R6

ANL A,#0F0H ;保留高四位

SWAP A

MOV DPTR,#LED_CODE

MOVC A,@A+DPTR

MOV LED2_CLOCK_HOUR,A

;第三个数码管

MOV R3,M_MEM_CLOCK

MOV R2,#0

LCALL BTID

MOV A,R6

ANL A,#0FH

MOV DPTR,#LED_CODE

MOVC A,@A+DPTR

MOV LED1_CLOCK_MIN,A

;第四个数码管

MOV A,R6

ANL A,#0F0H

SWAP A

;MOV DPTR,#LED_CODE

MOVC A,@A+DPTR

MOV LED2_CLOCK_MIN,A

RET

;检测闹钟程序

;----------------------检测是否到达闹钟时间---------------------------------

CHECK_TIME:

MOV A,H_MEM_CLOCK

CJNE A,H_MEM,OVER2

CHECK_NEXT:

MOV A,M_MEM_CLOCK

CJNE A,M_MEM,OVER2

MOV A,S_MEM;为了防止整一分钟都会叫,只在一秒的时候判断一次

CJNE A,#0,OVER2

LCALL CLOCK_SOUND

RET

OVER2:

RET

; 显示时分秒程序

;时分秒显示程序

LKH 1/21/2015 18

基于单片机的数字电子钟

;------------------------显示时分秒程序--------------------------------------

DISPLAY1:

MOV P0,#11111111B

SETB P2.7

NOP

NOP

;MOV P0,#0FFH

CPL P2.7

MOV A,SCAN_COUNT ;之前定义过:SCAN_COUNT EQU 7BH

ADD A,ACC

MOV DPTR,#LED_SCAN_TABLE

MOVC A,@A+DPTR

SETB P2.7 ;位锁存

MOV P0,A

CLR P2.7

MOV A,SCAN_COUNT

ADD A,ACC

INC A

MOVC A,@A+DPTR

MOV R0,A

MOV A,@R0

MOV R0,SCAN_COUNT

DOT: CJNE R0,#2,NOACT1

ACT: SETB P2.6

ORL A,#80H

MOV P0,A

SETB P0.7 ;调试用

CLR P2.6

SJMP GO_ON

NOACT1: CJNE R0,#4,NOACT2

SJMP ACT

NOACT2: SETB P2.6

MOV P0,A

CLR P2.6 ;DB

3FH,06H,5BH,04FH,66H,6DH,7DH,07H

;DB

7FH,6FH,77H,7CH,39H,5EH,79H,71H,0FFH

GO_ON: INC SCAN_COUNT

MOV A,SCAN_COUNT

CJNE A,#6,DONE

LKH 1/21/2015 19

基于单片机的数字电子钟

MOV SCAN_COUNT,#0

DONE:

RET

;时分秒BCD程序

;-----------------------------------------------------

CONVERT_BCD1:

;第一个数码管

MOV R3,S_MEM

MOV R2,#0

LCALL BTID

MOV A,R6

ANL A,#0FH ;保留低四位 MOV DPTR,#LED_CODE MOVC A,@A+DPTR

MOV LED1,A

;第二个数码管

MOV A,R6

ANL A,#0F0H ;保留高四位 SWAP A

MOV DPTR,#LED_CODE MOVC A,@A+DPTR

MOV LED2,A

;第三个数码管

MOV R3,M_MEM

MOV R2,#0

LCALL BTID

MOV A,R6

ANL A,#0FH

MOV DPTR,#LED_CODE MOVC A,@A+DPTR

MOV LED3,A

;第四个数码管

MOV A,R6

ANL A,#0F0H

SWAP A

;MOV DPTR,#LED_CODE MOVC A,@A+DPTR

MOV LED4,A

;第五个数码管

MOV R3,H_MEM

MOV R2,#0

LCALL BTID

LKH 1/21/2015 20

基于单片机的数字电子钟

MOV A,R6

ANL A,#0FH

MOV DPTR,#LED_CODE

MOVC A,@A+DPTR

MOV LED5,A

;第六个数码管

MOV A,R6

ANL A,#0F0H

SWAP A

MOVC A,@A+DPTR

MOV LED6,A

RET

;二翻十程序

;------------------二翻十程序----------------------------

BTID:

CLR A

MOV R4,A

MOV R5,A

MOV R6,A

MOV R7,#16

IBTL:

CLR C

MOV A,R3

RLC A ;带进位循环左移,与LC指令的区别? MOV R3,A

MOV A,R2

RLC A

MOV R2,A

MOV A,R6

ADDC A,R6

DA A ;DA:十进制调整指令,将二进制结果 ;调整为十进制数

MOV R6,A

MOV A,R5

ADDC A,R5

DA A

MOV R5,A

MOV A,R4

ADDC A,R4 ;在进行A+R4前,A的值是多少 DA A

LKH 1/21/2015 21

基于单片机的数字电子钟

MOV R4,A

DJNZ R7,IBTL ;减1为1跳转

RET

; 显示年月日的程序

;年月日显示程序

;-----------------显示年月日的程序-----------------

DISPLAY2:

MOV P0,#11111111B

SETB P2.7

NOP

NOP

;MOV P0,#0FFH

CPL P2.7

MOV A,SCAN_COUNT2 ;之前定义过:SCAN_COUNT EQU 7BH

ADD A,ACC

MOV DPTR,#LED_SCAN_TABLE2

MOVC A,@A+DPTR

SETB P2.7 ;位锁存

MOV P0,A

CLR P2.7

MOV A,SCAN_COUNT2

ADD A,ACC

INC A

MOVC A,@A+DPTR

MOV R0,A

MOV A,@R0

SETB P2.6

MOV P0,A

;LCALL DELAY_1S

CLR P2.6

INC SCAN_COUNT2

MOV A,SCAN_COUNT2

CJNE A,#8,DONE2

MOV SCAN_COUNT2,#0

DONE2:

RET

;年月日BCD转码程序

;--------------------------启用第二段转码程序------------------------

LKH 1/21/2015 22

基于单片机的数字电子钟

CONVERT_BCD2:

;第1_2个数码管

MOV R3,D_MEM

MOV R2,#0

LCALL BTID

MOV A,R6

ANL A,#0FH ;保留低四位 MOV DPTR,#LED_CODE

MOVC A,@A+DPTR

MOV LED1_2,A

;第2_2个数码管

MOV A,R6

ANL A,#0F0H ;保留高四位 SWAP A

MOV DPTR,#LED_CODE

MOVC A,@A+DPTR

MOV LED2_2,A

;第3_2个数码管

MOV R3,MON_MEM

MOV R2,#0

LCALL BTID

MOV A,R6

ANL A,#0FH

MOV DPTR,#LED_CODE

MOVC A,@A+DPTR

JNB FLASH_FLAG,MODE0_BCD1 到MODE0_BCD1

SETB ACC.7

MODE0_BCD1:

MOV LED3_2,A

;第4_2个数码管

MOV A,R6

ANL A,#0F0H

SWAP A

MOVC A,@A+DPTR

MOV LED4_2,A

;第5_2个数码管

MOV R3,Y_MEM_1

MOV R2,#0

LCALL BTID

MOV A,R6

ANL A,#0FH

MOV DPTR,#LED_CODE

LKH 1/21/2015 ;FLASH_FLAG为0跳23

基于单片机的数字电子钟

MOVC A,@A+DPTR

JNB FLASH_FLAG,MODE0_BCD2 ;FLASH_FLAG为0跳到MODE0_BCD1

SETB ACC.7

MODE0_BCD2:

MOV LED5_2,A

;第6_2个数码管

MOV A,R6

ANL A,#0F0H

SWAP A

MOVC A,@A+DPTR

MOV LED6_2,A

;第7_2个数码管

MOV R3,Y_MEM_2

MOV R2,#0

LCALL BTID

MOV A,R6

ANL A,#0FH

MOV DPTR,#LED_CODE

MOVC A,@A+DPTR

MOV LED7_2,A

;第8_2个数码管

MOV A,R6

ANL A,#0F0H

SWAP A

MOVC A,@A+DPTR

MOV LED8_2,A

RET

;显示时分秒校准程序

;时分秒校准显示程序

;-------------------第三个display函数,专门校准闪烁时用,节省内存------- DISPLAY1_2:

MOV P0,#11111111B

SETB P2.7

NOP

NOP

CPL P2.7

MOV A,SCAN_COUNT3 ;之前定义过:SCAN_COUNT EQU 7BH

ADD A,ACC

MOV R1,A

LCALL FLASH1 ;在flash函数中选择调用哪个表 ;MOV DPTR,#LED_SCAN_TABLE

MOV A,R1

LKH 1/21/2015 24

基于单片机的数字电子钟

MOVC A,@A+DPTR

SETB P2.7 ;位锁存

MOV P0,A

CLR P2.7

MOV A,SCAN_COUNT3

ADD A,ACC

INC A

MOVC A,@A+DPTR

MOV R0,A

MOV A,@R0

SETB P2.6

MOV P0,A

;LCALL DELAY_1S ;调试用

CLR P2.6 ;DB

3FH,06H,5BH,04FH,66H,6DH,7DH,07H

;DB

7FH,6FH,77H,7CH,39H,5EH,79H,71H,0FFH

INC SCAN_COUNT3

MOV A,SCAN_COUNT3

CJNE A,#2,DONE3

MOV SCAN_COUNT3,#0

DONE3:

RET

;时分秒闪烁模式选择程序

;-----------判断闪烁模式--------------------------------------

;----------------时分秒闪烁模式选择程序----------------------------

FLASH1:

JNB FLASH_FLAG,F1 ;若标志位位为0,显示闪烁程序,否则显示正常模式

;LCALL LIGHT_OFF

SJMP FLASH1

F1: MOV A,MODE

CJNE A,#1,F2

LJMP H_F;模式1,校准小时

F2:

CJNE A,#2,F7

LJMP M_F;模式2,校准分钟

F7: CJNE A,#3,F8;如果不等于3,也应该正常显示

LJMP S_F ;模式3,校准秒数

F8: CJNE A,#0,F10;如果变回模式0

LKH 1/21/2015 25

基于单片机的数字电子钟

RET

F10:; SJMP FLASH1

RET

;----------------闪烁程序--------------------------

H_F:

MOV DPTR,#LED_SCAN_TABLE_1

RET

M_F:

MOV DPTR,#LED_SCAN_TABLE_2

RET

S_F:

MOV DPTR,#LED_SCAN_TABLE_3

RET

;年月日校准程序

;年月日校准显示程序

;-------------------第四个display函数,专门校准闪烁时用(年月日),节省内存------- DISPLAY2_2:

MOV P0,#11111111B

SETB P2.7

NOP

NOP

;MOV P0,#0FFH

CPL P2.7

MOV A,SCAN_COUNT4 ;之前定义过:SCAN_COUNT EQU 7BH

ADD A,ACC

MOV R1,A

LCALL FLASH2 ;在flash函数中选择调用哪个表 ;MOV DPTR,#LED_SCAN_TABLE

MOV A,R1

MOVC A,@A+DPTR

SETB P2.7 ;位锁存

MOV P0,A

CLR P2.7

MOV A,SCAN_COUNT4

ADD A,ACC

INC A

MOVC A,@A+DPTR

MOV R0,A

MOV A,@R0

SETB P2.6

MOV P0,A

LKH 1/21/2015 26

基于单片机的数字电子钟

;LCALL DELAY_1S ;调试用

CLR P2.6 ;DB

3FH,06H,5BH,04FH,66H,6DH,7DH,07H

;DB

7FH,6FH,77H,7CH,39H,5EH,79H,71H,0FFH

INC SCAN_COUNT4

MOV A,SCAN_COUNT4

CJNE A,#2,DONE4

MOV SCAN_COUNT4,#0

DONE4:

RET

; 年月日闪烁模式选择程序

;----------------年月日闪烁模式选择程序----------------------------

FLASH2:

JNB FLASH_FLAG,F3 ;若标志位位为0,显示闪烁程序,否则显示正常模式

SJMP FLASH2

F3: MOV A,MODE

;CJNE A,#1,F12

;CJNE A,#2,F12

;CJNE A,#3,F12

CJNE A,#4,F4;模式4,校准 天数

LJMP D_F

F4:

CJNE A,#5,F5;模式5,校准 月份

LJMP MON_F

F5:

CJNE A,#6,F6;模式6,校准 低位年

LJMP Y_F1

F6: CJNE A,#7,F9

LJMP Y_F2 ;模式7,校准 高位年

F9: CJNE A,#0,F11;如果变回模式0,返回

RET

F11:; SJMP FLASH2

RET

;----------------闪烁程序--------------------------

D_F:

MOV DPTR,#LED_SCAN_TABLE21

RET

MON_F:

MOV DPTR,#LED_SCAN_TABLE22

LKH 1/21/2015 27

基于单片机的数字电子钟

RET

Y_F1:

MOV DPTR,#LED_SCAN_TABLE23

RET

Y_F2:

MOV DPTR,#LED_SCAN_TABLE24

RET

;按键检测程序

;检测是否按下程序

;----------------------按键程序2----------------------------

KEY_SCAN:

LCALL NOKEY_1;

LCALL NOKEY_2;

LCALL NOKEY_3;

NOKEY_1:

MOV C,P3.4

CPL C

JNC GATE1;CY为0跳转

MOV C,P3.4

MOV TEMP4,C

LCALL DELAY_10MS

MOV C,P3.4

ORL C,TEMP4

JNC K1;确定按下跳转

GATE1: RET

NOKEY_2:

MOV C,P3.5

CPL C

JNC GATE2;CY为0跳转

MOV C,P3.5

MOV TEMP4,C

LCALL DELAY_10MS

MOV C,P3.5

ORL C,TEMP4

JNC K2

GATE2: RET

;JNB P3.4,K1 ;为0跳转,按键按下为0 ;JNB P3.5,K2

;JNB P3.6,K3

; RET

LKH 1/21/2015 28

基于单片机的数字电子钟

; JNB P3.7,K4

;MODE键检测程序

;-----------------模式选择程序--------------------------

K1:

LCALL SOUND

INC MODE

MOV A,MODE

CJNE A,#10,K11

MOV MODE,#0

K11: JNB P3.4,$

RET

;up键检测程序

;--------------UP键的程序--------------------------

K2:

LCALL SOUND

MOV A,MODE

CJNE A,#0,K21;模式0,无操作

RET

K21:

CJNE A,#1,K22

LJMP H_INC;模式1,校准小时

K22:

CJNE A,#2,K27

LJMP M_INC;模式2,校准分钟

K27:

CJNE A,#3,K23 ;模式3,校准秒数

LJMP S_INC

K23:

CJNE A,#4,K24;模式4,校准 天数 LJMP D_INC

K24:

CJNE A,#5,K25;模式5,校准 月份

LJMP MON_INC

K25:

CJNE A,#6,K26;模式6,校准 低位年 LJMP Y_INC_1

K26: CJNE A,#7,K28

LJMP Y_INC_2 ;模式7,校准 高位年 K28:

CJNE A,#8,K29

LJMP H_CLOCK;模式8,闹钟时的时钟调整K29:

LJMP M_CLOCK;模式9,闹钟分钟位调整

LKH 1/21/2015 29

基于单片机的数字电子钟

H_CLOCK:

INC MOV CJNE MOV H_CLOCK1: JNB RET

M_CLOCK:

INC MOV CJNE MOV M_CLOCK1: JNB RET

H_INC:

INC MOV CJNE MOV H_INC1: JNB RET

M_INC:

INC MOV CJNE MOV M_INC1: JNB RET

S_INC:

INC MOV CJNE MOV S_INC1: JNB RET

Y_INC_1:

INC

LKH H_MEM_CLOCK A,H_MEM_CLOCK A,#24,H_CLOCK1 H_MEM_CLOCK,#0 P3.5,$;检测up键是否按下 M_MEM_CLOCK A,M_MEM_CLOCK A,#60,M_CLOCK1 M_MEM_CLOCK,#0 P3.5,$;检测up键是否按下 H_MEM A,H_MEM A,#24,H_INC1 H_MEM,#0 P3.5,$;检测up键是否按下M_MEM A,M_MEM A,#60,M_INC1 M_MEM,#0 P3.5,$;检测up键是否按下S_MEM A,S_MEM A,#60,S_INC1 H_MEM,#0 P3.5,$;检测up键是否按下Y_MEM_1 1/21/2015 30

基于单片机的数字电子钟

MOV A,Y_MEM_1

CJNE A,#100,Y_INC1

MOV Y_MEM_1,#0

Y_INC1: JNB P3.5,$;检测up键是否按下

RET

Y_INC_2:

INC Y_MEM_2

MOV A,Y_MEM_2

CJNE A,#100,Y_INC2

MOV Y_MEM_2,#0

Y_INC2: JNB P3.5,$;检测up键是否按下

RET

MON_INC:

INC MON_MEM

MOV A,MON_MEM

CJNE A,#13,MON_INC1

MOV MON_MEM,#1

MON_INC1: JNB P3.5,$;检测up键是否按下 RET

D_INC:

INC D_MEM

MOV A,D_MEM

CJNE A,#32,D_INC1

MOV D_MEM,#1 D_INC1: JNB P3.5,$;检测up键是否按下

RET

;----------------------OUT OF RANGE问题,K3键判断程序----------- NOKEY_3:

MOV C,P3.6

CPL C

JNC GATE3;CY为0跳转

MOV C,P3.6

MOV TEMP4,C

LCALL DELAY_10MS

MOV C,P3.6

ORL C,TEMP4

JNC K3

GATE3: RET

;done键检测程序

;----------------DONE键的程序-------------------------------

LKH 1/21/2015 31

基于单片机的数字电子钟

K3:

LCALL

MOV SOUND A,MODE CJNE

RET

K31:

CJNE

LJMP

K32:

CJNE

LJMP

K37:

CJNE

LJMP

K33:

CJNE

LJMP

K34:

CJNE

LJMP

K35:

CJNE

LJMP

K36:

CJNE

LJMP

K38:

CJNE

LJMP

K39:

LJMP

H_CLOCK_DEC:

DEC

MOV

CJNE

MOV

H_CLOCK1_DEC:

JNB

RET

M_CLOCK_DEC:

DEC

MOV

LKH A,#0,K31;模式0,无操作 A,#1,K32 H_DEC;模式2,校准小时 A,#2,K37 M_DEC;模式3,校准分钟 A,#3,K33 ;模式3,校准秒数 S_DEC A,#4,K34;模式4,校准高位年 D_DEC A,#5,K35;模式5,校准低位年 MON_DEC A,#6,K36;模式6,校准月份 Y_DEC_1 A,#7,K38 Y_DEC_2 ;模式7,校准天数 A,#8,K39 H_CLOCK_DEC;模式8,调整闹钟小时数 M_CLOCK_DEC;模式9,调整闹钟分钟数 H_MEM_CLOCK A,H_MEM_CLOCK A,#0FFH,H_CLOCK1_DEC H_MEM_CLOCK,#23 P3.6,$;检测up键是否按下 M_MEM_CLOCK A,M_MEM_CLOCK 1/21/2015 32

基于单片机的数字电子钟

CJNE MOV

M_CLOCK1_DEC: A,#0FFH,M_CLOCK1_DEC M_MEM_CLOCK,#59 JNB RET

H_DEC:

DEC MOV CJNE MOV H_DEC1: JNB RET

M_DEC:

DEC MOV CJNE MOV M_DEC1: JNB RET

S_DEC:

DEC MOV CJNE MOV S_DEC1: JNB RET

Y_DEC_1:

DEC MOV CJNE MOV Y_DEC1: JNB RET

Y_DEC_2:

DEC MOV CJNE MOV

LKH P3.6,$;检测up键是否按下 H_MEM A,H_MEM A,#0FFH,H_DEC1 H_MEM,#23 P3.6,$;检测up键是否按下 M_MEM A,M_MEM A,#0FFH,M_DEC1 M_MEM,#59 P3.6,$;检测DONE键是否按下 S_MEM A,S_MEM A,#0FFH,S_DEC1 S_MEM,#59 P3.6,$;检测up键是否按下 Y_MEM_1 A,Y_MEM_1 A,#0FFH,Y_DEC1 Y_MEM_1,#99 P3.6,$;检测DONE键是否按下 Y_MEM_2 A,Y_MEM_2 A,#0FFH,Y_DEC2 Y_MEM_2,#99 1/21/2015 33

基于单片机的数字电子钟

Y_DEC2: JNB P3.6,$;检测up键是否按下

RET

MON_DEC:

DEC MON_MEM

MOV A,MON_MEM

CJNE A,#0,MON_DEC1

MOV MON_MEM,#12

MON_DEC1: JNB P3.6,$;检测DONE键是否按下

RET

D_DEC:

DEC D_MEM

MOV A,D_MEM

CJNE A,#0,D_DEC1

MOV D_MEM,#31

D_DEC1: JNB P3.6,$;检测DONE键是否按下

RET

;-------------------------闹钟程序---------------------------------

;检测key按下的次数,根据不同的次数设置不同的模式

;模式8 调用第五个display函数,闪烁小时位,并记录调整的时间,再次调整到模式0

;模式9 调用第五个display函数,根据表的不同,闪烁分钟位,并记录此时的分钟数

;时间检测程序: 在主函数调用检测函数,到达指定时间,调用闹钟声音程序

;功能小程序

;软件延时程序

;----------------------软件延时程序------------------------

DELAY_10MS:

SETB RS0;选工作区1

MOV R1,#10

DELAY_1MS:

MOV R2,#249

DL: NOP

NOP

DJNZ R2,DL

DJNZ R1,DELAY_1MS

RET

;------------------------------------------------------------------

DELAY_100MS:

SETB RS1

MOV R6,#64H

LKH 1/21/2015 34

基于单片机的数字电子钟

D22:

MOV R5,#0F9H

D21:

DJNZ R5,D21

DJNZ R6,D22

RET

;----------------------------------------------------------------------- DELAY_1S:

SETB RS1

MOV R4,#0AH

D20: DJNZ R4,D19

D19: LCALL DELAY_100MS

CJNE R4,#0,D20

RET

;-------------------------------------------------------------------------- DELAY_500MS:

SETB RS1

MOV R3,#5

D17: DJNZ R3,D18

D18: LCALL DELAY_100MS

CJNE R3,#0,D17

RET

;清内存程序

;----------------------清内存------------------------------

CLR_MEM:

MOV R0,#40H

CLR_MEM1:

MOV @R0,#0

INC R0

CJNE R0,#80H,CLR_MEM1

RET

; 按键声程序

;-----------按键声音--------------------------------

SOUND:

SETB P1.4

LCALL DELAY_500MS

CLR P1.4

RET

; 闹钟声程序

;------------闹钟声音-------------------------------

CLOCK_SOUND:

MOV R0,#10

AGAIN:LCALL CLOCK1_SOUND

DJNZ R0,AGAIN

LKH 1/21/2015 35

基于单片机的数字电子钟

RET

CLOCK1_SOUND:

LCALL DELAY_500MS

LCALL SOUND

RET

; 字形码表

;---------字形码表------------------------------------------

LED_CODE:

DB 3FH,06H,5BH,04FH,66H,6DH,7DH,07H,7FH,6FH ;DB 7FH,6FH;,77H,7CH,39H,5EH,79H,71H,0H //17个?

LED_SCAN_TABLE:

DB 01111111B,LED1

DB 10111111B,LED2

DB 11011111B,LED3

DB 11101111B,LED4

DB 11110111B,LED5

DB 11111011B,LED6

LED_SCAN_TABLE_1: ;小时

DB 11110111B,LED5

DB 11111011B,LED6

LED_SCAN_TABLE_2: ;分钟

DB 11011111B,LED3

DB 11101111B,LED4

LED_SCAN_TABLE_3: ;秒

DB 01111111B,LED1

DB 10111111B,LED2

LED_SCAN_TABLE2:

DB 01111111B,LED1_2

DB 10111111B,LED2_2

DB 11011111B,LED3_2

DB 11101111B,LED4_2

DB 11110111B,LED5_2

DB 11111011B,LED6_2

DB 11111101B,LED7_2

DB 11111110B,LED8_2

LED_SCAN_TABLE21: ;日

DB 01111111B,LED1_2

LKH 1/21/2015 36

基于单片机的数字电子钟

DB 10111111B,LED2_2

LED_SCAN_TABLE22: ;月

DB 11011111B,LED3_2

DB 11101111B,LED4_2

LED_SCAN_TABLE23: ;年低位

DB 11110111B,LED5_2

DB 11111011B,LED6_2

LED_SCAN_TABLE24: ;年高位

DB 11111101B,LED7_2

DB 11111110B,LED8_2

LED_SCAN_TABLE_CLOCK_1: ;时钟

DB 11110111B,LED1_CLOCK_HOUR

DB 11111011B,LED2_CLOCK_HOUR

DB 11011111B,LED1_CLOCK_MIN

DB 11101111B,LED2_CLOCK_MIN

LED_SCAN_TABLE_CLOCK_2:

DB 11110111B,LED1_CLOCK_HOUR

DB 11111011B,LED2_CLOCK_HOUR

DB 11011111B,LED1_CLOCK_MIN

DB 11101111B,LED2_CLOCK_MIN

END

六、 设计或调试过程中碰到的问题及

1. 存储错乱

——例如在校准时分秒的程序中,我第一次编程时写的代码如下:

MOV P0,#11111111B

SETB P2.7

NOP

NOP

CPL P2.7

MOV A,SCAN_COUNT3

ADD A,ACC

LCALL FLASH1 ;在flash函数中选择调用哪个表 ;MOV DPTR,#LED_SCAN_TABLE

MOVC A,@A+DPTR

SETB P2.7 ;位锁存

MOV P0,A

CLR P2.7

LKH 1/21/2015 37

基于单片机的数字电子钟

FLASH1:

JNB FLASH_FLAG,F1 ;若标志位位为0,显示闪烁程序,否则显示正常模式

;LCALL LIGHT_OFF

SJMP FLASH1

F1: MOV A,MODE

CJNE A,#1,F2

LJMP H_F;模式1,校准小时

F2:

CJNE A,#2,F7

LJMP M_F;模式2,校准分钟

F7: CJNE A,#3,F8;如果不等于3,也应该正常显示

LJMP S_F ;模式3,校准秒数

F8: CJNE A,#0,F10;如果变回模式0

RET

F10:; SJMP FLASH1

RET

在执行程序,并不能得到想要的效果:单独时钟位(或分钟位、秒位)闪烁,相反程序会停滞,仅在一个数码管中显示数字零。

我研究了很久,终于发现,当display函数执行到“LCALL FLASH1”的时候,它跳转到FLASH1程序中执行,执行完FLASH1程序后A的值已经变化了,因为在FLASH1程序中,因为要对MODE进行判断,”MOV A,MODE”。而执行完FLASH1程序,返回原来的地方继续执行时,会把此中的A值进行变址寻址“MOVC A, @DPTR+A”,这样寻找到的数值就是错误的。

解决方法很简单,只需要在执行FLASH1程序之前,把A值存储在一个工作寄存器中,在执行完FLASH1程序的时候,再把之前存储的值取出来,这样就可以找到正确的数值了。

2. 工作区的选择

在CONVERT_BCD中的BTID中,把工作区0的工作寄存器几乎都用完了,所以,如果你在其他地方还需要工作寄存器存储数据,就要调用其他工作区的工作寄存器,控制的方法就是设置RS0和RS1的值,要确保存储的位置不冲突,才能保证程序无误。

3. 闹钟响的时间

CHECK_TIME:

MOV A,H_MEM_CLOCK

CJNE A,H_MEM,OVER2

CHECK_NEXT:

MOV A,M_MEM_CLOCK

CJNE A,M_MEM,OVER2

LCALL CLOCK_SOUND

RET

OVER2:

LKH 1/21/2015 38

基于单片机的数字电子钟

RET

上面的程序是我第一次编写闹钟的程序,烧到单片机调试的时候发现,它一上机就会叫。想了想,发现原因有两个。第一,闹钟的小时和分钟的默认值为0,也就是说默认00:00是闹钟时间,一到这个时间就会触发闹钟声音程序,而且在整个第一分钟,都满足0时0分的条件,所以闹钟第一分钟都会响。解决方法有两个步骤。第一,给闹钟赋初值“MOV H_MEM_CLOCK,#12”,这样这个电子钟到了12:00(正午)的时候会自动出发闹钟声响,而且加上“

MOV A,S_MEM

CJNE A,#0,OVER2”

这样,只有在设定时间的第一秒才满足条件,闹钟也只会响一次,而不会整一分钟都会鸣叫。

4. 按键紊乱

设计完按键程序第一次调试的时候,发现有时候只按了一下,却相当于

按了很多下,原来是没有设计消抖程序。键盘有时因为按下时会上下抖动,虽然你只按了一下,单片机却检测到多次低电平,所以会产生误差,所以后来我在每个按键检测程序中都设置了消抖程序:

NOKEY_1:

MOV C,P3.4

CPL C

JNC GATE1;CY为0跳转

MOV C,P3.4

MOV TEMP4,C

LCALL DELAY_10MS

MOV C,P3.4

ORL C,TEMP4

JNC K1;确定按下跳转

GATE1: RET

可以知道,在上述程序中,对按键进行了两次判断,第一次判断时,将

按键电平存储在一个寄存器中,延时100MS,再将此时的按键电平与寄存器中存储的电平进行比较,如果相等,则说明这个键按下无误,可以执行按键按下相对应的程序,如果没有按下,则返回继续检测。通过延时后再一次经行比较,可以提高按键检测的正确率。

七、 测试数据,误差分析,补偿方法,补偿前后精度比较

a) 未考虑月份不同天数

本人在设计程序的时候统一设定天数为21天,未考虑月份不同带来的天数不同问题。需要手动进行调节。

b) 中断服务程序造成的时间延迟

中断服务程序每100MS会执行一次,中断后继续赋初值、判断是否到1s,更新M_MEM、S_MEM、H_MEM等数据,做完这些步骤后才出栈执行下一次计时,其中会有时间延迟,所以渐渐地时间会不准确,会偏慢。也需LKH 1/21/2015 39

基于单片机的数字电子钟

要手动进行调节。

八、 收获及意见

1. 通过这次单片机课程设计,真的学到很多,以前用的不灵活的SJMP、

CJNZ等指令,还有经常搞不懂的JC、JB、JNB等指令,都因为用的多,所以印象深刻,还有display程序、BCD程序、按键程序(消抖、检测等)、中断程序等都因为课程设计的缘故被我研究了很多遍,最后预期效果得以呈现的时候内心自然是很开心的。实践出真知和熟能生巧这个2.

3.

九、

LKH 真理是不会过时的。 通过这个课程设计还回顾了CAD画图,通过软件硬件的学习,我对单片机的工作原理,内部结构,存储器的概念理解得更加深刻。同时我知道,光是这个电子钟都还有很多值得改进和完善的。很期待可以用单片机做出更多的东西,也很希望能够掌握更多的单片机知识。 意见。我希望在理论课的时候老师也能从简单到复杂布置一些任务给我们做,让我们逐步掌握各个指令的用法和编程序的格式。可以通过板书实际程序,从中讲解单片机的内部结构、指令系统,这样应该上手更快。很感谢老师,在我学单片机和做这个课程设计的过程中耐心地回答了我很多问题,很感激! 1/21/2015 40

更多相关推荐:
单片机课程设计总结

单片机课程设计心得体会这个学期的单片机课已经早早的上完了但是理论纯属理论没有与实践的结合总让我们学的不踏实感觉没有达到学以致用的效果所庆幸的是在课程介绍考试完之后老师给我们安排了这次单片机课程设计给了我们学以致...

单片机课程设计及个人心得感受

本科课程设计(论文)单片机控制流水灯的正常工作及外部中断控制灯的亮灭学院名称:汽车与交通工程学院专业:汽车服务工程班级:13汽服B学号:*************姓名:*******指导教师姓名:***二〇**…

单片机课程设计小结

单片机课程设计小结单片机课程设计小结一做了两周的课程设计有很多的gt心得体会有关于单片机方面的更多的是关于人与人之间关系方面的我们组一共有三个人但其他两个人是真的神龙见首不见尾除了在最后答辩的时候他们一起坐在了...

20xx单片机课程设计心得体会

20xx单片机课程设计心得体会单片机课程设计心得体会课程设计是大学课堂中常见的课堂模式该模式更好的培养学生的综合能力课程模式主要由选题到定稿从理论到实践组成以下由第一公文网整理关于单片机课程设计的心得单片机课程...

单片机课程设计总结

单片机基础知识单片机的外部结构:1、DIP40双列直插;2、P0,P1,P2,P3四个8位准双向I/O引脚;(作为I/O输入时,要先输出高电平)3、电源VCC(PIN40)和地线GND(PIN20);4、高电平…

单片机课程设计

信息与电气工程学院课程设计说明书20xx20xx学年第2学期课程名称单片机应用课程设计题目简易数字计数器设计专业班级自动化1101学生姓名学号110410指导教师设计周数2周设计成绩20xx年7月10日单片机课...

单片机课程设计报告

JINGCHUUNIVERSITYOFTECHNOLOGY电子信息工程学院单片机原理与应用技术课程设计报告电子秒表系统专业班级11电气三班姓名学号指导教师邓鹏提交日期20xx年6月目录一前言311课程设计的目的...

单片机课程设计报告范例

单片机课程设计示例交通灯控制系统设计一总体设计1设计要求交通灯的任务要求为模拟十字路口的交通灯的亮灭及闪烁基本工作原理根据交通灯的亮灭情况可以分为四种状态利用定时计数器每20秒产生一次中断每产生一次中断后由是否...

单片机课程设计报告

课程设计报告课程名称嵌入式系统原理与设计课题名称电子琴专业通信工程班级通信1001班学号姓名指导教师20##年1月6日湖南工程学院课程设计任务书课程名称嵌入式系统原理与设计课题电子琴专业班级通信工程1001学生…

单片机课程设计报告

课程设计报告课程名称单片机原理及应用设计题目电子琴的设计专业班级自动化1142姓名学号1104421242指导教师蔡长青张卓起止时间20xx62320xx711成绩评定电气与信息学院20xx20xx学年第二学期...

单片机课程设计报告解程翔

莱芜职业技术学院课程论文目录一引言本课程设计的目的2二八路LED跑马灯实验221设计内容222电路图223上机程序324调试结果及结论4三二位数码管循环显示0099的实验431设计内容432电路图433上机程序...

单片机课程设计报告

单片机原理及应用课程设计报告书题目简易数字电压表的设计姓名汪剑专业电气工程及其自动化设计时间20xx年11月电子与信息工程学院目录1引言111设计意义112系统功能要求12方案设计221功能要求及设计目标122...

单片机课程设计小结(42篇)