资源描述
湖南大学电气与信息工程学院
本科生课程设计
题 目:数字密码锁
课 程: 单片机课程设计
专 业: 电气工程及其自动化
班 级: 电自班
目录
一、 任务及设计要求 - 3 -
二、 系统原理框图 - 3 -
三、 硬件原理图 - 3 -
(一) ADuC848的简要介绍(针对本设计所选择的型号) - 3 -
(二) 单片机引脚分布 - 3 -
(三) 电源模块 - 3 -
(四) 数码管硬件连接 - 3 -
(五) 蜂鸣器和红外发送 - 3 -
(六) 复位与下载 - 3 -
(七) 按键输入 - 3 -
(八) 振荡电路 - 3 -
四、 程序 - 3 -
(一) 主程序 - 3 -
(二) 密码修改流程图 - 3 -
(三) 计时主程序流程图 - 3 -
(四) 计时中断子程序流程图: - 3 -
(五) 蜂鸣器中断子程序流程图 - 3 -
(六) 蜂鸣器控制程序 - 3 -
(七) 键盘扫描程序流程图 - 3 -
(八) 程序清单 - 3 -
五、 使用说明书 - 3 -
(一) 键盘按键分布 - 3 -
(二) 按键功能说明 - 3 -
六、 心得体会 - 3 -
参考文献 - 3 -
一、 任务及设计要求
1)设计一多位电子密码锁,输入密码用“F”表示,输入密码正确,绿灯亮(或显示其它标志、蜂鸣器替代),输入密码错误,红灯亮(或显示其它标志、蜂鸣器替代)
2)具有确定键和取消键,在未确定之前可以取消,重新输入
3)连续输入三次错误密码,红灯闪烁,报警电路动作,键盘锁定
4)具有密码重置、修改功能
5)具有密码输入等待操作时间限制功能,超过限定时间报警
6)显示北京时间,时间可调整
7)可利用蜂鸣器添加提示音
二、 系统原理框图
ADuc848
驱动电路
报警电路
振荡电路
数码管显示
4×4键盘输入
复位电路
时钟模块
三、 硬件原理图
(一) ADuC848的简要介绍(针对本设计所选择的型号)
1、 详细情况请参考芯片手册。
2、 8051-based core、5V供电电压;
3、 可以通过串口在线下载程序和单步、断点、运行到某一行等方式调试程序;
4、 16位8通道Σ-ΔADC,片内有1.25V参考电压、buffer和PGA;
5、 12位电压输出DAC、Dual 16-BIT Σ-ΔDAC;
6、 32kbyte程序存储器、4kbyte用户信息Flash存储器、256RAM+2048XRAM(byte);
7、 PLL(12.58 MHz max)(片外只需接32.768kHz晶振);
8、 3×16位定时/计数器、看门狗定时器;
9、 11中断源(2优先级)、11位堆栈指针;
10、 24I/O+8模拟或数字输入;
11、 UART、SPI和I2C、高速115200波特率发生;
12、 Power supply monitor、上电复位、Dual 200μA激励电流源。
(二) 单片机引脚分布
1. Pin1~4:(P1.0~P1.3)作为矩阵式键盘或独立按键的输入,P1口只能用于输入,默认用于模拟输入,作为数字输入使用时应先往P1口相应引脚写0,这里可以用P0&=0xf0。若P2、P3、P0口要作为输入,则应往相应引脚写1。
2. Pin5、6:AVDD、AGND,模拟电源输入。
3. Pin7、8:外部参考电压接入,Pin7接AGND。片内DAC有2.5V内部参考,ADC有1.25V内部参考。
4. Pin9、10:(P1.4、P1.5)两路AD输入,可做差分输入,需要设置ADC的寄存器。
5. Pin11、12:(P1.6、P1.7)各200uA激励电流源,可配合RTD等做应用。
6. Pin13:两路AD输入做普通输入时的电压参考端,AD输入电压不能低于此引脚电压。
7. Pin14:片内DAC输出。
8. Pin15:复位引脚。
9. Pin16、17:单片机RS232接口的RXD(P3.0)TXD(P3.1)。
10. Pin18:(P3.2)外部中断0,用于红外接收和PS/2接口。
11. Pin19:(P3.3)LCD1602,LCD12864A的EN引脚,控制第一位数码管。
12. Pin20、21:DVDD、DGND数字电源输入。
13. Pin22:(P3.4)PS/2接口的data信号。
14. Pin23:(P3.5)LCD1602和LCD12864A的RW。
15. Pin24:(P3.6)LCD1602和LCD12864A的RS。
16. Pin25:LCD12864A的CS1。
17. Pin26:IIC接口时钟信号。
18. Pin27:IIC接口data信号。
19. Pin28:(P2.0)SPI接口时钟信号。
20. Pin29:(P2.1)SPI接口MOSI信号、控制第6位数码管的位码。
21. Pin30:(P2.2)SPI接口MISO信号、控制第7位数码管的位码。
22. Pin31:(P2.3)SPI接口SS信号、控制第8位数码管的位码;P2.0~3也作为4X4矩阵式键盘的扫描输出信号、步进电机的控制信号、数码管第数码管第6、7、8位位码。但是SPI、4X4矩阵式键盘、步进电机、数码管第6、7、8位功能不能同时实现。
23. Pin32、Pin33:接外部32.768KHz晶振。
24. Pin34、Pin35:DVDD、DGND。
25. Pin36:(P2.4)LCD12864A的CS2。
26. Pin37:(P2.5)内部PWM模块输出,控制红外LED。
27. Pin38:(P2.6)内部PWM模块输出,控制蜂鸣器。
28. Pin39:(P2.7)内部PWM模块的外部时钟输入(也可以用内部时钟)。
29. Pin40:EA,低电平有效,正常使用时拉低。
30. Pin41:PSEN,在此引脚电平为低时按复位键进入debug模式,可以下载和调试程序。
31. Pin42:ALE。
32. Pin47、Pin48:DGND、DVDD。
33. Pin43、44、45、46、49、50、51、52:P0口、LCD1602和LCD12864的数据总线,数码管的段码。
(三) 电源模块
本学习板共有如下3种供电方式:
1. 5V电源适配器供电(开关往上拨、插针1下面两脚接跳线帽)。
将开关sw4第2、3脚接通(开关往上拨),电源网络DVDD连接到插针1第2脚的输出,将插针1的第1、2脚(插针1下面两脚)接跳线帽,DVDD直接连接到电源适配器输入端,即为5V电源适配器供电模式。
2. 7~12V电源适配器供电(开关往上拨、插针1上面两脚接跳线帽)
将开关sw4第2、3脚接通(开关往上拨),电源网络DVDD连接到插针1第2脚的输出,将插针1的第2、3脚(插针1上面两脚)接跳线帽,DVDD连接到稳压芯片7805的输出,而7805的输入端连接到电源适配器输入端,即为7~12V的电源适配器经7805给学习板供电的模式。
3. USB供电(开关往下拨)。
将开关sw4第1、2脚接通(开关往下拨),电源网络DVDD连接到USB电源输入端。
对DVDD网络和AVDD网络设了测试点,方便调试。
(四) 数码管硬件连接
关键网络名解释:
1. DS0~7:数码管段码。
2. BIT0~7:数码管位码。
3. MOTORA~D:步进电机驱动信号。
4. DISCTRL0~4:显示控制信号,控制数码管低5位。
5. D0~8:单片机P0口。
本设计采用共阴极数码管,段码由PNP三极管驱动,位码由NPN型三极管驱动。
引脚复用:
数码管低5位(板上为右边5位)的位码由DISCTRL0~4控制,可单独使用,高3位的位码控制信号与SPI信号,电机驱动信号,4X4矩阵式键盘复用,使用数码管高3位时参与复用的其他功能则不能使用。
插针配置:
若要使用数码管第4~0位(板上为右边5位),可以接通插针8,为减少功耗,不用请断开。
若要使用数码管第7~5位(板上为左边3位),可以分别接通插针5~7和9,为减少功耗,不用请断开。
(五) 蜂鸣器和红外发送
本设计中采用无源电磁式蜂鸣器,蜂鸣器由PWM1(P2.6)控制,红外二极管由PWM0(P2.5)控制。PWM1和PWM0均为片内PWM模块的输出。蜂鸣器和红外LED的驱动均采用普通NPN三极管。为方便调试,对该模块中的信号设了测试点,具体位置参见附图1。
插针配置:
若要使用蜂鸣器,可以接通插针3,为减少功耗,不用请断开。
若要使用红外二极管,可以接通插针4,为减少功耗,不用请断开。
(六) 复位与下载
进入下载或调试模式的步骤为:
1. 按住BTN1(down or debug按键)不要放开;
2. 按下BTN2(reset按键),然后放开BTN2(reset按键);
3. 放开BTN1(down or debug按键)。
这样单片机就进入了调试模式,可以下载或调试程序。
(七) 按键输入
由于P1口(用于行扫描)内部无上拉电阻,为使无键按下时行信号为高电平,故将行信号接上拉电阻,电阻大小10K即可。
引脚复用:
P2.0~P2.3为4X4矩阵式键盘列扫描信号,又复用作步进电机控制信号,SPI信号、P2.1~P2.3还复用为数码管第5、6、7位位码控制信号。参与复用的一项功能使用时,其他参与复用的功能则不能使用。
插针配置:
插针10上面两脚接跳线帽,4X4矩阵式键盘输入,行扫描信号为P1.0~P1.3,列扫描信号为P2.0~2.3。
插针10下面两脚接跳线帽,独立按键输入,该模式有4个独立按键可用,按键扫描所用端口为P1.0~P1.3。这4个按键为4X4矩阵键盘的左边4个按键。
(八) 振荡电路
AduC848片内有I2C模块,并有独立的引脚SCLOCK和SDATA。板上的RTC时钟芯片DS1307和EEPROM芯片AT24C08均使用了I2C总线。板上设置了I2C接口,方便MCU与板外的I2C设备进行通信。对SCLOCK和SDATA设置了测试点。
四、 程序
(一) 主程序
开始
密码锁界面
检测命令键
设置时间
S4
显示时间
检测命令键
输入密码
N
密码正确
Y
第一个亮
N
第二个亮
N+1
N=3
报警
Y
N
修改密码
修改密码键
(二) 密码修改流程图
(三) 计时主程序流程图
(四) 计时中断子程序流程图:
(五) 蜂鸣器中断子程序流程图
(六) 蜂鸣器控制程序
(七) 键盘扫描程序流程图
(八) 程序清单
BUF EQU 75H
BUF1 EQU 73H
SBF EQU 72H;存放秒
MBF EQU 71H;存放分
HBF EQU 70H;存放时
ORG 0000H
LJMP START
ORG 0BH ;定时器0中断入口
LJMP CLOCK
ORG 1BH ;定时器1中断入口
LJMP INT_0
ORG 200H
START: MOV R5,#00H
MOV A,#00H
MOV 60H,A ;清楚计时模式所有显示单元
MOV 61H,A
MOV 62H,A
MOV 63H,A
MOV 64H,A
MOV 65H,A
MOV 66H,A
MOV 67H,A
MOV 68H,A
MOV 69H,A
ANL TMOD,#0F0H ;设置TMOD
ORL TMOD,#01H
MOV TL0,#00H ;TI装初值
MOV TH0,#40H
MOV BUF1,#00H ;清零
MOV SBF,#00H
MOV MBF,#00H
MOV HBF,#00H
MOV 58H,#01H ;置闹钟小时初值
MOV 59H,#00H ;置闹钟分初值
SETB ET0 ;开定时器0
SETB EA ;开总中断
SETB TR0 ;启动T0
MOV 74H,#00H ;判断模式
MOV 39H,#00H ;密码输入是否正确
MOV 38H,#00H ;是否按下reset键
MOV 29H,#00H ;是否显示闹钟时间
START1:
MOV A,#06H ;初始化密码
MOV 35H,A
MOV A,#05H
MOV 34H,A
MOV A,#04H
MOV 33H,A
MOV A,#03H
MOV 32H,A
MOV A,#02H
MOV 31H,A
MOV A,#01H
MOV 30H,A
MAIN: MOV BUF,#10H ;密码输入缓存
MOV 76H,#00H ;音乐播放次数
MOV 37H,#00H ;记录输入数字的个数
MOV 36H,#06H
MOV R0,#40H ;清输入密码存储单元
CLEAR:MOV @R0,#00H
INC R0
DJNZ 36H,CLEAR
LCALL DS1 ;调用显示子程序
MAIN1:
LCALL KEY ;调用键盘扫描程序
JMP MAIN1
KEY: MOV P2,#0E0H ;全扫描,各列线都送低电平
MOV P1,#00H
MOV A,P1 ;读回各行线电平值
ORL A,#0F0H ;只读低四位
CPL A ;所读值置反
JNZ IN ;不是全0说明有键按下
RET ;无键按下返回
IN: ACALL DELAY1 ;调延时,等待按合抖动过去
MOV R2,#04H ;R2做计数器,存待扫描行数
MOV R4,#7FH ;R4做指针,指示待扫描行数
MOV R7,#00H ;R7用于决定键号,初值置以0
SCAN: MOV A,R4
RL A
MOV R4,A ;以上三条调整待扫描行
MOV P2,A ;逐行扫描,被扫描行送低电平
MOV P1,#00H
MOV A,P1 ;读回各列线电平值
MOV R3,#04H ;R3做记数器,存被扫描行的待查列数
NEXT: RRC A ;调整待查列
JNC FIND ;被查列为低电平,被按键找到,转FIND
INC R7 ;未找到,键号加一
DJNZ R3,NEXT ;被扫描行的待查列数不为0,转回NEXT
DJNZ R2,SCAN ;未找到所按键,返回
RET
FIND: MOV BUF,R7
MOV P2,#0E0H
LOOSEN:MOV A,P1
ORL A,#0F0H
CPL A
JNZ LOOSEN ;以上几条重复全扫描,等待所按键松按
MOV A,R7 ;松按后才考虑键处理,保证每按键一次,只处理一次,本条为取所按键号
ADD A,#0F6H
JC ORDER
NUM: MOV A,#01H ;键号小于等于9,是数字键,转NUM,执行数字键处理程序
XRL A,74H ;判断模式
JZ X0 ;计时模式则不处理数字按键
CLR C
INC 37H
MOV A,#0F9H
ADD A,37H
JC MAIN1 ;输入够6个数字则等待命令键
LCALL DS1 ;调用显示子程序
MOV A,R7
XCH A,45H ;存输入的密码
XCH A,44H
XCH A,43H
XCH A,42H
XCH A,41H
XCH A,40H
RET
ORDER: MOV A,#01H ;键号大于9,是命令键,转ORDER,执行命令键处理程序
XRL A,74H
JZ ORDER1 ;判断模式
MOV A,R7
XRL A,#0AH
JZ X15 ;重置
MOV A,R7
XRL A,#0BH
JZ X16 ;重置确认
MOV A,R7
XRL A,#0CH
JZ X9 ;输入密码确认,判断正误
MOV A,R7
XRL A,#0DH
JZ X2 ;清零
MOV A,R7
XRL A,#0EH
JZ X1 ;初始化密码
MOV A,R7
XRL A,#0FH
JZ X5 ;显示时间
X1: LJMP START1
X2: LJMP MAIN
X3: LJMP MAIN2
X5: MOV 74H,#01H ;进入计时模式
MOV 29H,#00H
LJMP MAIN3
X9: LJMP COMP
X15: LJMP RESET
X16: LJMP SET0
X0: LJMP KEY
ORDER1:
MOV A,R7
XRL A,#0AH
JZ X6 ; 分钟加一
MOV A,R7
XRL A,#0BH
JZ X7 ; 小时加一
MOV A,R7
XRL A,#0CH
JZ X11 ;闹钟分加一
MOV A,R7
XRL A,#0DH
JZ X12 ;闹钟小时加一
MOV A,R7
XRL A,#0EH
JZ X13 ;显示闹钟时间
MOV A,R7
XRL A,#0FH
JZ X8 ;回到等待密码输入
JMP X0
X6: MOV A,MBF
ADD A,#01H
DA A
MOV MBF,A
CJNE A,#60H,X10
MOV MBF,#00H
MOV A,HBF
ADD A,#01H
DA A
MOV HBF,A
CJNE A,#24H,X10
MOV HBF,#00H
RET
X7: MOV A,HBF
ADD A,#01H
DA A
MOV HBF,A
CJNE A,#24H,X10
MOV HBF,#00H
RET
X11: MOV A,59H
ADD A,#01H
DA A
MOV 59H,A
RET
X12: MOV A,58H
ADD A,#01H
DA A
MOV 58H,A
RET
X13: MOV 29H,#01H
LJMP MAIN3
X8: MOV 74H,#00H ;进入输密码模式
MOV 29H,#00H
LJMP MAIN
X10: RET
X4: LJMP MAIN
RESET: MOV 37H,#00H
MOV A,39H
CLR C
RRC A
JNC X4
MOV 38H,#01H ;按下重置键置一
JMP X4
SET0: MOV 37H,#00H ;设置密码
MOV A,38H ;是否按下RESET
CLR C
RRC A
JNC X4
MOV R2,#06H
MOV R0,#40H
MOV R1,#30H
E1: MOV A,@R0 ;把40H-45H的内容给30H-35H
XCH A,@R1
INC R0
INC R1
DJNZ R2,E1
CALL DELAY
E2: JMP X4
COMP: MOV 37H,#00H
MOV R1,#45H ;判断密码正误
MOV R0,#35H
MOV R2,#06H
C1: MOV A,@R1
XRL A,@R0
JNZ C2
DEC R1
DEC R0
DJNZ R2,C1
MOV R5,#00H
MOV 39H,#01H ;正确置一
LCALL DS2
JMP C3
C2: MOV 39H,#00H ;错误清零
LCALL DS3
INC R5
MOV A,R5
MOV R5,A
CJNE R5 ,#03H,C3
LCALL DS4
JMP X3 ;报警
C3: JMP X4
DS1: ;显示程序
MOV P3,#80H
MOV A,37H
LCALL TABLE
MOV P0,A
LCALL DELAY;延时
RET
DS2: MOV P3,#08H ;正确显示
JMP DS5
DS3: MOV P3,#20H ;错误显示
JMP DS5
DS4: MOV P3,#40H ;报警显示
DS5: MOV A,#03H
MOV P0,A
LCALL DELAY ;延时
RET
TABLE: INC A
MOVC A,@A+PC
RET
DB 03H,9FH,25H,0DH,99H,49H,41H,1FH,01H,19H,11H,0C1H,63H,85H,61H,71H,0FFH
DELAY:MOV R6,#00H ;延时程序
DEL11:DJNZ R6,DEL11
RET
MAIN3:
DS9: MOV A,29H
JZ BEIJ
NAOZ: MOV R0,#69H ;显示闹钟时间
JMP WEI
BEIJ: MOV R0,#63H ;显示北京时间
WEI: MOV R2,#08H
DS8: MOV P3,R2
MOV A,@R0
LCALL TABLE ;BCD码转换成段码
MOV P0,A
LCALL DELAY1 ;延时
DEC R0
CLR C
MOV A,R2
RLC A
MOV R2,A
CJNE R2,#10H,LL
RLC A
MOV R2,A
LL: CJNE R2,#00H,DS8 ;四位显示完了吗?没完则继续扫描显示
MOV A,29H
JZ SHIJ
MOV R0,#69H
MOV A,59H
LCALL GET
MOV R0,#67H
MOV A,58H
LCALL GET
JMP BIJIAO
SHIJ: MOV R0,#65H
MOV A,SBF ;存入秒
LCALL GET
MOV A,MBF ;存入分
LCALL GET
MOV A,HBF ;存入时
LCALL GET
BIJIAO:LCALL KEY ;调用键盘扫描程序
MOV A,58H ;比较闹钟时间和实际时间
MOV R6,HBF
XRL A,R6
JNZ DS9
MOV A,59H
MOV R6,MBF
XRL A,R6
JNZ DS9
LJMP MAIN2
SJMP DS9
GET: MOV 53H,A ;压缩型BCD码转换成非压缩型BCD码
ANL A,#0FH ;取低4位
MOV @R0,A
DEC R0
MOV A,53H
SWAP A ;取高4位
ANL A,#0FH
MOV @R0,A
DEC R0
RET
CLOCK:
MOV TL0,#00H ;定时器0中断子程序
MOV TH0,#40H
PUSH PSW ;保护现场
PUSH ACC
INC BUF1
MOV A,BUF1
CJNE A,#20H,QUIT ;20次为一秒
MOV BUF1,#00H
MOV A,SBF
ADD A,#01H
DA A
MOV SBF,A
CJNE A,#60H,QUIT ;60秒为1分
MOV SBF,#00H
MOV A,MBF
ADD A,#01H
DA A
MOV MBF,A
CJNE A,#60H,QUIT ;60分为1小时
MOV MBF,#00H
MOV A,HBF
ADD A,#01H
DA A
MOV HBF,A
CJNE A,#24H,QUIT
MOV HBF,#00H
QUIT: POP ACC ;恢复现场
POP PSW
RETI
DELAY1: MOV 47H,#01H ;延时程序
DEL110: MOV 48H,#0AH
DEL12: MOV 49H,#18H
DEL13: DJNZ 49H,DEL13
DJNZ 48H,DEL12
DJNZ 47H,DEL110
RET
MAIN2: MOV P3,#00H
MOV A,76H
CJNE A,#01H,JI
CLR TR1
LJMP MAIN
JI: INC 76H
ANL TMOD,#0FH
ORL TMOD,#10H
SETB ET1 ;开T1中断
SETB EA ;开总中断
MOV DPTR,#TONE
MOV A,#00H
LOP: MOVC A,@A+DPTR
JZ MAIN2 ;遇到结束标志则重新开始
MOV R5,A
MOV TH1,A
INC DPTR
MOV A,#00H
MOVC A,@A+DPTR
MOV R6,A
MOV TL1,R6
SETB TR1
INC DPTR
MOV A,#00H
MOVC A,@A+DPTR
MOV R2,A ;延时
LOOP1: MOV R3,#80H
LOOP2: MOV R4,#0FFH
LOOP3: DJNZ R4,LOOP3
DJNZ R3,LOOP2
DJNZ R2,LOOP1
INC DPTR
MOV A,#00H
LJMP LOP
INT_0: PUSH DPH
PUSH DPL
PUSH ACC
CPL P2.6
MOV TH1,R5 ;重装
MOV TL1,R6
SETB TR1
POP ACC
POP DPL
POP DPH
RETI
TONE://DB 0FCH,2FH,04H,0FCH,99H,04H,0FCH,0F8H,04H,0FDH,22H,04H ;1234
//DB 0FDH,73H,04H,0FDH,0BCH,04H,0FDH,0FAH,04H,0FEH,17H,04H ;5671
DB 0FCH,2FH,04H,0FCH,99H,04H,0FCH,0F8H,04H, 0FCH,2FH,04H ;两只老虎
DB 0FCH,2FH,04H,0FCH,99H,04H,0FCH,0F8H,04H, 0FCH,2FH,04H
DB 0FCH,0F8H,04H,0FDH,22H,04H,0FDH,073H,08H
DB 0FCH,0F8H,04H,0FDH,22H,04H,0FDH,073H,08H
DB 0FDH,073H,03H,0FDH,0BCH,01H, 0FDH,073H,03H,0FDH,22H,01H,0FCH,0F8H,04H,0FCH,2FH,04H
DB0FDH,073H,03H,0FDH,0BCH,01H, 0FDH,073H,03H,0FDH,22H,01H,0FCH,0F8H,04H,0FCH,2FH,04H
DB 0FCH,2FH,04H,0FDH,073H,04H,0FCH,2FH,08H
DB0FCH,2FH,04H,0FDH,073H,04H,0FCH,2FH,08H,00H,00H,00H
END
五、 使用说明书
(一) 键盘按键分布
C
8
4
0
D
9
5
1
E
A
6
2
F
B
7
3
(二) 按键功能说明
按键
A
B
C
D
E
F
密码模式
密码重置
重置确认
输入确认
清除输入
初始化密码
进入计时模式
计时模式
分加一
小时加一
闹钟分加一
闹钟小时加一
显示闹钟时间
进入密码模式
计时模式数字键无效。
开机进入密码输入界面,显示0,等待按键,每按下一个数字键显示的数字加一,记录输入数字的个数,只能输入六个数字,然后等待确认。密码正确则第一个数码管显示0,错误则第二个显示0,连续错误三次报警。密码输入界面按下F键进入计时显示界面,可进行时分调整,按下E键显示闹钟时间(为防止闹钟误动作,初始设置为01:00),可调整时分。
六、 心得体会
在本次单片机课程设计过程中,我获益良多,虽然遇到了很多困难,但通过学习都成功的克服。
在初期考虑算法和显示的过程中有过不少想法,也经历过彷徨不知所措的过程,但一旦坐下来开始对程序进行思考,并开始一步步的往下做,就发现其实程序可以变成一块一块的子程序,使得我对设计有了新的认识,并使程序变得清晰明了。
不管学会的还是学不会的的确觉得困难比较多,真是万事开头难,不知道如何入手。最后终于做完了有种如释重负的感觉。此外,还得出一个结论:知识必须通过应用才能实现其价值!有些东西以为学会了,但真正到用的时候才发现是两回事,所以我认为只有到真正会用的时候才是真的学会了。程序的设计思想的精巧的重要性,是不管怎么说都不为过的,好的设计可以让大家很快的明白你的思想,而且很方便的来实现它。良好的编程习惯,它可以使你的程序很方便的被别人阅读,也很方便的被更改,所以可以的话,尽可能多的写出注释,没有人会闲你写的太多。
在设计数字密码锁时,我有了很多经验教训,一个实验的失败也许跟你的设计思路没有太大关联,更多的是细节致使实验失败。在编程时其实编到
展开阅读全文