51单片机秒表计时(protues)

合集下载

51单片机实验 秒表设计

51单片机实验 秒表设计

实验报告一、实验名称10秒计时的秒表设计二、实验内容精确到0.1秒的秒表三、相关模块led数码管、usb、独立键盘四、实验代码#include "reg52.h"typedef unsigned int u16; //对数据类型进行声明定义typedef unsigned char u8;sbit LSA=P2^2;sbit LSB=P2^3;sbit LSC=P2^4;sbit k1=P3^1;sbit k2=P3^0;sbit k3=P3^2;sbit k4=P3^3;u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};u16 s,sec;unsigned int i;unsigned int j;unsigned int a,b,c,d;u8 mb[2];void Timer0Init(){TMOD|=0X01;//选择为定时器0模式,工作方式1,仅用TR0打开启动。

TH0=0XFC; //给定时器赋初值,定时1msTL0=0X18;TR0=0;//打开定时器}void delay(u16 n){while(n--);}void DigDisplay1(u16 i){switch(i){case(0):LSA=0;LSB=0;LSC=0; break;case(1):LSA=1;LSB=0;LSC=0; break;case(2):LSA=0;LSB=1;LSC=0; break;case(3):LSA=1;LSB=1;LSC=0; break;case(4):LSA=0;LSB=0;LSC=1; break;case(5):LSA=1;LSB=0;LSC=1; break;case(6):LSA=0;LSB=1;LSC=1; break;case(7):LSA=1;LSB=1;LSC=1; break;}if (i==1){P0=smgduan[mb[i]]+0x80;//发送段码}else{P0=smgduan[mb[i]];}delay(1); //间隔一段时间扫描P0=0x00;//消隐}void DigDisplay2(u16 i){i=i+3;switch(i){case(0):LSA=0;LSB=0;LSC=0; break;case(1):LSA=1;LSB=0;LSC=0; break;case(2):LSA=0;LSB=1;LSC=0; break;case(3):LSA=1;LSB=1;LSC=0; break;case(4):LSA=0;LSB=0;LSC=1; break;case(5):LSA=1;LSB=0;LSC=1; break;case(6):LSA=0;LSB=1;LSC=1; break;case(7):LSA=1;LSB=1;LSC=1; break;}if (i==4){P0=smgduan[a]+0x80;}else{P0=smgduan[b];}delay(1);P0=0x00;}void DigDisplay3(u16 i){i=i+6;switch(i){case(0):LSA=0;LSB=0;LSC=0; break;case(1):LSA=1;LSB=0;LSC=0; break;case(2):LSA=0;LSB=1;LSC=0; break;case(3):LSA=1;LSB=1;LSC=0; break;case(4):LSA=0;LSB=0;LSC=1; break;case(5):LSA=1;LSB=0;LSC=1; break;case(6):LSA=0;LSB=1;LSC=1; break;case(7):LSA=1;LSB=1;LSC=1; break;}if (i==7){P0=smgduan[c]+0x80;}else{P0=smgduan[d];}delay(1);P0=0x00;}void key1(){delay(10);if(k1==0){TR0=!TR0;while(!k1);}}void key2(){delay(10);if(k2==0){s=0;sec=0;while(!k2);}}void key3(){delay(10);if(k3==0){if (j==0) j=1;else j=0;if (j==1){a=mb[1];b=mb[0];}if (j==0){c=mb[1];d=mb[0];}while(!k3);}}void key4(){delay(10);if(k4==0){s=0;sec=0;a=0;b=0;c=0;d=0;while(!k2);}}void main(){Timer0Init();i=0;j=0;while(1){delay(10);key1();if(TF0==1){TF0=0;TH0=0XFC; //给定时器赋初值,定时1msTL0=0X18;s++;}if(s==60){s=0;sec++;if(sec==100)sec=100;}key2();mb[0]=sec%10;mb[1]=(sec/10)%10;key3();DigDisplay1(i);DigDisplay2(i);DigDisplay3(i);i++;i=i%2;key4();}}五、实验效果K1作用:启动、开始或暂停计时K2作用:计数位清零K3作用:记录当前时间并显示K4作用:清零所有的数码管六、实验遇到的问题经过前几次的实验,0到10秒的计数已经不成问题,本次实验的难点主要在几个按键的功能实现上。

51单片机数字时钟-proteus仿真原理图及keil C51编译的C51程序

51单片机数字时钟-proteus仿真原理图及keil C51编译的C51程序

51单片机数字时钟-proteus仿真原理图及keil C51编译的C51程序该实验采用proteus 7.4 sp3进行的仿真,仿真原理图如下图所示,该实验采用定时器0的工作方式1定时500ms,等待20次定时1s进行时钟计数。

通过定时器1的工作方式1定时500ms,用来调整数码管闪烁的时间。

K1是用来选中时分秒,按一下选中时,再按一下选中分,再按一下选中秒,再按一下退出选中状态。

K2按一下数加一,K3按一下数减一。

在调整时间时,时钟停走。

/******************************************************************* **** 程序名; 时钟实验* 功能: 数码管通过动态扫描显示时间,时间可设定,调整时间时时钟不走.* 编程者: ZPZ* 编程时间:2009/8/9******************************************************************** **/#include<reg52.h>#define uint unsigned int#define uchar unsigned charsbit _led=P2^7;sbit key1=P2^0;sbit key2=P2^1;sbit key3=P2^2;uchar num=0,temp=0,count=0; uchar aa;uchar hour,min,sec;uchar codetable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};void delay(uint z);void display(uchar a,uchar b,uchar c,uchar d,uchar e,uchar f,uchar aa);void read_key();void led();void time_change();/****************** 主函数 *******************/void main(){P2=0xff;hour=12;min=0;sec=0;TMOD=0x11;TH0=(65536-50000)/256;TL0=(65536-50000)%256;TH1=(65536-50000)/256;TL1=(65536-50000)%256;EA=1;ET0=1;ET1=1;TR0=1;TR1=1;aa=0xff;while(1){time_change();display(table[hour/10],table[hour%10],table[min/10], table[min%10],table[sec/10],table[sec%10],0xff);}}。

51单片机电子秒表设计(Proteus)

51单片机电子秒表设计(Proteus)

51单片机电子秒表设计(Proteus)单片机硬件设计结课论文简易秒表设计专业:计算机科学与技术学生姓名:学号: 1307064248完成时间:2020年12月28日目录一、简述 (3)二、主要工具 (2)三、线路连接图(ISIS 7 Professional环境) (2)四、实现细则 (2)显示电路 (2)定时计数器 (3)五、程序 (4)六、模拟运行截图 (16)七、心得体会 (16)一、简述此秒表主要实现的功能是利用单片机内部定时计数器实现计时,然后通过LED组件显示出来。

因为这次设计时使用的是并排的6个数字显示LED,所以在计时时精确到10ms,最大即时59分59秒99。

实现过程中的主要部分包含显示和定时。

因为该LED与单片机相接的引脚只有14个,其中8个接在P0口上实现字形的显示,剩下的6个接在P2口用于选择6个数字型LED中的一个显示,所以每次只能显示一个数字。

要实现多个数字的显示需要快速显示每个LED,利用人的视觉差来实现多个数字同时显示。

计时只用到定时计数器T1(因为需要配合中断优先级,故没有使用T0,下文会详细讲到)。

另外还用到了两个按键,和两个LED灯(红、绿)。

按键用于控制开始计时和暂停、重置,LED 灯用于指示当前工作状态。

二、主要工具Keil uVision3,ISIS 7 Professional,AT89C51基础组件(试验箱)。

三、线路连接图(ISIS 7 Professional环境)四、实现细则显示电路数字型LED的实现原理为每个单元(共6个单元)含8个发光独立的LED灯,其中7个构成“8”字形,剩下的一个为小数点。

6个单元的每个相同位置引脚并联起来,最后通过8根线连接到单片机的P0口。

因此如果不把另外6根线连接上,每次通过P0口输出值时6个显示单元都会显示相同的图形(数字)。

LED单元组中另外6根引脚连接到单片机上,实现“按位显示”,并且是低电平选择,例如“111101”对应显示的是从右到左的第5个LED 单元。

51单片机电子秒表设计

51单片机电子秒表设计

实验二电子秒表设计(键盘状态转移法)一、实验内容用单片机实现电子秒表的功能,并采用0号键实现计时启动、停止和回零操作。

第一次按0号键,计时开始;第2次按0号键,计时停止;第3次按0号键,计时回零。

初始状态显示0.00;计时状态显示当前计时时间;停止计时显示最后计时时间。

二、实验程序设计对各个状态和各任务号分配如下:0状态:初始状态;1状态:计时状态;2状态:停止计时状态;123号任务:计时归零,显示初始值。

根据上述分析,建立状态表如下:程序流程图如图2.1所示。

表2.1 电子秒表键控状态表图2.1 电子秒表键控主程序流程图参考程序代码如下:LOAD BIT P1.2 ;串行命令加载,上升沿激活DIN BIT P1.0 ;串行数据输出,接CH451的数据输入DCLK BIT P1.1 ;串行数据时钟,上升沿激活DOUT BIT P3.3 ;INT1,键盘中断和键值数据输入,接CH451的数据输出KEY_F BIT 00H ;20H.0位作有键标志位ST EQU 21H ;存状态号KEY EQU 22H ;存放键盘中断中读取的键码KD EQU 23H ;存放键号MSEC EQU 24H ;百分之一秒计数单元SEC EQU 25H ;秒计数单元MIN EQU 26H ;分计数单元ORG 0000HAJMP MAINORG 000BH ;定时器中断入口LJMP CLOCKORG 0013HLJMP CH451_ INT1ORG 100HMAIN: MOV SP, #60H ;系统初始化MOV ST,#0CLR KEY_FMOV KD,#0MOV P1,#60H ;禁止P1接口上的其它芯片ACALL CH451_INIT ;CH451初始化DISP: LCALL DISPLAY ;当前计时值显示ML0: NOPJNB KEY_F,ML0 ;无按键等待CLR KEY_F ;有按键,清按键标志MOV DPTR, #STAB ;计算状态行地址MOV A, STMOV B, #2MUL ABADD A, DPLMOV DPL, AMOV A, BADDC A, DPHMOV DPH, A ;DPTR=#STAB + ST*2MOV A,KD ;读取次状态号RL A ;KD*2MOV R0,AMOVC A,@A+DPTR ;获得次状态号MOV ST,A ;更新STMOV A,R0INC AMOVC A,@A+DPTR ;得到任务号MOV B,#3MUL AB ;每个LJMP占3个字节MOV DPTR,#TASKJMP @A+DPTR ;散转TASK: LJMP P_0 ;跳转子程序0LJMP P_1 ;跳转子程序1LJMP P_2 ;跳转子程序2P_0: …;启动计时程序略,自己编写P_1: …;计时停止程序略,自己编写P_2: …;归零程序略,自己编写;状态表; K0;ST, PRSTAB:DB 1, 1 ; stat0DB 2, 2 ; stat1DB 0, 0 ; stat2;------------------------------------ ------------------------------------ CH451_INIT:略;CH451初始化子程序参考实验一;------------------------------------------------------------------------CH451_INT1: ;键盘中断子程序PUSH PSW ;现场保护PUSH ACCCLR EX1LCALL READ _CH451 ;读取键码ACALL GET_KD ;获得键号POP ACCPOP PSWSETB EX1CLR IE1 ;清中断标志RETI;------------------------------------------------------------------------ READ_CH451:; 略,参考实验一;------------------------------------------------------------------------GET_KD: ;获得键号子程序MOV A,KEYCJNE A,#40H,OUTMOV A,#0 ;0# 键;………在使用多个键的情况下,继续判断其它键号MOV KD,A ;存键号SETB KEY_F ;置有键标志位OUT: RET;------------------------------------------------------------------------CLOCK: ;略,定时器中断服务子程序,自己编写DISPLAY:略,显示子程序,自己编写;----------------------------------------------------------------------------END图2.2 定时器中断服务子程序流程图图2.3 显示子程序流程图二、实验操作步骤1. 打开KEILuvison3软件,建立工程,设置调试环境,实验板上电;2. 输入源程序,编译,连接,加载;3. 运行程序,观察数码管显示应为000.00;4. 按0键,启动计时,数码管显示计时时间;5. 再按0键,停止计时,数码管显示累计时时间;6. 再按0键,计时归零,数码管显示返回初始状态。

51单片机秒表计时(protues)

51单片机秒表计时(protues)

一、课设思路(1)利用单片机定时器中断和定时器计数方式实现秒定时。

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

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

(4)进一步学习单片机开发系统的整个流程。

二、所需元件名称数量7段数码管 2电阻10kΩ 1电阻1kΩ 8键盘开关 1电容10 µf 1电容30 pf 2晶振12 MHz 189C51 1万能板 1导线若干三、元件介绍AT89C51AT89C51是一种带4K字节FLASH存储器(FPEROM—Flash Programmable and Erasable Read Only Memory)的低电压、高性能CMOS 8位微处理器,俗称单片机。

AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。

单片机的可擦除只读存储器可以反复擦除1000次。

该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。

由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL 的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。

AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

主要特性:与MCS-51 兼容·4K字节可编程FLASH存储器·寿命:1000写/擦循环·数据保留时间:10年·全静态工作:0Hz-24MHz·三级程序存储器锁定·128×8位内部RAM·32可编程I/O线·两个16位定时器/计数器·5个中断源·可编程串行通道·低功耗的闲置和掉电模式·片内振荡器和时钟电路特性概述:AT89C51 提供以下标准功能:4k 字节Flash 闪速存储器,128字节内部RAM,32 个I/O 口线,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。

单片机基于PROTEUS仿真的秒表的课程设计

单片机基于PROTEUS仿真的秒表的课程设计

1 引言1.1 课程设计的目的1) 通过本次课程设计加深对单片机课程的全面认识和掌握,对单片机课程的应用进一步的了解。

2) 通过本次课程设计将单片机软硬件结合起来,对程序进行编辑,校验,锻炼理论联系实际的能力。

3) 综合运用《单片机原理及应用》课程的理论知识、与设计课题相关的参考资料、基本开发仪器及工具和实验室所具有的其它软硬件环境,设计一个典型的单片机应用系统并通过仿真调试出结果。

4) 通过本次课程设计提高学生的综合能力、动手能力、文献资料查阅能力,为毕业设计和以后工作打下一个良好的基础。

1.2 课程设计的任务用Proteus仿真MCS51系列单片机及其外围电路,用它与Keil开发工具结合,搭建单片机开发平台。

设计一个单片机控制的秒表系统。

利用单片机的定时器/计数器定时和记数的原理,结合显示电路、LED数码管以及按键来设计秒表计时器。

基本功能要求:用AT89C51设计一个2位LED数码显示“秒表”,开始时,显示“00”:第一次按下SP1后就开始从0~9.9计时,显示精度为0.1s;第二次按SP1后,计时停止,显示当前计时值;第三次按SP1后,及时停止归零。

1.3 课程设计的要求1)硬件设计:根据任务要求,完成单片机最小系统及其扩展设计,组成功能完整的系统;2)软件设计:根据秒表的设计要求,完成控制软件的编写与调试;3)用PROTEUS ARES绘制电路原理图并生成PCB图;4)PROTEUS仿真。

2 硬件设计2.1 设计方案介绍及工作原理说明该实验要求进行计时并在数码管上显示时间,则可利用proteus仿真软件设计电路并仿真AT89C51。

使用AT89C51单片机作为核心控制部件,采用12M晶体振荡器及微小电容构成振荡电路;用两个共阴极数码显示管作为显示部分,构成数字式秒表的主体结构,配合独立式键盘和复位电路完成此秒表的计时、清零、停止各项功能。

对于时钟,它有两方面的含义:一是指为保障系统正常工作的基准振荡定时信号,主要由晶振和外围电路组成,晶振频率的大小决定了单片机系统工作的快慢;二是指系统的标准定时时钟,即定时时间,是用软件实现,即用单片机内部的可编程定时/计数器来实现,但误差很大。

51单片机,实现秒表功能

51单片机,实现秒表功能
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
char cent=0;
char second=0;
char minite=0;
bit s2=0;
bit s3=0;
bit s4=0;
bit s5=0;
bit s6=0;
/********************************************************/
//函数名:void Delay1ms(uint count)
//功能:延时时间为1ms
//输入参数:count,1ms计数
//说明:总共延时时间为1ms乘以count,crystal=12Mhz
/*共阳数码管字型码*/
/*0,1,2,3,4,5,6,7,8,9,p.,灭*/
char code dis_code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x0c,0xff,0xbf};
/*P点显示代码序号*/
char data find_code[]={0,0,12,0,0,12,0,0};
/********************************************************/
/*延迟函数*/
void Delay1ms(uint count)
{
uint j;
while(count--!=0)
{
for(j=0;j<80;j++);
}
}
/************************************************************************/

51单片机,实现秒表功能

51单片机,实现秒表功能

严*****************************************************************************实现秒表功能说明:用5键控制.启动•停止・暂停.继续•清零采用中断控制方式.******************************************************************************/ #mclude<reg52.h>#inc lude<iiitrms.h> ^define uchar unsigned char ^define umt unsigned mt char cent=O;char second=0;char ininite=O;bit s2=0;bit s3=0;bit s4=0;bit s5=0;bit s6=0;严共阳数码管字型码引 严 0,1,2,3,4,5,6,7、&9,p ・,灭*/chai code dis_code[]={Oxc0,Oxf9,Oxa4>OxbO,0x99,0x92,0x82,0xf&0x80,0x90,0x0c,Ox 览Oxbf}; /*P 点显示代码序号可chai data fiiid_code[]={0,0.12.0,0,12,0.0};严*******************************************************/〃函 数名: void Delaylms(uint count)〃功能: 延时时间为Inis〃输入参数:countjms 计数 〃说明:总共延时时间为1 ms 乘以countxrystal= 12Mhz 严*******************************************************//*延迟函数*/void Delaylms(umt count) {uiiit j;wliile(count~!=0)foi(j=0;j<80:j++); }按S 2启动 按S3停止 按S4暂停按S 5继续按S6清零只有在清零或没有开始的情况下才有效 只有在启动的情况下才有效 只有在启动的情况下才有效 只有在暂停的情况下才有效 只有在停止的情况下才有效严***********************************************************************//*显示函数*/严***********************************************************************/ void dispQchar ij=Oxfe; chai- k; fbr(i=0;i<8;i-H-){P2=J ; k=find_code[i]; PO=dis_code[k]; Delaylms(l); j=_crol_(j4); }PO=Oxff;}*函数原型:keychuliQ; * 功 能:处理与键盘相连的Pl 丨1的内容,作为键值。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

51单片机秒表计时器目录摘要 (3)一、实训目的 (3)二、实训设备与器件 (3)(1)实验设备 (3)(2)实训器件 (3)三、实训步骤与要求 (4)(1)要求 (4)(2)方法 (4)(3)实训线路分析 (4)(4)软件设计 (4)(5)程序编制 (4)四、硬件系统设计 (4)五、软件系统设计 (5)六、系统调试 (9)七、实训总结与分析 (10)八、参考资料: (11)九、附录 (12)摘要:秒表是由单片机的P0口和P2口分别控制两个数码管,使数码管工作,循环显示从00—59。

同时,用一个开关控制数码管的启动与停止,另外加上一个复位电路,使其能正常复位,通常还使用石英晶体振荡器电路构成整个秒表的结构电路。

一、目的(1)利用单片机定时器中断和定时器计数方式实现秒定时。

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

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

(4)进一步学习单片机开发系统的整个流程。

二、元件(1)实训设备:单片机开发系统、微机、万用表、电烙铁等。

(2)实训器件:名称数量7段数码管 2电阻10k 1电阻1k 8键盘开关 1电容10微法 1电容30皮法 2晶振12M 189C51 1万能板 1导线若干三、步骤(1)要求:利用实训电路板,以2位LED右边1位显示个位,左边1位显示十位,实现秒表计时显示。

以一个按键开关实现启动、停止、清零等功能。

(2)方法:用单片机定时器T0中断方式,实现1秒定时;利用单片机定时器0方式1计数,实现00--59计数。

(3)实验线路分析:采用实训电路板,其原理图参见附录。

两个7段LED 数码管分别由单片机的P0口和P2口控制,使数码管显示从00—59的字样。

用一个开关控制数码管的启动与停止,另外加上一个复位电路,使其能正常复位。

另外在加上一个晶体振荡电路就够成了整个秒表的电路。

(4)软件设计:软件整体设计思路是主程序进行初始化,以按键开关按下的次数确定定时器的启动与否,LED通过中断的方式进行显示。

后二者间的联系是:按键按下,则定时器开始计时,中断后在LED上显示,不断循环;按键第二次按下时,定时器停止计时,LED不显示;按键第三次按下时,返回到初始状态重新开始。

秒定时采用定时器T0中断方式进行,60秒计数由定时器0采用方式1完成,中断及计数的开启与关闭受控于按键处理程序。

由上述设计思路可设计出软件流程图如图7.1所示。

(5)程序编制:编程时第一次按键为“启动”,第二次按键为“停止”,第三次按键为“清零”,因按键较少,在处理按键值时未采用散转指令“JMP”,而是采用条件转移指令“CJNE”,。

2位LED显示的数据由显示缓冲区30H~31H单元中的数据决定。

四、设计硬件电路的设计应从两个方面予以考虑。

一是根据应用系统总体设计的参数范围、测控速度与精度等技术指标要求选择单片机。

不同系列单片机或同一系列不同型号单片机芯片内部提供的资源状况各不相同,如ROM、RAM容量,定时/计数器、I/O接口、中断系统等硬件配置,应选择性价比最适合的单片机型。

二是在已选定单片机型号的基础上,根据应用系统的功能要求扩展单片机外部设备的配置,如键盘、打印机、A/D、D/A、报警电路、驱动电路及通用/专用I/O接口等。

硬件电路的设计原则如下:(1)在性价比满足应用系统要求的基础上,选择更可靠、更熟悉的单片机,缩短研制周期。

(2)尽可能选择较成熟的典型应用电路,以提高系统的可靠性。

(3)单片机内部的资源与外部扩展资源应在满足应用系统设计要求的基础上留有余地,为进一步升级和扩展其功能提供方便。

(4)应充分结合软件方案统筹考虑硬件结构,通常硬件功能较完善,其相应的软件就简单,但硬件成本较高;而硬件功能略低,其相应的软件就复杂。

实际中应尽量以软件替代硬件来降低成本。

(5)整个系统的相关器件应尽可能做到性能匹配,如电平、速度的匹配等。

(6)充分考虑整个系统的抗干扰设计,如选择具有抗干扰设计的单片机并充分筛选芯片与器件,在电路中采取隔离和屏蔽措施等。

根据以上设计原则,选择较熟悉的MCS-51系列单片机中具有内部程序存储器的89C51单片机;为实现LED数码显示和键盘控制,直接将开关键盘接到单片机的P3.7口,是单片机直接控制开关,其中:按第一次,定时器启动,即数码管开始显示数。

按第二次,定时器停止,即数码管上显示的数停止,显示当前的秒数。

按第三次,使数码管上的数复位。

五、软件系统设计待硬件电路接线完成后,通常可先编写简单的测试程序对硬件电路进行测试,排除硬件电路设计中存在的错误。

然后根据设计任务的要求确定系统程序的整体结构,尽可能采用模块化程序设计的方法,将任务划分为相对独立的功能模块,明确各模块的功能、时间顺序和相互关系,如系统管理、数据与信息采集、报警处理、误差处理、标度变换、数据处理、输出控制等;列出详细的资源划分表,确定各模块的出口和入口状态;建立必要的数学模型,正确描述出系统中输入和输出间的数学关系;画出各程序模块的详细流程图;根据流程图逐一编写程序;最后将各个模块连接成完整的程序。

(1)软件设计的基本原则。

①程序整体结构清晰、简洁、流程合理,主程序尽可能简单明了。

②各种功能的实现应采用模块化、子程序化,以便于编制、阅读、连接、移植、修改和调试。

③对各子程序的入口、出口条件,占用的资源要明确,以便于分析、调试和共享。

④程序存储区、数据存储区、寄存器区、位寻址区、堆栈区应规划合理,做到既节约资源又不会发生相互间的冲突。

⑤运行状态标志化管理,对各功能程序的运行结果、操作状态应设置状态标志,以便查询和实现运行控制。

⑥运用软件或软硬件相结合等方法抑制干扰,提高系统的抗干扰能力。

⑦必要时可结合硬件采取加密措施。

(2)资源分配:选用定时/计数器T0,定时方式1工作,每隔50ms溢出中断一次。

(3) 软件流程框图(5)程序清单SECOND EQU 30HTCOUNT EQU 31HKCOUNT EQU 32HKEY BIT P3.7ORG 00HSJMP STARTORG 0BHLJMP INT_T0START: MOV DPTR,#TABLEMOV P0,#3FHMOV P2,#3FH ;开始,数码管显示"00"MOV SECOND,#00HMOV TCOUNT,#00HMOV KCOUNT,#00HMOV TMOD,#01H ;定时器0工作在方式1MOV TL0,#(65536-50000)/256MOV TH0,#(65536-50000)%256K1: JB KEY,$ ;等待按键LCALL DELAYJB KEY,$MOV A,KCOUNTCJNE A,#00H,K2 ;判断按键次数SETB TR0 ;第1次按键,启动定时器MOV IE,#82HJNB KEY,$INC KCOUNT ;按键抬起,按键次数值加1LJMP K1K2: CJNE A,#01H,K3CLR TR0 ;第2次按键,关闭定时器MOV IE,#00HJNB KEY,$INC KCOUNT ;按键抬起,按键次数值加1LJMP K1K3: CJNE A,#02H,K1 ;第3次按键,返回初始状态JNB KEY,$LJMP STARTINT_T0: MOV TH0,#(65536-50000)/256MOV TL0,#(65536-50000)%256INC TCOUNTMOV A,TCOUNTCJNE A,#2,I2 ;是否计够0.1秒MOV TCOUNT,#00HINC SECONDMOV A,SECONDCJNE A,#100,I1 ;是否计够10秒MOV SECOND,#00HI1: MOV A,SECONDMOV B,#10DIV ABI3:CJE A,#6,I4CJE A,#7,I4CJE A,#8,I4CJE A,#9,I4I4: CLR AMOVC A,@A+DPTR ;显示时间MOV P0,AMOV A,BMOVC A,@A+DPTRMOV P2,AI2: RETITABLE: DB 3FH,06H,5BH,4FH,66H6DH,7DH,07H,7FH,6FHDELAY: MOV R6,#20D1: MOV R7,#250DJNZ R7,$DJNZ R6,D1RETEND六、系统调试1)输入源程序输入源程序时,应以西文方式输入字母和符号,且中文注释前要加分号。

2)对源程序进行汇编和纠错根据自动汇编提供的错误信息逐条纠正错误,直至汇编信息提示“错误(0)”、“汇编结束”。

3)确定调试方案在调试程序前一定要认真分析源程序,明确各功能程序运行的预期结果。

然后结合源程序应达到的结果,确定出如何通过某些关键参数和实验现象检验程序运行结果正确与否。

例如:程序运行过程中路径的变化、累加器A内容的变化、其他特殊寄存器内容的变化等。

并针对具体的分析和观察对象选择较合适的调试方法。

如单步运行、跟踪运行、连续运行、快速运行至光标处、设置断点等调试方法。

4)调试程序(1)调试主程序。

主程序运行后,在无任何按键输入时观察有无显示,时钟是否工作,其时、分、秒显示的变化过程是否正确。

若运行结果不正确,首先应根据程序运行的实际现象分析判断哪些因素可引起相关故障,再通过调试方法逐一认证和排除。

例如:若定时/计数器的初始化出错,则时钟将不能工作;若显示程序出错,则将不能正确显示时钟单元内容;若定时/计数器中断服务子程序出错,则其显示数据的变化规律将不正常。

(2)调试子程序。

在调试主程序时,必然要调用相关的功能子程序。

因此,首先应明确子程序的具体功能,通过对子程序的分析,确定子程序的入口、出口参数及相关标识位的状态,然后在满足入口条件的状态下,设法检查从主程序进入子程序,再由子程序返回到主程序的运行过程。

可采用跟踪运行或运行至光标处的方法,检查从主程序进入子程序内部的运行过程,再通过单步运行等方法检查子程序内部的运行情况和返回主程序的过程。

通过反复调试,发现并排除软件与硬件存在的各类问题,以满足系统设计的预期目的。

5)脱机运行将调试已通过的程序写入单片机内部(或外部)程序存储器中,再将写好程序的单片机(或存储器)插入已设计好的单片机用户板上,把仿真系统与用户板脱离开来,最后将所设计的单片机应用系统独立通电运行。

七、实训总结与分析通过本次智能仪器仪表的课程设计,各方面又得到了进一步的提高。

从整个单片机开发系统的把握上,感觉比以前更具有信心,当然,在焊接、调试的时候也显得更轻松,至少知道从哪些地方入手,怎样判断正确与否。

尤其是在调试大型程序时,需先根据要求划分模块,优化结构;再根据各模块特点确定何为主程序,何为子程序,何为中断服务程序,相互间如何调用;再根据各模块性质和功能将各模块细化,设计出程序流程图;最后才根据各模块流程图编制具体程序。

相关文档
最新文档