电子表程序的设计说明

合集下载

简易的电子表设计报告(DOC)

简易的电子表设计报告(DOC)

简易的电子表设计报告设计目的1.实现简单的记时功能2.实现简单的调整时间功能3.实现整点报时整体思想如图:一、内部电路设计1、通过分频电路得到1Hz的秒脉冲制作一个分频器,将10MHz脉冲信号变成1Hz的秒脉冲信号10分频:生成元器件cc:生成元器件如图:(在后面仿真时用了1MHz脉冲信号)2、利用两片74160组成60进制递增计数器(秒钟、分钟部分)利用两片十进制递增计数器74160组成的同步60进制递增计数器如图:秒钟部分电路:其中个位计数为十进制形式。

个位与十位计数器之间采用同步级连方式,将个位计数器的进位输出控制端RCO接至十位计数器容许端ENP,ENT,完成个位对十位计数器的进位控制。

选择十位计数器QC与QA和个位计数器QD和QA做反馈端,经与非门输出控制LDN 置数端,接成六进制计数形式。

当计数器状态为59时,重新置数00000000,并输出一个进位(s-jw)。

其仿真波形为:分钟部分电路与秒钟部分相似,当计数器状态为59时,重新置数00000000,并输出一个进位(m-jw)。

分钟部分电路:其仿真波形为:3、用两片74160组成24进制递增计数器(时钟部分)由两片74160组成的能实现24进制转换的同步递增计数器如图:小时部分电路:其仿真波形为:图中个位与十位计数器均为十进制计数形式,采用同步级连方式。

选择十位计数器的输出端QB和个位计数器的输出端QC作为反馈,可实现24进制递增计数。

4、内部整体电路将以上各电路分别集成秒控制块(S-CT),分控制块(M-CT)和小时控制块(H-CT),并加上分频电路,各控制端和各个输出端,连接成时钟内部控制电路。

5、显示译码器采用七段显示译码器7448:根据逻辑功能知道,显示译码器主要完成将四位二进制输入控制数码管显示(0~9);可以完成对数字的显示。

6、校时电路原理实际的数字钟电路由于秒信号的精确性和不可能做到完全准确无误,加之电路中其他原因,数字钟总会产生其他原因,数字钟总会产生走时误差的现象,因此,电路中就应该有校准时间的功能的电路。

【精品】电子表设计

【精品】电子表设计

摘要单片机自20世纪70年代问世以来,以其极高的性能价格比,受到人们的重视和关注,应用很广、发展很快.单片机体积小、重量轻、抗干扰能力强、环境要求不高、价格低廉、可靠性高、灵活性好、开发较为容易。

由于具有上述优点,在我国,单片机已广泛地应用在工业自动化控制、自动检测、智能仪器仪表、家用电器、电力电子、机电一体化设备等各个方面,而51单片机是各单片机中最为典型和最有代表性的一种。

这次设计是以AT89C51芯片为核心,辅以必要的电路,设计了一个简易的电子表,它由5V直流电源供电,通过6个共阴极七段数码管能够准确显示时间的时、分、秒,还可以通过键盘校准时间,设置闹钟以及整点报时,和闹铃.该电子表的校准时间可以校准到秒,精确度极高。

关键词:键盘;MAX7219;AT89C51;共阴极七段数码管目录摘要 (3)关键词 (3)引言 (5)一、方案的选择和比较 (5)1。

1、数字时钟方案 (5)1。

2、数码管显示方案 (5)1。

3、单片机型号的选择 (5)二、硬件电路设计 (6)2。

1、系统总体设计 (6)2.2、振荡电路设计 (6)2。

3、复位电路 (6)2。

4、键盘电路设计 (7)2。

5、显示电路设计 (7)2。

6、蜂鸣器电路设计 (8)三、软件设计 (8)3。

1、软件规划 (8)3。

2、主程序 (8)3.3、中断子程序 (8)3。

4、LED显示子程序 (8)3。

5、键盘子程序 (9)四、元件清单 (14)五、系统调试 (14)六、小结 (14)参考文献 (14)附录一程序清单 (15)附录二电路图 (23)引言自从电子表发明以来,由于电子表电子表计时准确,不用每天上弦,价格便宜,很受消费者喜爱,。

这次根据老师提供的微机课程设计的题目,我决定选择了电子表设计,设计中以AT89C51芯片为核心,并且选用专门驱动LED共阴极数码管的MAX7219芯片制作显示电路,通过软件设计,可以正常的完成时间的调整,闹钟的设置,整点报时以及闹铃功能,我经过仔细分析设计题目的要求,确定了电子表的设计方案,并且用Proteus 软件画出原理图,再用Keil51软件把程序调试出来,最后用Proteus软件把硬件电路和软件结合起来进行硬件和软件的整体调试。

电子手表教学过程设计

电子手表教学过程设计

电子手表教学过程设计一、引言随着科技的不断发展,电子手表成为了人们生活中重要的装备之一。

它不仅仅可以显示时间,还具备了多种功能,如计步、心率监测、通知提醒等。

在这篇文档中,我们将讨论如何设计一个电子手表的教学过程,帮助学生快速上手使用电子手表,并充分发挥其功能。

二、目标通过本教学过程的设计,我们的目标是让学生能够:1.了解电子手表的基本功能和操作方法;2.学会使用电子手表进行时间设置、计步、心率监测等操作;3.理解电子手表在生活中的实际应用场景。

三、教学内容和步骤1. 介绍电子手表的基本功能和特点教师可以通过简短的讲解和示范,向学生介绍电子手表的基本功能,如时间显示、计步功能、心率监测等。

同时,可以对不同型号的电子手表进行对比,让学生了解不同功能之间的差异。

2. 演示电子手表的时间设置在这一步骤中,教师可以详细讲解电子手表的时间设置方法,并进行实际演示。

学生可以跟随教师的指导,尝试在自己的电子手表上进行时间设置,并检查设置是否成功。

3. 指导学生进行计步操作教师可以向学生介绍电子手表的计步功能,并详细解释如何进行计步操作。

学生可以按照教师的示范,尝试在自己的电子手表上启动计步功能,并记录自己的步数。

4. 演示心率监测操作在这一步骤中,教师可以向学生演示电子手表的心率监测功能,并说明背后的工作原理。

学生可以跟随教师的指导,在自己的电子手表上进行心率监测,并观察结果。

5. 引导学生进行其他功能的探索在学生熟悉基本功能后,教师可以鼓励学生进一步探索电子手表的其他功能,如通知提醒、闹钟设置等。

学生可以自由选择自己感兴趣的功能进行探索,并和同学们分享自己的发现和体验。

四、实践活动为了加深学生对于电子手表的理解和应用,可以组织一些实践活动,例如:1. 时间比赛:学生们可以利用电子手表的计时功能,进行一场时间比赛,看谁最快完成特定任务。

2. 计步挑战:学生们可以利用电子手表的计步功能,进行一场计步挑战,看谁能走最多的步数。

电子手表秒表课程设计

电子手表秒表课程设计

电子手表秒表课程设计一、课程目标知识目标:1. 学生能够理解电子手表秒表的基本功能与原理;2. 学生能够掌握电子手表秒表的操作方法和使用步骤;3. 学生能够了解电子手表秒表在生活中的应用。

技能目标:1. 学生能够独立操作电子手表秒表,进行简单的计时和计次任务;2. 学生能够运用电子手表秒表解决实际问题,如测量运动时间、制作简单的计时器等;3. 学生能够通过实际操作,培养观察、分析、解决问题的能力。

情感态度价值观目标:1. 学生能够认识到电子手表秒表在生活中的重要性,增强对科技产品的兴趣和探索欲望;2. 学生在合作完成任务的过程中,培养团队协作精神和沟通能力;3. 学生在实践操作中,体验成功解决问题的喜悦,增强自信心和自主学习意识。

课程性质:本课程为实用技术类课程,旨在让学生在实际操作中掌握电子手表秒表的使用方法,培养解决实际问题的能力。

学生特点:六年级学生具备一定的认知能力和动手操作能力,对新鲜事物充满好奇心,善于合作与分享。

教学要求:结合学生特点,注重实践操作,以学生为主体,教师引导和辅导,培养学生的动手能力和创新思维。

通过本课程的学习,使学生能够将所学知识应用于实际生活,提高综合素质。

二、教学内容1. 电子手表秒表基础知识:介绍电子手表秒表的发展历程、基本原理、功能特点及分类。

- 教材章节:第一章第一节《电子手表秒表概述》2. 电子手表秒表操作方法:详细讲解电子手表秒表的按键功能、操作步骤及注意事项。

- 教材章节:第一章第二节《电子手表秒表操作方法》3. 电子手表秒表在实际应用中的案例:介绍电子手表秒表在运动计时、实验测量等领域的应用实例。

- 教材章节:第二章《电子手表秒表的运用》4. 实践操作:安排学生进行电子手表秒表的实践操作,包括基本功能的使用、简单计时和计次任务等。

- 教材章节:第三章《电子手表秒表实践操作》5. 创新设计:鼓励学生运用所学知识,进行电子手表秒表的创意设计,解决实际问题。

电子手表设计课程设计

电子手表设计课程设计

电子手表设计课程设计一、课程目标知识目标:1. 学生能理解电子手表的基本原理,掌握其内部电路组成和功能。

2. 学生能了解电子手表的设计流程,包括需求分析、电路设计、PCB布线等环节。

3. 学生熟悉电子手表的主要部件,如显示屏、按键、电池等,并了解其工作原理。

技能目标:1. 学生能够运用所学知识,完成一个简单的电子手表设计方案。

2. 学生能够利用绘图软件(如Altium Designer)进行电路原理图绘制和PCB 布线。

3. 学生能够通过实际操作,组装和调试电子手表。

情感态度价值观目标:1. 培养学生对电子产品的兴趣和好奇心,激发创新意识。

2. 培养学生团队协作精神,学会与他人共同解决问题。

3. 增强学生环保意识,关注电子废弃物的处理和回收。

课程性质:本课程为实践性较强的课程,结合电子技术、电路原理等知识,引导学生动手设计电子手表。

学生特点:学生具备一定的电子基础知识和动手能力,对电子产品有浓厚兴趣。

教学要求:注重理论与实践相结合,强调动手实践,培养学生创新思维和问题解决能力。

通过课程学习,使学生能够独立完成电子手表的设计与制作。

二、教学内容1. 电子手表基本原理:讲解电子手表的工作原理,引导学生了解内部电路组成及其功能。

相关教材章节:第三章 电子时钟与电子手表2. 电子手表设计流程:介绍电子手表设计的基本步骤,包括需求分析、电路设计、PCB布线等。

相关教材章节:第四章 电子产品设计流程3. 电子手表主要部件:分析电子手表的主要部件,如显示屏、按键、电池等,并讲解其工作原理。

相关教材章节:第二章 常用电子元器件4. 电路原理图绘制:教授如何利用绘图软件(如Altium Designer)进行电子手表电路原理图绘制。

相关教材章节:第五章 电路原理图绘制与PCB设计5. PCB布线与制作:指导学生进行电子手表PCB布线,并了解制作过程。

相关教材章节:第六章 PCB布线与制作6. 电子手表组装与调试:讲解电子手表组装方法,教授调试技巧。

电子秒表设计方案

电子秒表设计方案

电子秒表设计方案概述本文档旨在介绍一种电子秒表的设计方案。

电子秒表是一种用于测量时间间隔的仪器,通常用于跑步比赛、计时比赛或其他需要时间测量的场合。

本设计方案将介绍电子秒表的硬件设计、软件设计以及功能特点。

硬件设计电子元件电子秒表的硬件设计需要以下电子元件:1.微控制器:选择一种适合的微控制器作为核心处理器,例如STM32系列或Arduino系列。

2.显示屏:选用适宜的显示屏以显示计时结果,液晶显示屏或LED数码管都是常见的选择。

3.电池:选择适宜的电池作为电子秒表的电源,充电电池是常用的选择。

4.按钮:选择适宜的按钮用于计时开始、停止和复位等操作。

电路设计基于以上电子元件,可以设计出以下电路:1.连接微控制器和显示屏:使用适宜的接口将微控制器与显示屏相连,以实现计时结果的显示。

2.连接微控制器和按钮:将按钮连接到微控制器的输入引脚,以实现计时开始、停止和复位等功能。

3.连接微控制器和电池:将电池连接到微控制器的电源引脚,为电子秒表提供电力。

软件设计电子秒表的软件设计包括以下几个方面:1.计时功能:通过微控制器的定时器模块实现计时功能,每个定时周期递增计时器的值。

2.按钮功能:通过检测按钮的状态变化,实现计时开始、停止和复位等功能。

3.显示功能:根据计时器的值,将结果显示在显示屏上,可以显示小时、分钟、秒或者毫秒级的时间。

4.能耗优化:通过合理设计代码以及使用低功耗模式,优化电子秒表的能耗。

功能特点基于以上设计方案,本电子秒表具备以下功能特点:1.精确计时:采用微控制器的定时器模块进行计时,可以实现精确的时间测量。

2.便捷操作:通过按钮实现计时开始、停止和复位等功能,用户可以方便地操作电子秒表。

3.显示清晰:选择适宜的显示屏,可以清晰地显示计时结果,便于用户读取。

4.低能耗:通过软件设计和低功耗模式的应用,优化电子秒表的能耗,延长使用时间。

5.稳定可靠:选择质量可靠的电子元件以及合理的电路设计,保证电子秒表的稳定性和可靠性。

电子表功能程序

电子表功能程序

一电子表*// 利用计时器实现电子表功能,可以通过四个按键对时间进行调整//key1按下抬起后,进入调正状态,被调整的信息闪烁,同时按键key2、key3调加减,//按下key4又抬起后,调整完毕,正常显示。

/****************************************************************************** /#include<reg51.h>#define uchar unsigned charcode uchar seven_seg[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};code uchar seven_bit[] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf};uchar key1_down,key2_down,key3_down,key4_down,key1_mode; //key1_mode为调整模式标识uchar i = 0,j = 0,k,flash;char sec,min,hou;sbit key1 = P3^3; //进入和修改调整模式sbit key2 = P3^4; //增加sbit key3 = P3^5; //减小sbit key4 = P3^6; //退出调整模式sbit dop = P0^7;void delay (uchar x) //延迟函数{while(x--);}void key_scan(void)//按键扫描函数{if(key1 == 0) //按键1按下,进入时间调整,key1_mode=1调秒,同时秒闪烁{key1 = 1;delay(200);if(key1 == 0)key1_down = 1;}if(key1 == 1 && key1_down == 1){key1_mode++;key1_down = 0;if(key1_mode == 4)key1_mode = 1;}if(key2 == 0) //按键2{key2 = 1;delay(200);if(key2 == 0)key2_down = 1;}if(key2 == 1 && key2_down == 1 && key1_mode == 1) {key2_down = 0;sec++;}if(key2 == 1 && key2_down == 1 && key1_mode == 2) {key2_down = 0;min++;}if(key2 == 1 && key2_down == 1 && key1_mode == 3) {key2_down = 0;hou++;}if(key3 == 0) //按键3{key3 = 1;delay(200);if(key3 == 0)key3_down = 1;}if(key3 == 1 && key3_down == 1 && key1_mode == 1) {key3_down = 0;sec--;if( sec < 0)sec = 59;}if(key3 == 1 && key3_down == 1 && key1_mode == 2) {key3_down = 0;min--;if( min < 0)min = 59;}if(key3 == 1 && key3_down == 1 && key1_mode == 3) {key3_down = 0;hou--;if( hou < 0)sec = 23;}if(key4 == 0) //按键4{key4 = 1;delay(200);if(key4 == 0)key4_down = 1;}if(key4 == 1 && key4_down == 1){key4_down = 0;key1_mode = 0;}}void timer0_init(void) //初始化{TMOD = 0x01;TH0 = 0xf8; //(65536 - 2000)/ 256;TL0 = 0x30; //(65536 - 2000)% 256;TR0 = 1;EA = 1;ET0 = 1;}void timer0_isr(void) interrupt 1 //中断{TR0 = 0;EA = 0;TH0 = 0xf8; //(65536 - 2000)/ 256;TL0 = 0x30; //(65536 - 2000)% 256;TR0 = 1;EA = 1;i++;P0 = 0xff; //仿真时用,关闭所有数码管的显示,以防止发生串扰if(i >= 250) //半秒{flash = ~flash;if(key1_mode == 0)k++;i = 0;}if(k >= 2) //刚好1秒{k = 0;sec++;}if(sec>= 60){sec = 0;min++;}if(min >= 60){min = 0;hou++;}if(hou >= 24)hou = 0;if(key1_mode == 0) //正常显示{switch(j){case 0:P0 = seven_seg[sec%10] ;break;case 1:P0 = seven_seg[sec/10];break;case 2:P0 = seven_seg[min%10];dop = flash;break;case 3:P0 = seven_seg[min/10];break;case 4:P0 = seven_seg[hou%10];dop = flash;break;case 5:P0 = seven_seg[hou/10];break;}}if(key1_mode == 1) //选定秒{switch(j){case 0:P0 = seven_seg[sec%10] | flash;break;case 1:P0 = seven_seg[sec/10] | flash;break;case 2:P0 = seven_seg[min%10] & 0x7f ;break;case 3:P0 = seven_seg[min/10];break;case 4:P0 = seven_seg[hou%10] & 0x7f ;break;case 5:P0 = seven_seg[hou/10];break;}}if(key1_mode == 2) //选定分{switch(j){case 0:P0 = seven_seg[sec%10] ;break;case 1:P0 = seven_seg[sec/10] ;break;case 2:P0 = seven_seg[min%10] & 0x7f | flash ;break;case 3:P0 = seven_seg[min/10] | flash;break;case 4:P0 = seven_seg[hou%10] & 0x7f ;break;case 5:P0 = seven_seg[hou/10];break;}}if(key1_mode == 3) //选定时{switch(j){case 0:P0 = seven_seg[sec%10] ;break;case 1:P0 = seven_seg[sec/10] ;break;case 2:P0 = seven_seg[min%10] & 0x7f ;break;case 3:P0 = seven_seg[min/10] ;break;case 4:P0 = seven_seg[hou%10] & 0x7f | flash ;break;case 5:P0 = seven_seg[hou/10] | flash;break;}}P2 = seven_bit[j];j++;if(j >= 6)j = 0;}void main(void){sec = 55;min = 59;hou = 10;timer0_init();while(1)key_scan();//扫描按键}二功能:本程序是让P0^0口LED连续闪烁/**********************************************************/#include<reg51.h>sbit LED0 = P0^0; //可寻址的位P0.0定义,同时P0.0端口输出位P0.0的电平值void delay(unsigned int i) //延时函数{while(i--);}void main(void){P0 = 0x00;while(1){LED0 = !LED0; //LED0的状态改变一次delay(30000); //调用延时函数,延时一段时间}}三动态显示#ifndef __REG51_H__#define __REG51_H__/* BYTE Register */sfr P0 = 0x80;sfr P1 = 0x90;sfr P2 = 0xA0;sfr P3 = 0xB0;sfr PSW = 0xD0;sfr ACC = 0xE0;sfr B = 0xF0;sfr SP = 0x81;sfr DPL = 0x82;sfr DPH = 0x83;sfr PCON = 0x87;sfr TCON = 0x88;sfr TMOD = 0x89;sfr TL0 = 0x8A;sfr TL1 = 0x8B;sfr TH0 = 0x8C;sfr TH1 = 0x8D;sfr IE = 0xA8;sfr IP = 0xB8;sfr SCON = 0x98;sfr SBUF = 0x99;/* BIT Register *//* PSW */sbit CY = 0xD7;sbit AC = 0xD6;sbit F0 = 0xD5;sbit RS1 = 0xD4;sbit RS0 = 0xD3;sbit OV = 0xD2;sbit P = 0xD0;/* TCON */sbit TF1 = 0x8F; sbit TR1 = 0x8E; sbit TF0 = 0x8D; sbit TR0 = 0x8C; sbit IE1 = 0x8B; sbit IT1 = 0x8A; sbit IE0 = 0x89; sbit IT0 = 0x88;/* IE */sbit EA = 0xAF; sbit ES = 0xAC; sbit ET1 = 0xAB; sbit EX1 = 0xAA; sbit ET0 = 0xA9; sbit EX0 = 0xA8;/* IP */sbit PS = 0xBC; sbit PT1 = 0xBB; sbit PX1 = 0xBA; sbit PT0 = 0xB9; sbit PX0 = 0xB8;/* P3 */sbit RD = 0xB7; sbit WR = 0xB6; sbit T1 = 0xB5; sbit T0 = 0xB4; sbit INT1 = 0xB3; sbit INT0 = 0xB2; sbit TXD = 0xB1; sbit RXD = 0xB0;/* SCON */ sbit SM0 = 0x9F; sbit SM1 = 0x9E; sbit SM2 = 0x9D; sbit REN = 0x9C; sbit TB8 = 0x9B; sbit RB8 = 0x9A; sbit TI = 0x99; sbit RI = 0x98;#endif四*********************************************************************///读取DS18B20温度,通过数码管显示,在温度超过35度时继电器吸合/*********************************************************************/#include<reg51.h>#include"18B20.c"#define uchar unsigned char#define uint unsigned intcode uchar seven_seg[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};code uchar seven_bit[] = {0xfe,0xfd,0xfb,0xf7};uchar cp;uint temp1,temp2;sbit jdq = P2^6;void timer0_init(void) //初始化{TMOD = 0x01;TH0 = 0xec;TL0 = 0x78;TR0 = 1;EA = 1;ET0 = 1;}/*****************************************************************************/ void timer0_isr(void) interrupt 1 //中断{uchar j;TR0 = 0;EA = 0;TH0 = 0xec;TL0 = 0x78;TR0 = 1;EA = 1;cp++;if(cp >= 200) //刚好1秒{cp = 0;temp1 = Read_Temperature();//得到温度if((temp1 & 0x80) == 0x80) //如果温度为负值{temp2 =0x7f & ~temp1 + (0x0f & ~c) /15; //整数处理,需要加上小数来的借位c = 0x0f & ~c + 0x01; //小数处理}else temp2 = temp1;//如果温度为正值,不用处理}P0 = 0xff;switch(j){case 0:P0 = seven_seg[c * 10/16];break;//显示小数case 1:P0 = 0x7f & seven_seg[temp2 % 10];break;//显示个位并加上小数点case 2:{if((temp2 < 10) && (temp1 < 0x80)){P0 = 0xff;break;}//如果温度小于10度,且为正值,十位0不显示if((temp1 > 0x80) && (temp2 < 10)){P0 = 0xbf;break;}//如果温度小于10度,且为负值,十位0不显示,只显示“-”P0 = seven_seg[temp2 / 10]; break;//如果温度大于10度,10位正常显示}case 3:{if((temp1 > 0x80) && ((temp2 / 10) > 0))//如果温度为负值,且十位不为0,百位显示“-”P0 = 0xbf;break;}}P2 = seven_bit[j];j++;if(j >= 4)j=0;}void main(void){timer0_init();while(1);}五//ds1302驱动//2011年5月/****************************************************************************** ***/#include<reg51.h>#define uchar unsigned char#define uint unsigned intuchar sec,min,hour,date,moon,year;uchar time[6];uchar datt[6];sbit rst = P1^3;sbit scl = P1^1;sbit sd = P1^2;/***********************************对DS1302初始化++******************************/void ds1302_init(void){rst = 0;scl = 0;rst = 1;}/*********************************对DS1302写1字节函数*****************************/void write_ds1302_onebyte(uchar date){uchar i;for(i=8;i>0;i--){scl = 0;sd = (bit)(date & 0x01);scl = 1; //上升沿date = date >> 1;}}/*********************************从DS1302读一字节函数*****************************/uchar read_ds1302_onebyte(void){uchar i,dat;for(i = 8;i > 0;i--){scl = 1;scl = 0; //下降沿dat = dat >> 1;if(sd)dat = dat | 0x80;}return(dat);}/*****************************对DS1302的某一地址写一字节函数***********************/void write_ds1302_add_dat(uchar add,uchar dat){ds1302_init();write_ds1302_onebyte(add);write_ds1302_onebyte(dat);scl = 1;rst = 0;}/*****************************从DS1302的某一地址读一字节函数***********************/uchar read_ds1302_add(uchar add) //读1302数据{uchar dat_temp;ds1302_init();write_ds1302_onebyte(add);dat_temp = read_ds1302_onebyte();scl = 1;rst = 0;return(dat_temp);}/********************************8421BCD码到十进制转换*****************************/uchar BCD_DEC_conv(uchar x){uchar dec;dec = 0x0f & x;x = x >> 4;dec = dec + x * 10;return(dec);}uchar DEC_BCD_conv(uchar x){uchar bcd;bcd = x % 10;x = x / 10;x = x << 4;bcd = bcd | x ;return(bcd);}void get_ds1302_time(void) //获取1302的时间数据(时、分、秒),存入time1数组中{uchar d;d = read_ds1302_add(0x81); //读秒sec = BCD_DEC_conv(d); //得到秒d = read_ds1302_add(0x83); //读分min = BCD_DEC_conv(d); //得到分d = read_ds1302_add(0x85); //读小时hour = BCD_DEC_conv(d); //得到小时d = read_ds1302_add(0x87); //读日date = BCD_DEC_conv(d); //得到日d = read_ds1302_add(0x89); //读月moon = BCD_DEC_conv(d); //得到月d = read_ds1302_add(0x8d); //读年year = BCD_DEC_conv(d); //得到年}。

多功能电子表设计说明书

多功能电子表设计说明书

目录1 多功能电子表设计目的及意义2多功能电子表设计内容(1)总体设计方案简介(2)单元电路设计(3)总电路图(4)软件设计,编程思路,给出流程图,程序清单(附注释)(5)仿真结果3 结果分析4 设计总结5设计心得参考文献附录1.多功能电子表设计目的及意义1.1多功能电子表设计目的:目的:学生通过自己动手设计制作,将电子技术相关理论知识与制作实践相结合,提高学生的动手能力,加深对电子技术原理的理解,增加学习电子技术的兴趣,为今后投入电子技术的开发应用打好基础。

1.2多功能电子表设计意义:意义:2.多功能电子表的设计内容2.1总体设计方案简介1.功能简介及摘要多功能电子表是一种用数字显示秒﹑分﹑时的记时装置,与传统的机械钟相比,他具有走时准确﹑显示直观﹑无机械传动装置等优点,因而得到了广泛的应用:小到人们的日常生活中的电子手表,大到车站﹑码头﹑机场等公共场所的大型数显电子钟。

本课程设计要用通过简单的逻辑芯片实现数字电子钟。

要点在于用555芯片连接输出为一秒的多谐振荡器用于时钟的秒脉冲,用74LS160(10进制计数器)74LS00(与非门芯片)等连接成60和24进制的计数器,再通过七段数码管显示,构成了简单数字电子钟。

2.设计流程多功能电子表一般由振荡器、分频器、译码器、显示器等部分组成。

这些都是数字电路中应用最广泛的基本电路。

多功能电子表的基本计流程框图如下所示;图1 结构框图3.各部分功能说明1、振荡器振荡器是多功能电子表的核心,它的作用是产生一个频率标准,即时间标准信号,然后再由分频器分成秒脉冲,即“秒”时间脉冲。

因此正当其频率的精度与稳定度基本决定了多功能电子表的质量。

为了产生稳定的时间标准信号,一般采用石英晶体振荡器。

从多功能电子表的精度考虑,晶体振荡频率越高,秒针的时间精度越高。

但这会使振荡器的耗电量增大,分频器的级数也要增多,所以在确定频率时,应当天考虑这两方面因素,然后再选用石英晶体振荡器型。

电子表格流程设计方案

电子表格流程设计方案

电子表格流程设计方案电子表格流程设计方案电子表格是一种非常常用的办公工具,可以用来存储、整理和分析数据。

在进行电子表格流程设计时,我们需要考虑以下几个方面:1.明确目标和需求:在设计电子表格流程之前,我们需要明确目标和需求。

例如,我们可能需要一个用来记录销售数据和计算销售额的电子表格,或者一个用来追踪项目进展和计划的电子表格。

只有明确目标和需求,才能设计出符合实际需要的电子表格流程。

2.确定数据和字段:在设计电子表格流程时,我们需要确定需要存储和分析的数据以及相应的字段。

例如,在销售数据电子表格中,我们可能需要存储销售日期、销售额、销售人员等数据,并设定相应的字段格式和类型。

3.设定数据输入和验证规则:在设计电子表格流程时,我们需要设定数据输入和验证规则,以确保数据的准确性和完整性。

例如,在销售数据电子表格中,我们可以设定销售额只能为正数,并设定日期必须符合一定的格式。

4.设置公式和函数:电子表格的一个重要功能是能够进行数据计算和分析。

在设计电子表格流程时,我们需要设置公式和函数,以便自动计算和分析数据。

例如,在销售数据电子表格中,我们可以使用SUM函数计算销售额的总和。

5.设计数据可视化和报表:在设计电子表格流程时,我们还需要考虑如何将数据进行可视化和生成报表。

例如,我们可以使用图表和图形来展示销售数据的趋势和比较,或者生成销售报表以便查看和分享。

总结起来,电子表格流程设计需要明确目标和需求,确定数据和字段,设定数据输入和验证规则,设置计算公式和函数,设计数据可视化和报表。

通过合理的设计,电子表格可以成为一个强大的办公工具,提高工作效率和数据分析能力。

电子表系统课程设计

电子表系统课程设计

目录电子表系统一.总体设计说明 (1)1.设计指标 (1)2.总体描述 (1)二.硬件设计 (1)1.硬件设计总体框图 (1)2.8279键盘、显示接口芯片 (2)3.键盘设计 (5)4.LED显示数码管设计 (6)5.电路原理图 (7)三.软件设计 (7)1.硬件设计总体框图 (8)2.程序流程图 (9)3.程序清单 (12)4.程序调试过程与结果 (16)四.心得体会 (16)五.参考文献 (17)一、设计总体说明1.设计指标利用MCS-51单片机及其相关芯片构成电子表.要求电子表实现如下功能(1)电子表采用12进制,利用按键进行时、分的设置。

(2)具有整点报时。

2.总体描述该系统为电子表。

当程序开始执行后,六个LED管均显示“0”作为初始状态值,当要调整时间时,按调整时间键C,这时绿灯亮,表示调整时间开始,于是可以键入时间,如果键入的时间是正确时,每按一个键就会有声音,而且系统显示出你所输入的值,但是如果键入的“时”的值大于11,“分”或“秒”的值大于59,或者错按了字母键时,没有按键声,而且系统不会显示刚刚输入错误的值,要求重新键入时间值。

时间值键入正确后,按启动键F,绿灯灭,表示调整时间结束,时钟开始走时。

利用单片机里蜂鸣器输出的声音进行按键声和整点报时。

二.硬件设计1.硬件设计总体框图电子表系统是由计时功能,整点报时功能和调整时间功能,其硬件设计总体框图如图1-1所示。

2.8279键盘、显示接口芯片利用8279键盘显示接口电路。

使用8279可实现对键盘/显示器的自动扫描,以减轻CPU 负担,其具有显示稳定、程序简单、不会出现误动作等特点。

8279芯片是一种通用的可编程序的键盘、显示接口器件,单个芯片就能完成键盘输入和LED显示控制两种功能。

8279包括键盘输入和显示输出两个部分。

键盘部分提供的扫描方式,可以和64个按键或传感器的阵列相连。

能自动消除开关抖动以及N个键同时按下的保护。

显示部分按扫描的方式工作。

电子秒表的设计方案

电子秒表的设计方案

电子秒表的设计目录一、设计要求 (2)二、设计的目的与作用 (2)三、设计的具体体现 (2)1.电子秒表的基本组成 (3)2.电子秒表的工作原理 (3)3.电子秒表的原理图 (4)4.单元电路设计 (4)5.设计仿真与PCB制版 (12)四、心得体会 (17)五、附录 (18)六、参考文献 (20)一、设计要求1.以0.01秒为最小单位进行显示。

2.秒表可显示0.01〜59:59:99秒的量程。

3.该秒表具有清零、开始计时、停止计时功能。

二——计^方方案一:通过单片机来实现电子秒表基于51单片机电子秒表,设计简单,而且技术准确,缺点是价格相比于数字电路实现的秒表技术要昂贵。

方案二:采用数字电路来实现秒表计数,优点是价格便宜,计数精确,反应较快,缺点是,电路芯片较多,设计电路复杂。

经过比较选择了较为经济适用的数字电路。

二、设计的目的与作用1.培养我们运用有关课程的基础理论和技能解决实际问题,并进一步提高专业基本技能、创新能力。

通过课程设计,学习到设计写作方法,能用文字、图形和现代设计写作方法系统地、正确地表达课程设计和研究成果。

2.熟悉555方波振荡器的应用。

3.熟悉计数器的级联及计数、译码、显示电路的整体配合。

4.建立分频的基本概念三、设计的具体体现1.电子秒表的基本组成电子秒表电路的基本组成框图如图所示,它主要由基本RS触发器、多谐振荡器、计数器和数码显示器4个部分组成。

电子秒表电路的基本组成(方框图)如下:图(1)电子秒表基本组成方框图2.电子秒表的工作原理由555定时器构成多谐振荡器,用来产生50Hz的矩形波。

第I块计数器作5分频使用,将555输来的50Hz的脉冲变为0.1 秒的计数脉冲,在输出端Qd取得,作为第2块计数器的始终输入,第2、第3块计数器QA与CP2相连,都已接成8421码十进制计数电路,第4块接成六进制形式,其输出端与译码显示器的相应输入端连接,可显示00:00 : 00—— 59:59:99s3•电子秒表的原理图图(2)原理图4.单元电路设计(1)由NE555F组成的多谐振荡器(多谐振荡器)ne555是一种应用特别广泛作用很大的的集成电路,属于小规模集成电路,在很多电子产品中都有应用。

第4节-电子表程序设计(项目9)

第4节-电子表程序设计(项目9)

if(key1_flag == 4)hour_r--;if(hour_r <= 0)hour = 23; if(key1_flag == 5)min_r--;if(min_r <= 0)min_r = 59;
} //按键key4处理
if(key4 == 0) {
delay(300); if(key4 == 0); key4_s = 1; } if(key4 == 1 && key4_s == 1) { key1_flag = 0; key4_s = 0; } }
在调时状态下,小时、分钟和秒所在位置不变,但 在定闹时间调整时,6个数码管的后四位显示定闹时、分, 前两和数码管显示一个特定字符,如“L1”,用来区分调 时状态。
三、定闹输出问题
当电子表走时状态下的时间与定闹时间相同时,可 以通过控制继电器吸合接通负载动作达到定闹输出目的, 也可以驱动蜂鸣器发出声响提示。如果采用有源蜂鸣器时, 只需在蜂鸣器上加上高电平即可产生1kHz声响。在本项目 中使用的是无源蜂鸣器,其内部只是一个电磁铁和一个铁 质共振模,需加上1kHz方波信号时才发出声响,因此需在 程序中设计一个产生1kHz左右方波程序,以驱动蜂鸣器发 声。
4.4电子表 程序设计(项目9)
单片机的定时器中断能够产生精确的时间,因此利 用单片机很容易实现电子表的设计。本节内容是在6位动 态显示的基础上加上按键完成的,也是单片机技术学习过 程中最典型的实训项目。
本节实现的电子表基本要求如下:
利用6位数码管显示时分秒,4个按键调整。具有自 动精确走时,调时调分调秒、定时定闹,定闹输出可驱动 蜂鸣器发出声响,或驱动继电器吸合。
二、按键程序
根据功能要求,按键key1按下进入时间、定闹调整 状态,由于需要对不同对象进行调整,并且要控制所调整 的对象闪烁显示,因此需要设定一个记录key1按下次数的 状态变量,比如key1_flag。未按下key1时, key1_flag 值为0,电子表正常走时;第一次按下key1,key1_flag为 1 , 进 入 调 时 状 态 , 同 时 小 时 闪 烁 ; 再 按 下 key1 , key1_flag为2,此时调分钟,分钟闪烁;依次按下KEY1, 可以分别进入其他时间调整。由于本项目中的电子表只需 调整5个对象,key1_flag值增加到6时预置为1,重新进入 调时状态。按键功能分配见表4-4-1,程序设计流程如图 4-4-2所示。

单片机学习项目 (9) 电子表程序设计

单片机学习项目 (9) 电子表程序设计

单片机学习项目项目9-电子表程序设计一:电路仿真根据功能需要,电子表电路含6位数码管、4个按键和一个继电器驱动电路,如图4-4-1所示。

读者可在P3.3口接一个继电器驱动电路,控制一只灯泡或一个电铃作为闹铃输出。

二:程序设计电子表程序采用模块化设计,可以先根据电子表的功能需求对程序进行模块划分,这个过程单片机程序模块化设计的基本设计步骤。

电子表程序包含一个主程序和一个按键子程序,主程序调用子程序。

一、按键子程序key.c根据功能要求,按键key1按下进入时间、定闹调整状态,由于需要对不同对象进行调整,并且要控制所调整的对象闪烁显示,因此需要设定一个记录key1按下次数的状态变量,比如key1_flag。

未按下key1时, key1_flag值为0,电子表正常走时;第一次按下key1,key1_flag为1,进入调时状态,同时小时闪烁;再按下key1,key1_flag为2,此时调分钟,分钟闪烁;依次按下KEY1,可以分别进入其他时间调整。

由于本项目中的电子表只需调整5个对象,key1_flag值增加到6时预置为1,重新进入调时状态。

按键功能分配见表4-5-1所示。

(时)、min(分)、sec(秒),调整中间变量hour_t、min_t、sec_t以及定闹所使用的变量hour_r(定闹时)、min_r(定闹分)。

按键程序key.c设计清单如下:/**********************************************************///按键子程序/**********************************************************/#include<reg51.h>sbit key1 = P1^4;sbit key2 = P1^5;sbit key3 = P1^6;sbit key4 = P1^7;bit key1_s,key2_s,key3_s,key4_s; //按键按下状态unsigned char hour = 12,min = 30,sec =30; //正在走的时间变量char hour_t,min_t,sec_t; //调整的中间时间变量unsigned char min_r,hour_r; //定闹的时间变量unsigned char key1_flag; //调整控制变量,控制调整对象、控制显示对象/***********************简单延时函数************************/void delay(unsigned int x){while(x--);}/*************************按键函数**************************/void key(void){////////////按键key1处理///////////////if(key1 == 0){delay(300);if(key1 == 0);key1_s = 1;}if(key1 == 1 && key1_s == 1){key1_s = 0;key1_flag++;if(key1_flag >= 6)key1_flag = 1;hour_t = hour;//把正在走的时间给调整值min_t = min;sec_t = sec;}////////////按键key2处理///////////////if(key2 == 0){delay(300);if(key2 == 0);key2_s = 1;}if(key2 == 1 && key2_s == 1){key2_s = 0;if(key1_flag == 1)hour_t++;if(hour_t >= 24)hour_t = 0;hour = hour_t; //把调整后的时间给走的时间 if(key1_flag == 2)min_t++;if(min_t >= 60)min_t = 0;min = min_t;if(key1_flag == 3)sec_t++;if(sec_t >= 60)sec_t = 0;sec = sec_t;if(key1_flag == 4)hour_r++;if(hour_r >= 24)hour = 0;if(key1_flag == 5)min_r++;if(min_r >= 24)min_r = 0;}////////////按键key3处理///////////////if(key3 == 0){delay(300);if(key3 == 0);key3_s = 1;}if(key3 == 1 && key3_s == 1){key3_s = 0;if(key1_flag == 1)hour_t--;if(hour_t <= 0)hour_t = 23;hour = hour_t;if(key1_flag == 2)min_t--;if(min_t <= 0)min_t = 59;min = min_t;if(key1_flag == 3)sec_t--;if(sec_t <= 0)sec_t = 59;sec = sec_t;if(key1_flag == 4)hour_r--;if(hour_r <= 0)hour = 23;if(key1_flag == 5)min_r--;if(min_r <= 0)min_r = 59;}////////////按键key4处理///////////////if(key4 == 0){delay(300);if(key4 == 0);key4_s = 1;}if(key4 == 1 && key4_s == 1){key1_flag = 0;key4_s = 0;}}按键子程序保存在key.c文件中,用于主程序调用。

项目-电子表程序设计

项目-电子表程序设计

void init()
{
TMOD=0x01;
//T0初始化方式1,定时
TH0=(65536-2000)/256; //TH0,TL0装入定时2mS的初值
TL0=(65536-2000)%256;
TR0=1;
//启动T0工作
ET0=1;
//允许T0溢出中断
EA=1;
//CPU开中断
}
/**********************************************************/
//送出位选数据 //送出段选数据 //扫描指针加计数 //扫描完从头开始
语句中LEDBuffer[]就是所说的暂存区,实际是一个数组。 LEDScanCount相当于扫描计数器,从0到5 循环。 LEDDATA[]为数码管的编码字符,LEDBITDATA[]是对应 的数码管选中编码。
项目-电子表程序设计
项目-电子表程序设计
初始化
键盘子程序 闹铃子程序
中断服务函数
图8.2.2 主程序流程
项目-电子表程序设计
此部分对应的程序代码如下:
/**********************************************************************/
void main(void)
sbit SET_KEY=P3^3;
//模式键
sbit DOWN_KEY=P3^4;
//加计数键
sbit UP_KEY=P3^5;
//减计数键
sbit ALM_KEY=P3^2;
//显示定时时间按键
sbit Beep=P1^7;
//蜂鸣器接口引脚
/**********************************************************************/
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

课程设计任务书学生: 0000000 专业班级:自动化0804指导教师:义鑫工作单位:自动化学院题目: 电子表程序设计初始条件:带有编辑器、汇编程序、连接程序和调试程序的电脑一台。

要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)采用汇编语言设计一个电子表程序,在屏幕上以七段数码管的形式显示本机时间,精确到秒。

按S启动,按T停止,按P暂停。

按Q退出程序。

(1)设计任务及要求分析(2)方案比较及认证说明(3)系统原理阐述(4)软件设计课题需要说明:软件思想,流程图,源程序及程序注释(5)调试记录及结果分析(6)总结(7)参考资料(8)附录:芯片资料或程序清单,软件演示屏幕拷贝图或硬件实物图时间安排:1月10日~1月12日:收集资料,方案选择1月13日~1月16日:整体流程,程序细节1月17日~1月20日:调试程序,报告撰写1月21日:交设计报告,程序演示,答辩指导教师签名:年月日系主任(或责任教师)签名:年月日前言汇编语言是计算机能够提供给用户使用的最快而又最有效的语言,也是能够利用计算机所有硬件特性并能直接控制硬件的唯一语言。

因而,对程序的空间和时间的要求很高的场合,汇编语言的应用是必不可少的。

至于很多需要直接控制硬件的应用场合,则更是非用汇编语言不可了。

随着科学技术迅速发展,理工科大学生不仅需要掌握计算机方面的基本理论知识,而且还需要掌握基本的实验技能及一定的科学研究能力。

通过课程设计,使学生巩固和加深微型计算机原理理论知识,通过实践进一步加强学生独立分析问题和解决问题的能力、综合设计及创新能力的培养,同时注意培养学生实事、严肃认真的科学作风和良好的实验习惯,为今后工作打下良好的基础。

鉴于汇编语言的广泛用途及其在当代计算机界的重要作用,本人利用学的知识,在同学门的帮助下,花费大量时间,完成了关于电子表的系统设计。

这个系统是应用于电脑中的小应用程序,可是显示电脑中的时间。

很多地方都会有个时钟显示,其多是应用了类似这样的方法。

目录1 设计任务及要求分析 01.1设计目的 01.2设计任务 01.3具体要求 02.方案比较及认证说明 (1)3.系统原理阐述 (2)4.软件设计课题说明 (7)4.1软件思想 (7)4.2流程图 (7)4.3源程序及程序注释 (9)5.调试记录及结果分析 (19)5.1程序调试过程 (19)5.2运行结果 (19)6.设计总结及心得体会 (22)7.参考文献 (23)8 附录:中断向量表 (23)1 设计任务及要求分析1.1 设计目的(1)通过设计电子表,掌握中断的使用方法。

(2)掌握基本的显存读写技术。

(3)学会在屏幕上以七段数码管的形式显示本机时间的方法。

(4)学会用汇编语言编写一个完整的程序,提高自己的动手操作能力。

(5)学习程序设计的基本思路和方法,培养分析问题、解决问题的能力。

1.2 设计任务采用汇编语言设计一个电子表程序,在屏幕上以七段数码管的形式显示本机时间,精确到秒。

按S启动,按T停止,按P暂停,按Q退出程序。

1.3 具体要求(1)设计任务及要求分析(2)方案比较及认证说明(3)系统原理阐述(4)软件设计课题需要说明:软件思想,流程图,源程序及程序注释(5)调试记录及结果分析(6)总结(7)参考资料(8)附录:芯片资料或程序清单,软件演示屏幕拷贝图或硬件实物图2.方案比较及认证说明设计方案:数字0~9中的每一个数字用“|”和“—”字符组成的“七段”码图形表示,时与分、分与秒之间的两点用“▼”字符表示。

这些字符预先定义在数据段的字符图形里,利用BIOS INT 1AH的2号系统功能调用,读出计算机系统的时间(为BCD码),置换成字符图形标中的图形字符显示。

本程序设计的关键是随着系统时间的变化,用字符组成的图形数字如何进行相应的变化。

方法是:不停地读取系统时间并保存在寄存器中,将每次取出的时间显示并与前一次比较,先比较“秒”值,在不同的情况下(系统时间发生了增1的变化),则调用相应的图形字符显示,在不超过60秒的情况下,重复比较秒,然后再比较和显示“分”值与“小时”值。

程序流程图如图所示。

3.系统原理阐述用七段码电子表显示程序系统时间,程序设计的关键是随系统时间的变化,用字符组成图形数字如何进行相应的变化。

编写的程序,主要包含以下子程序:1)对时间值进行处理并显示的子程序:xian procpush sipush dipush dxpush cxpush bxpush axpop axpush axmov bx,axmov ax,0mov al,bhmov cl,4shr al,clmov bl,almov dh,10mov dl,2call ffpop axpush axmov bx,axmov ax,0mov al, bhand al,0fhmov bl,almov dh,10mov dl,6call ffmov dh,10mov dl,10mov bl,10call ffpop axpush axshr al,clmov bl,almov dh,10 mov dl,14call ffpop axpush axand al ,0fh mov bl,almov dh,10 mov dl,18call ffmov dh,10mov dl,22mov bl,10call ffpop axpop bxpush bxpush axmov ax,0mov al,bhmov cl,4shr al,clmov bl,almov dh,10mov dl,26call ffpop axpop bxpush bxpush axmov al,bhand al,0fh mov bl,almov dh,10 mov dl,30call ffmov dh,0mov dl,15mov bl,22call ffpop axpop cxpop dxpop dipop siretxian endp2)显示具体数值的子程序:ff procpush axpush bxpush cxpush dxcmp bl,0je l0cmp bl,1je l1cmp bl,2je l2cmp bl,3je l3cmp bl,4je l4cmp bl,5je l5cmp bl,6je l6cmp bl,7je l7cmp bl,8je l8cmp bl,9je l9cmp bl,10je l10cmp bl,22je ldl0: lea di,s0jmp tyl1: lea di,syjmp tyl2: lea di,s2l3: lea di,s3jmp tyl4: lea di,s4jmp tyl5: lea di,s5jmp tyl6: lea di,s6jmp tyl7: lea di,s7jmp tyl8: lea di,s8jmp tyl9: lea di,s9jmp tyl10: lea di,s11jmp tyld : lea di,strty: mov ah,0fh ;显示方式 int 10hsub cx,cxmov cl,[di]inc diplot_next: add dh,[di+2] add dl,[di+3] mov ah,2int 10hmov al,[di] mov bl,[di+1] push cxmov cx,1mov ah,09int 10hpop cxadd di,4loop plot_nextpop dxpop cxpop bxpop axmov cx,100gg: dec cxloop ggretff endp3)报时子程序:beep procpush axpush bxpush cxpush dxmov al ,10110110b out 43h,almov ax,533hout 42h,almov al,ahout 42h,alin al,61hmov ah,alor al,03out 61h,alsub cx,cxmov bl,28hg7: loop g7dec bljnz g7mov al,ahout 61h,alpop dxpop cxpop bxpop axretbeep endp4.软件设计课题说明4.1软件思想本课题主要涉及以下知识点:数据段(1) Disptime,Showtime显示时钟(2)定义0—9十个图形数字,以便模拟七段码显示时钟宏定义(1)Clear定义清屏宏(2)rowcol定义光标定位宏(3)crlf回车换行宏(4)display显示字符串宏(5)change计算时间宏函数(1)main主函数(2)paly主要完成显示七段码电子表显示(3)prog0到prog10完成七段码到一半显示的转换(4)moveshape显示七段码电子表(5)delay延迟函数(6)exit返回DOS函数4.2流程图本实验程序流程图见下页4.3源程序及程序注释data segment;*****定义please等提示信息*****infon db 0dh,0ah,0dh,0ah,'Please press S to start!$' ;str db 0dh,0ah,'Press P to pause$'str db 49db 50h,7,0,0db 6ch,7,0,1db 65h,7,0,1db 61h,7,0,1db 73h,7,0,1db 65h, 7,0,1db 70h,7,1,-3db 72h,7,0,1db 65h,7,0,1db 73h,7,0,1db 73h,7,0,1db 50h,7,0,2db 6bh,7,0,2db 65h,7,0,1db 79h,7,0,1db 70h,7,0,2db 61h,7,0,1db 75h,7,0,1db 73h,7,0,1db 65h,7,0,1db 21h,7,0,1db 70h,7,1,-9db 72h,7,0,1db 65h,7,0,1db 73h,7,0,1db 73h,7,0,1db 51h,7,0,2db 6bh,7,0,2db 65h,7,0,1db 79h,7,0,1db 65h,7,0,2db 78h,7,0,1db 69h,7,0,1db 74h,7,0,1db 21h,7,0,1db 70h,7,1,-9db 72h,7,0,1db 65h,7,0,1db 73h,7,0,1db 73h,7,0,1db 54h,7,0,2db 6bh,7,0,2db 65h,7,0,1db 79h,7,0,1db 73h,7,0,2db 74h,7,0,1db 6fh,7,0,1db 70h,7,0,1db 21h,7,0,1;*****定义0-9十个图形数字***** s0 db 6db 5fh,7,0,0db 7ch,7,1,-1db 7ch,7,1,0db 5fh,7,0,1db 7ch,7,0,1db 7ch,7,-1,0sy db 2db 7ch,7,1,0db 7ch,7,1,0s2 db 5db 5fh,7,0,0db 7ch,7,1,1db 5fh,7,0,-1db 7ch,7,1,-1db 5fh,7,0,1s3 db 5db 5fh,7,0,0db 7ch,7,1,1db 5fh,7,0,-1db 7ch,7,1,1db 5fh,7,0,-1s4 db 4db 7ch,7,1,0db 5fh,7,0,1db 7ch,7,1,1db 7ch,7,-1,0s5 db 5db 5fh,7,0,0db 7ch,7,1,-1db 5fh,7,0,1db 7ch,7,1,1db 5fh,7,0,-1s6 db 6db 5fh,7,0,0db 7ch,7,1,-1db 5fh,7,0,1db 7ch,7,1,1db 5fh,7,0,-1db 7ch,7,0,-1s7 db 3db 5fh,7,0,0db 7ch,7,1,1db 7ch,7,1,0s8 db 7db 7ch,7,1,0db 5fh,7,-1,1db 7ch,7,1,1db 5fh,7,0,-1db 7ch,7,1,1db 5fh,7,0,-1db 7ch,7,0,-1s9 db 6db 7ch,7,1,0db 5fh,7,-1,1db 7ch,7,1,1db 5fh,7,0,-1db 7ch,7,1,1db 5fh,7,0,-1s11 db 2db 03h,7,1,0db 03h,7,1,0data endsstack segmentdb 200 dup (0)stack endscode segmentassume cs:code,ss:stack,ds:data start:mov ax,datamov ds,axstar: mov ah,0 ;设置显示方式mov al,3int 10hmov ah,0bh ;置彩色调板mov bh,0mov bl,1int 10hmov ah,0bh ;置彩色调板mov bh,1mov bl,4int 10hlea dx,infonmov ah,9int 21hkey0: mov ah,1 ;读键盘缓冲区字符 int 16hmov ah,0int 16hcmp al,'S'jnz key0mov ah,2 ;取系统时间int 1ahmov ax,0mov bx,0mov ah,ch ;取系统时间mov al,cl ;保存分钟mov bh,dh ;保存秒mov bl,dl ;保存百分之一秒tt:push axpush bxmov ah,0mov al,3int 10hmov ah,0bhmov bh,0mov bl,1int 10hmov ah,0bhmov bh,1mov bl,4int 10hww: pop bxpop axcall xian ;调用显示子程序 push axmov ah,1 ;读键盘缓冲区字符 int 16hjz qumov ah,8 ;从键盘输入字符 int 21hcmp al,'Q' ;输入s,结束程序 je tucmp al,'T'jz starcmp al,'P'jne qukey: mov ah,1 ;读键盘缓冲区字符 int 16hmov ah,0int 16hcmp al,'P'jnz keyqu: mov ah,2 ;取系统时间int 1ahcmp bh,dhje qupop axinc bh ;对时间进行加1cmp bh,100mov bh,0inc alcall beepcmp al,100jl ttmov al,0inc ahcmp ah,24jl ttmov ah,0jmp tttu: mov ah,4chint 21hretxian proc ;对时间值进行处理并显示的子程序 push sipush dipush dxpush cxpush bxpush axpop axpush axmov bx,axmov ax,0mov al,bhmov cl,4shr al,clmov bl,almov dh,10mov dl,2call ffpop axpush axmov bx,axmov ax,0mov al, bhand al,0fhmov bl,almov dh,10mov dl,6mov dh,10mov dl,10mov bl,10 call ffpop axpush axmov cl,4shr al,clmov bl,almov dh,10 mov dl,14call ffpop axpush axand al ,0fh mov bl,almov dh,10 mov dl,18call ffmov dh,10mov dl,22mov bl,10call ffpop axpop bxpush bxpush axmov ax,0mov al,bhmov cl,4shr al,clmov bl,almov dh,10mov dl,26call ffpop axpop bxpush bxpush axmov al,bhand al,0fh mov bl,almov dh,10call ffmov dh,0mov dl,15mov bl,22call ffpop axpop bxpop cxpop dxpop dipop siretxian endpff proc ;显示具体数值 push axpush bxpush cxpush dxcmp bl,0je l0cmp bl,1je l1cmp bl,2je l2cmp bl,3je l3cmp bl,4je l4cmp bl,5je l5cmp bl,6je l6cmp bl,7je l7cmp bl,8je l8cmp bl,9je l9cmp bl,10je l10cmp bl,22je ldl0: lea di,s0l1: lea di,syjmp tyl2: lea di,s2jmp tyl3: lea di,s3jmp tyl4: lea di,s4jmp tyl5: lea di,s5jmp tyl6: lea di,s6jmp tyl7: lea di,s7jmp tyl8: lea di,s8jmp tyl9: lea di,s9jmp tyl10: lea di,s11jmp tyld : lea di,strty: mov ah,0fh ;显示方式 int 10hsub cx,cxmov cl,[di]inc diplot_next: add dh,[di+2] add dl,[di+3] mov ah,2int 10hmov al,[di]mov bl,[di+1] push cxmov cx,1mov ah,09int 10hpop cxadd di,4loop plot_nextpop dxpop cxpop bxpop axmov cx,100gg: dec cxloop ggretff endpbeep procpush axpush bxpush cxpush dxmov al ,10110110b out 43h,almov ax,533hout 42h,almov al,ahout 42h,alin al,61hmov ah,alor al,03out 61h,alsub cx,cxmov bl,28hg7: loop g7dec bljnz g7mov al,ahout 61h,alpop dxpop cxpop bxpop axretbeep endpcode endsend start5.调试记录及结果分析5.1 程序调试过程(1)将上述程序编译→汇编源文件,命名为sun.asm。

相关文档
最新文档