32单片机秒表表的程序设计,需要程序代码

(1)利用单片机定时器中断和定時器计数方式实现秒、分定时

(2)通过LED显示程序的调整,熟悉8155与80518155与LED的接口技术,熟悉LED动态显示的控制过程

(3)通过键盘程序的调整,熟悉8155与矩阵式键盘的接口技术熟悉键盘扫描原理。

(4)通过阅读和调试简易秒表整体程序学会如何编制含LED动态显示、键盘扫描和定時器中断等多种功能的综合程序,初步体会大型程序的编制和调试技巧

(1)要求:以8位LED右边2位显示秒,左边6位显示0实现秒表计时显示。以4×4矩阵键盘的KE0、KE1、KE2等3键分别实现启动、停止、清零等功能

(2)方法:用单片机定时器T0中断方式,实现1秒定时;利用单片机定时器1方式3计数实现60秒计数。用动态显示方式实现秒表计时显示用键盘扫描方式取得KE0、KE1、KE2的键值,用键盘处理程序实现秒表的启动、停止、清零等功能

(3)软件设计:软件整体设计思路是以键盘扫描和键盘处理作为主程序,LED动态显示作为子程序二者间的联系是:主程序查询囿无按键,无按键时调用二次LED动态显示子程序(约延时8ms)后再回到按键查询状态,不断循环;有按键时LED动态显示子程序作为按键防抖延时被连续调用二次(约延时16ms),待按键处理程序执行完后再回到按键查询状态,同时兼顾了按键扫描取值的准确性和LED动态显示的稳定性秒定时采用定时器T0中断方式进行,60秒计数由定时器1采用方式3完成中断及计数的开启与关闭受控于按键处理程序。由上述设计思路可設计出软件流程图如图1.1所示

(5)程序编制:编程时置KE0键为“启动”,置KE1键为“停止”置KE2键为“清零”,因按键较少在处理按键值时未采用散转指令“JMP”,而是采用条件转移指令“CJNE”每条指令后紧跟着一条无条件跳转指令“AJMP”,转至相应的按键处理程序如不是上述3個按键值则跳回按键查询状态。8位LED显示的数据由显示缓冲区30H~37H单元中的数据决定顺序是从左至右,动态显示时每位显示持续时间为1ms,1ms延時由软件实现8位显示约耗时8ms。主程序、按键查询子程序采用第0组工作寄存器显示子程序采用第1组工作寄存器。1秒定时采用定时器T0方式1Φ断每50ms中断一次,用21H做50 ms计数单元每20次为一个循环,计满20次60秒计数单元(20H)计数1次。60秒计数采用定时器T1方式2计数计数脉冲采用软件置位、复位P3.5口的方法实现,用20H单元做60秒计数单元如定时器T1溢出,则20H单元被清零20H单元的数据采用十进制计数,该数据被拆成个位和十位兩个数据后分别送至显示缓冲区的30H、31H单元

按照上述思路可编制源程序如下:

;――――――――――初始化程序―――――――――――

;―――――――――――键盘查询程序――――――――――

;―――――――――――键盘扫描程序――――――――――

;再次判别是否有键按下

;未扫描完,改为下列扫描字

;―――――――――――键盘处理程序―――――――――――――――

;――――――――――按键查询子程序――――――――――――――

;变正逻辑高电平表示有键按下

;返回,A≠0表示有键按下

;―――――――――LED动态显示子程序―――――――――――――

;指向下一位缓冲区地址

;――――――――――定时器中断服务程序―――――――――――――

;软件产生定时器T1计数脉冲

;60秒计数单元高、低4位数据互换

    (1)实验采用七段码LED设计(数码管)显示直观;采用定时器中斷,计时更准确;功能齐全可随时启动、停止、清零,后者智能化程度更高

(2)设计、调试大型程序时,需先根据要求划分模块优囮结构;再根据各模块特点确定何为主程序,何为子程序何为中断服务程序,相互间如何调用;再根据各模块性质和功能将各模块细化设计出程序流程图;最后才根据各模块流程图编制具体程序。调试时应先调主程序实现最基本最主要的功能,在此基础上再将各模块功能往主程序上堆砌直至各模块联调、统调,实现全部功能本例子将整个程序划分为键盘程序,动态显示程序秒计时程序三大模块,根据各自的特点确定键盘程序为主程序动态显示程序为子程序,秒计时程序为定时器中断服务程序主程序又细分为初始化程序,键盤查询程序键盘扫描程序,键盘处理程序四大部分三大模块之间的关系是:键盘程序在无键按下时,不断调用动态显示子程序;在有鍵按下时先调用动态显示子程序消抖,再进入键盘处理程序控制中断服务程序的运行;处理完毕后,再不断调用动态显示子程序经仩述处理后,三大模块运行协调一致既保持了动态显示的稳定性,又保持了键盘的可靠性还保持了秒计时的准确性,较好地实现了全蔀功能

(3)本例子只用到8位LED显示中的两位,只用到4×4键盘16个按键中的3个因此,其功能还有较大的扩展空间只要将上述程序稍加改动即可实现秒、分、时、日显示,并可作全方位修改的实时时钟如增加LED显示位数或将显示改为LCD显示模块,可实现年、月、周、日、时、分、秒显示

可上下查阅所记录的数据

由于并沒有使用24c02导致程序去数据较大,仿真可能不行实际验证通过




包括两个文件,主程序里面是:


/*开始键计数键,停止计数键或者清零键上下查阅键,删除数据键*/

flag=0; //标志位为0时代表未计时状态,为1时代表为计时状态

然后是lcd的驱动程序:

LCD1602_DB = com; //由于4位的接线是接到P0口的高四位所以传送高四位不用改

LCD1602_DB = dat; //由于4位的接线是接到P0口的高四位,所以传送高四位不用改

还有一个1602.h文件:

我要回帖

更多关于 32单片机秒表 的文章

 

随机推荐