3.按键可以进行控制计时的个位,十位,百位;
二、硬件原理及单元电路分析
1、硬件原理分析:
(1)
STC12C5404AD资料
STC12C5410AD系列及STC12C2052AD系列单片机是宏晶科技生产的单时钟/ 机器周期(1T)的单片机,是高速/ 低功耗/ 超强抗干扰的新一代8051 单片机,指令代码完全兼容传统8051,但速度快8-12倍,内部集成MAX810专用复位电路。4路PWM,8路高速10位A/D转换,针对电机控制,强干扰场合。STC12C2052AD系列只有2路PWM,8 路高速8位A/D 转换。
1.ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器,无需专用仿真器可通过串口(P3.0/P3.1)直接下载用户程序,数秒即可完成一片;
2.EEPROM
功能;
3.看门狗10.内部集成MAX8;
4.专用复位电路(外部晶体12M 以下时,可省外部复位电路);
5.时钟源:外部高精度晶体/ 时钟,内部R/C 振荡器用户在下载用户程序时,可选择是使用内部R/C 振荡器还是外部晶体/ 时钟常温下内部R/C 振荡器频率为:5.2MHz ~
6.8MHz精度要求不高时,可选择使用内部时钟,但因为有制造误差和温漂,应认为是4MHz ~ 8MHz;
6.共6个16位定时器/计数器,两个专用16位定时器T0 和T1再加上PCA模块可再实现4个16位定时器,STC12C2052AD系列只有两路PCA;
7.外部中断2路,下降沿中断或低电平触发中断,Power Down模式可由外部中断唤醒;
8.PWM(4 路)/PCA(可编程计数器阵列,4 路),5410
系列是4 路,2052 系列只有两路
--- 也可用来当4 路D/A 使用
--- 也可用来再实现4 个定时器
--- 也可用来再实现4 个外部中断
9.A/D 转换, 10位精度ADC,共8路。STC12C2052AD系列只有8位精度;
10.通用全双工异步串行口(UART),由于STC12系列是高速的8051,也可再用定时器软件实现多串口。
11、通用I/O
口(27/23/15 个),复位后为: 准双向口/ 弱上拉(普通8051 传统I/O 口)
可设置成四种模式:准双向口/ 弱上拉,推挽/ 强上拉,仅为输入/ 高阻,开漏
每个I/O
口驱动能力均可达到20mA,但整个芯片最大不得超过55mA
12、工作频率范围:0 - 35 MHz,相当于普通8051 的 0~420MHz.实际工作频率可达48MHz
(2)74LS138资料
原理如下:
工作原理
①当一个选通端(E1)为高电平,另两个选通端((/E2))和/(E3))为低电平时,可将地址端(A0、A1、A2)的二进制编码在Y0至Y7对应的输出端以低电平译出。比如:A2A1A0=110时,则Y6输出端输出低电平信号。
②利用 E1、E2和E3可级联扩展成 24 线译码器;若外接一个反相器还可级联扩展成 32 线译码器。
③若将选通端中的一个作为数据输入端时,74LS138还可作数据分配器。
④可用在8086的译码电路中,扩展内存。
74LS138的引脚功能:
A0~A2:地址输入端
STA(E1):选通端
/STB(/E2)、/STC(/E3):选通端(低电平有效)
/Y0~/Y7:输出端(低电平有效)
VCC:电源正
GND:地
A0~A2对应Y0——Y7;A0,A1,A2以二进制形式输入,然后转换成十进制,对应相应Y的序号输出低电平,其他均为高电平;
(3)74LS164资料
8位移位寄存器(串行输入,并行输出)
简要说明:
当清除端(CLEAR)为低电平时,输出端(QA-QH)均为低电平。串行数据输入端(A,B)可控制数据。当 A、B任意一个为低电平,则禁止新数据输入,在时钟端(CLOCK)脉冲上升沿作用下Q0为低电平。当A、B有一个为高电平,则另一个就允许输入数据,并在CLOCK上升沿作用下决定Q0的状态。
(4)MAX232的资料
内部结构基本可分三个部分:
第一部分是电荷泵电路。由1、2、3、4、5、6脚和4只电容构成。功能是产生+12v和-12v两个电源,提供给RS-232串口电平的需要。
第二部分是数据转换通道。由7、8、9、10、11、12、13、14脚构成两个数据通道。
其中13脚(R1IN)、12脚(R1OUT)、11脚(T1IN)、14脚(T1OUT)为第一数据通道。
8脚(R2IN)、9脚(R2OUT)、10脚(T2IN)、7脚(T2OUT)为第二数据通道。
TTL/CMOS数据从T1IN、T2IN输入转换成RS-232数据从T1OUT、T2OUT送到电脑DP9插头;DP9插头的RS-232数据从R1IN、R2IN输入转换成TTL/CMOS数据后从R1OUT、R2OUT输出。
第三部分是供电。15脚DNG、16脚VCC(+5v)。
2、单元电路分析:
( 1)单片机外部振荡电路:
(2)利用74LS138进行数码管的位码选择:
(3)利用74LS164进行数码管的段选:
三、软件原理及框图阐述
(1)系统框图
(2)程序框图
四、总原理图及元器件清单
1.原理图:
(1)Protues总原理图
(2)最小系统原理图:
2.元件清单
元件序号
|
型号
|
主要参数
|
数量
|
备注
|
R1,R3,R4,R5
|
金属膜电阻
|
10k
|
4
|
|
R2
|
金属膜电阻
|
2.2k
|
1
|
|
R6
|
金属膜电阻
|
1k
|
1
|
|
R7
|
金属膜电阻
|
3k
|
1
|
|
C1,C2
|
电容33
|
33pF
|
2
|
|
C3
|
电解电容
|
10uF
|
1
|
|
C4,C5,C6,C7
|
电容104
|
0.1uF
|
4
|
|
S1,S2,S3
|
WJW按钮
|
按钮
|
3
|
|
LED3
|
3位数码管
|
晶体管
|
2
|
|
U1
|
STC12C5404AD
|
单片机
|
1
|
|
U2
|
74LS138
|
多路开关译码
|
1
|
|
U3
|
74LS164
|
串行输入转并行输出
|
1
|
|
U4
|
MAX232
|
数据传输芯片
|
1
|
|
LS1
|
SPEAKER
|
蜂鸣器
|
1
|
|
T1
|
S8050
|
三极管
|
1
|
|
L1
|
XTAL
|
12MHZ晶振
|
1
|
|
J1
|
CON2
|
二脚塑料插座
|
1
|
|
J3
|
CON3
|
三脚塑料插座
|
1
|
|
J2
|
CON5
|
五脚塑料插座
|
1
|
|
RS1
|
RS232
|
9针RS232口
|
1
|
|
五、软硬件调试
1、软件仿真结果:
2、实物照片:
3、具体操作过程:
上电后,初始化计数为00.00.00,开始显示计数器功能。按下S1键,个位数码管加一。再按下S2键,十位数码管加一,再按下S3键,百位数码管加一,可以记录此时的计数显示。并且当每一位到达进“9”时,进行进位,高位加一,此位归零。
六、性能测试与分析
1、可以实现的功能:
1. 这次秒表的设计是通过单片机实现计数和进位功能;
2.通过测试,可以实现以数字形式显示计数的功能;
3.通过按键S1控制个位,S2为控制十位,S3为控制百位,在以上的功能条件下可以进行计数;
2、计数的精度:
该计数器可以实现范围内的的计数,并且可以通过按键控制个位,十位,百位直接加一
附录: 软件清单
;STC12C54XX最小系统板 人机交互参考程序
S1 EQU P1.4 ;
S1--执行键
S2 EQU P1.3
; ↑键
S3 EQU P1.2 ; ↓键
CLK164 EQU P3.4
;SBUFF中模拟串口时钟线
DAT164 EQU P1.1
;SBUFF中模拟串口数据线
WEIMA EQU 2FH
;位码
EXEBIT EQU 21H.1 ; 执行键 闭合
UPBIT EQU 21H.2 ; ↑键 闭合
DOWNBIT EQU 21H.3 ; ↓键 闭合
EXEX EQU 22H.1 ; 执行键 已执行
UPX EQU 22H.2 ; ↑键 已执行
DOWNX EQU 22H.3
; ↓键 已执行
LED0 EQU 35H
;LED0显示值缓冲单元
LED1 EQU 34H
;LED1显示值缓冲单元
LED2 EQU 33H
;LED2显示值缓冲单元
LED3 EQU 32H
;LED3显示值缓冲单元
LED4 EQU 31H
;LED4显示值缓冲单元
LED5 EQU 30H
;LED5显示值缓冲单元
OLD1 EQU 80H ;
S1 按下 时长
OLD2 EQU 81H ;
S2 按下 时长
OLD3 EQU 82H ;
S3 按下 时长
YEAR DATA 36H
; 比较 时长 常数
LEDTAB EQU 0700H
; 7段译码表
ORG 0000H
LJMP BEGIN
;开机复位,从此进入
ORG 0003H
;LJMP INTEX0 ;外中断0,中断入口
ORG 000BH
LJMP INTT0 ;T0中断,中断入口
ORG 0013H
;LJMP INTEX1 ;外中断1,中断入口
ORG 001BH
;LJMP INTT1 ;T1中断,中断入口
ORG 0023H
; LJMP RECEI ;串行中断,中断入口
ORG 002BH
;
LJMP INTT2 ;T2中断,中断入口
ORG 0033H
; LJMP
INTPCA ;PCA中断,中断入口
ORG
0040H
BEGIN: MOV
IE,#00H ;开机关中断
MOV
SP,#0E0H ;重新设置堆栈指针
CLR P3.7
;蜂鸣器消声
MOV LED0,#80H ;给显示缓冲初值.
MOV LED1,#00H
MOV LED2,#80H
MOV LED3,#00H
MOV LED4,#80H
MOV LED5,#00H
LJMP HERE
;进入主循环体
ORG 0100H
HERE: ;主循环体
LCALL DISPLED ;LED数码管动态扫描程序
JMP HERE
MAIN:
RET ;主程序
DISPLED: ;LED数码管动态扫描程序
DISP: MOV R1,#LED5
MOV R7,#07H
MOV DPTR,#LEDTAB
MOV WEIMA,P1
ANL WEIMA,#1FH
;清零P2.7 P2.6 P2.5
DISP1: LCALL
EXBIT ;交换位码字节的bit5和bit7
ORL A,#1CH
MOV P1,A
MOV A,@R1
MOVC A,@A+DPTR
LCALL SBUFF ;调用 模拟串口子程序
LCALL KEYAN ;调用键盘扫描执行子程序
LCALL MAIN ;执行主程序
LCALL DEL ;调用软件延时子程序
LCALL DEL ;可根据主程序长短增删个数
LCALL DEL
LCALL DEL
LCALL DEL
LCALL DEL
LCALL DEL
INC R1
MOV A,WEIMA
ADD A,#20H
MOV WEIMA,A
DJNZ R7,DISP1
LJMP DISP
EXBIT: MOV
A,WEIMA ;交换位码字节的bit5和bit7
MOV C,ACC.5
MOV F0,C
MOV C,ACC.7
MOV ACC.5,C
MOV C,F0
MOV ACC.7,C
RET
SBUFF: MOV R3,#08H ;模拟串口子程序
SBUFF1: RLC A
MOV DAT164,C ;
CLR CLK164
;
NOP
SETB CLK164
;
DJNZ R3,SBUFF1
RET
KEYAN: ;键盘扫描执行子程序
KEY1: JNB S1,KEY1A ;S1按下则跳转
MOV R0,#OLD1
;未按下清零
CLR A
MOV @R0,A
CLR 21H.1
CLR 22H.1
LJMP KEY2
KEY1A: MOV R0,#OLD1
LCALL KEYS
;调用判断按键时长子程序
MOV 21H.1,C
KEY2: JNB S2,KEY2A ;S2按下则跳转
MOV R0,#OLD2
;未按下清零
CLR A
MOV @R0,A
CLR 21H.2
CLR 22H.2
LJMP KEY3
KEY2A: MOV R0,#OLD2
LCALL KEYS
;调用判断按键时长子程序
MOV 21H.2,C
KEY3: JNB S3,KEY3A ;S3按下则跳转
MOV R0,#OLD3
;未按下清零
CLR A
MOV @R0,A
CLR 21H.3
CLR 22H.3
LJMP AN
KEY3A: MOV R0,#OLD3
LCALL KEYS
;调用判断按键时长子程序
MOV 21H.3,C
AN: JB 21H.1,AN1
;键盘执行
JB 21H.2,AN2
JNB 21H.3,AN0
LJMP AN3
AN0: LJMP EEAN
AN1: JB 22H.1,AN1E
LCALL EXES1 ;执行S1
SETB 22H.1
AN1E: LJMP EEAN
AN2: JB 22H.2,AN2E
LCALL EXES2 ;执行S2
SETB 22H.2
AN2E: LJMP EEAN
AN3: JB 22H.3,AN3E
LCALL EXES3 ;执行S3
SETB 22H.3
AN3E: LJMP EEAN
EEAN: RET
EXES1: ;执行S1
INC LED0
MOV A,LED0
CJNE A,#8AH,ENDS1
MOV
LED0,#80H
MOV A,LED1
ADD A,#01H
MOV LED1,A
CJNE A,#0AH,ENDS1
MOV LED1,#00H
MOV A,LED2
ADD A,#01H
MOV
LED2,A
CJNE A,#8AH,ENDS1
MOV LED2,#80H
MOV A,LED3
ADD A,#01H
MOV LED3,A
CJNE A,#0AH,ENDS1
MOV LED3,#00H
MOV A,LED4
ADD A,#01H
MOV LED4,A
CJNE A,#8AH,ENDS1
MOV LED4,#80H
MOV A,LED5
ADD A,#01H
MOV LED5,A
CJNE A,#0AH,ENDS1 ;;
MOV LED5,#00H
RET
ENDS1:
RETI
EXES2: ;执行S2
INC LED1
;;
MOV A,LED1
CJNE A,#0AH,ENDS2
MOV LED1,#00H
MOV A,LED2
ADD A,#01H
MOV LED2,A
CJNE A,#8AH,ENDS1
MOV LED2,#80H
MOV A,LED3
ADD
A,#01H
MOV LED3,A
CJNE A,#0AH,ENDS1
MOV LED3,#00H
MOV A,LED4
ADD A,#01H
MOV LED4,A
CJNE A,#8AH,ENDS1
MOV LED4,#80H
MOV A,LED5
ADD A,#01H
MOV LED5,A
CJNE A,#0AH,ENDS1 ;;
MOV LED5,#00H
ENDS2: RET
EXES3: ;执行S3
INC
LED2
MOV A,LED2
CJNE A,#8AH,ENDS1
MOV LED2,#80H
MOV A,LED3
ADD A,#01H
MOV LED3,A;;
MOV A,LED3
CJNE A,#0AH,ENDS1
MOV LED3,#00H
MOV A,LED4
ADD A,#01H
MOV LED4,A
CJNE A,#8AH,ENDS1
MOV LED4,#80H
MOV A,LED5
ADD A,#01H
MOV LED5,A
CJNE A,#0AH,ENDS1 ;;
MOV LED5,#00H
RET
KEYS: ;判断按键时长子程序
INC @R0
MOV A,#YEAR
CLR C
SUBB A,@R0
JNC KEYS2
MOV @R0,#00H
SETB C
RET
KEYS2: CLR C
RET
INTEX0: ;外中断0 中断服务程序
PUSH PSW
PUSH ACC
SETB RS0
POP ACC
POP PSW
RETI
INTT0: ;T0 中断服务程序
PUSH ACC
PUSH PSW
SETB RS1
EINTT0:
POP PSW
POP ACC
RETI
INTT1: ;T1 中断服务程序
PUSH PSW
PUSH ACC
SETB RS1
EINTT1: POP ACC
POP PSW
RETI
INTEX1: ;外中断1 中断服务程序
PUSH PSW
PUSH ACC
EEX1:
POP ACC
POP PSW
RETI
DEL: ;软件延时子程序
;MOV R4,#01H
DEL3: MOV R3,#01H
DEL2: MOV R2,#0F0H
DEL1: NOP
NOP
DJNZ R2,DEL1
; DJNZ R3,DEL2
;DJNZ R4,DEL3
RET
ORG 0700H
;LEDTAB 7段码译码表
DB
0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H,0FEH,0F6H
; 0 1
2 3 4
5 6 7
8 9
DB
0EEH,3EH,9CH,7AH,9EH,8EH,76H,1CH,0CEH
; A
b c d E F
H L P
ORG 0780H
;LEDTAB. 7段码译码表带小数点
DB
0FDH,61H,0DBH,0F3H,67H,0B7H,0BFH,0E1H,0FFH,0F7H
; 0. 1.
2. 3. 4.
5. 6. 7.
8. 9.
DB
0EFH,3FH,9DH,7BH,9FH,8FH,77H,1DH,0CFH
; A.
b. c. d. E. F.
H. L. P.
END