单片机课程设计之数字秒表Word格式文档下载.docx
《单片机课程设计之数字秒表Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《单片机课程设计之数字秒表Word格式文档下载.docx(12页珍藏版)》请在冰豆网上搜索。
4.1设计硬件
4.1.180C51单片机
MCS-51系列单片机是8位单片机产品,80C51是其中的典型代表,基本模块包括以下几个部分:
(1)CPU:
80C51的CPU是8位的,另外80C51内部有1个位处理器
(2)R0M:
4KB的片内程序存储器,存放开发调试完成的应用程序
(3)RAM:
256B的片内数据存储器,容量小,但作用大
(4)I/O口:
P0-P3,共4个口32条双向且可位寻址的I/O口线
(5)中断系统:
共5个中断源,3个内部中断,2个外部中断
(6)定时器/计数器:
2个16位的可编程定时器/计数器
(7)通用串行口:
全双工通用异步接收器/发送器
(8)振荡器:
80C51的外接晶振与内部时钟振荡器为CPU提供时钟信号
(9)总线控制:
80C51对外提供若干控制总线,便于系统扩展
80C51的引脚如下图:
80C51单片机引脚图
4.1.2晶体振荡电路
80C51单片机内部的振荡电路是一个高增益反相放大器,引线XTAL1和XTAL2分别为反相振荡放大器的输入及内部时钟工作电路的输入和来自反相振荡器的输出,该反相放大器可以配置为片内振荡器。
这里选用51单片机12MHZ的内部振荡方式,电路如下:
C2、C3起稳定振荡频率、快速起振的作用
晶振电路
4.1.3复位电路
采用上电加按键复位电路,上电后,由于电容充电,使RST持续一段时间的高电平。
当单片机在运行之中时按下复位键也能使RST持续一段时间的高电平,从而实现上电加开关复位操作。
这不仅能是单片机复位,还能是单片机的外围设备同时复位,当程序出现错误时,可以随时使电路复位。
电路图如下:
复位电路
4.1.4按键电路
当按键被按下时,相应的引脚被拉低,经扫描后,获得键值,并执行键功能程序,因此按下不同的按键,将执行不同的功能程序。
按键电路
4.1.5显示电路
采用2个LED数码管,LED是七段显示器,内部有7个条形发光二极管和1个小圆点发光二极管,根据各管的亮暗组成字符。
在用数码管显示时,有静态和动态两种选择,这里采用LED动态显示,用P0口驱动显示,且需要外接上拉电阻才能输出高电平。
显示电路
4.2引脚控制
P0.0—P0.7对应两个数码管的A、B、C、D、E、F、G和小数点位;
P2.5控制数码管个位的显示,P2.6控制数码管十位;
P3.6、P3.7分别接按键
5、电原理图
6、PCB图
7、程序流程图及程序代码
7.1程序流程图
7.2程序代码
A_BITEQU20H
B_BITEQU21H
TEMPEQU22H
MOVP3,#0FFH;
对P3口初始化,设置为高电平,用于按键输入
MOVP0,#0FFH;
使显示时间数码管熄灭
CLRF0
MOVDPTR,#NUMTAB;
指定查表启始地址
;
等待按键输入
根据按键的输入判断执行什么功能
按键1按下则执行功能1
START:
JBP3.6,START1;
循环判断开始按钮是否按下?
ACALLDELAY10;
延时10毫秒触点消抖
JBP3.6,START;
如果是干扰就返回
JNBP3.6,$;
等待按键松开
LJMPGN1
;
按键2按下则执行功能2
START1:
JBP3.7,START;
ACALLDELAY10;
JBP3.7,START1;
JNBP3.7,$
LJMPGN2
数码管显示秒表时间的程序
GN1:
;
先初始化
S1:
MOVA,#0
MOVTEMP,A
GOON1:
MOVR2,#2
JS1:
MOVR3,#250
TIME1:
MOVA,TEMP;
将TEMP中的十六进制数转换成10进制
MOVB,#10
DIVAB
MOVB_BIT,A;
十位在A
MOVA_BIT,B;
个位在B
LCALLDPLOP1
一段判断定时过程中是否有按键输入的程序段
C1:
JBP3.6,B1
延时10毫秒消抖
JBP3.6,C1
CPLF0
ZT1:
MOVP3,#0FFH;
JBP3.6,$;
循环判断开始按钮是否按下
ACALLDELAY10;
JBP3.6,ZT1;
LCALLDPLOP1
B1:
JBP3.7,LOOP1
JBP3.7,B1
JNBP3.7,$;
AJMPOVER
LOOP1:
DJNZR3,TIME1;
2毫秒循环执行250次,时间约0.5秒
DJNZR2,JS1;
循环执行2次,时间为1秒钟
INCTEMP;
满一秒钟对时间加1
MOVA,TEMP
CLRC
SUBBA,#60
JNZGOON1;
判断TEMP的数值是否为60?
不为60循环
ACALLOVER
RET
GN2:
MOVA,#14H;
设定倒计时的时间20S
MOVTEMP,A
数码管显示倒计时时间的程序
初始化
MOVP0,#14H;
使显示时间为设定的倒计时时间
GOON2:
MOVR,#2
JS2:
TIME2:
MOVB,#10
DIVAB
MOVB_BIT,A;
MOVA_BIT,B;
指定查表启始地
DPLOP2:
MOVA,A_BIT;
取个位数
MOVCA,@A+DPTR;
查个位数的7段代码
MOVP0,A;
送出个位的7段代码
CLRP2.5;
开个位显示
ACALLDELY1;
显示1毫秒
SETBP2.5;
关闭个位显示,防止鬼影
MOVA,B_BIT;
取十位数
MOVCA,@A+DPTR;
查十位数的7段代码
MOVP0,A;
送出十位的7段代码
CLRP2.6;
开十位显示
SETBP2.6;
关闭十位显示,防止鬼影
C2:
JBP3.6,B2
JBP3.6,C2
ZT2:
MOVP3,#0FFH;
JBP3.6,$;
JBP3.6,ZT2;
B2:
JBP3.7,LOOP2
LOOP2:
DJNZR3,TIME2;
DJNZR2,JS2;
DECTEMP;
满一秒钟对时间减1
JNZGOON2;
判断TEMP的数值是否为0?
不为0循环
结束定时
OVER:
AJMPSTART;
退到开机初始化状态
1毫秒延时子程序
DELY1:
MOVR4,#2
D1:
MOVR5,#248
D2:
DJNZR5,D2
DJNZR4,D1
10毫秒延时子程
DELAY10:
MOVR4,#20
D3:
MOVR5,#248
D4:
DJNZR5,D4
DJNZR4,D2
数码管0~9各数字的显示代码
NUMTAB:
DB40H,79H,24H,30H,19H,12H,02H,78H,00H,10H
DPLOP1:
MOVA,A_BIT;
CLRP2.5;
ACALLDELY1;
SETBP2.5;
关闭个位显示
MOVA,B_BIT;
查十位数的7段代码
MOVP0,A;
送出十位的7段代码
CLRP2.6;
SETBP2.6;
关闭十位显示
END
8、参考文献
单片机开发应用技术北京大学出版社李国兴
Protel99SE电路设计与制版北京:
电子工业出版社赵广林
51系列单片机设计实例[M].北京:
航空航天大学出版社
单片机实验与实践教程[M].北京:
北京航空航天大学出版社夏继强