微机原理与汇编语言实现:动态模拟时钟设计

需积分: 10 1 下载量 33 浏览量 更新于2024-07-26 1 收藏 888KB DOC 举报
"模拟时钟课程设计" 本文主要探讨了如何使用微机原理软件MF2KP,通过汇编语言编程实现一个模拟时钟的设计。该模拟时钟在屏幕上以圆形界面展示,包括秒针、分针和时针,并且能够动态实时地更新时间显示。为了个性化,设计中还要求在界面上添加制作者的姓名。此外,设计的一个关键功能是允许用户通过键盘输入来接收和修改时钟的时间。 在设计过程中,作者首先明确了设计任务与要求。初始条件是使用汇编语言创建一个视觉上吸引人的模拟时钟,它需要具备基本的计时功能以及用户交互性。设计任务主要包括程序的界面设计、动态时间更新、以及用户输入响应。 在方案比较及论证环节,作者提出了两个可能的方案。方案一可能是直接利用系统中断来获取时间并更新屏幕,而方案二可能涉及自定义的计时算法和用户输入处理机制。通过对两个方案的优缺点分析,作者选择了最合适的方案来进行软件设计。 在软件设计部分,作者详细介绍了其软件开发思路。软件的核心功能依赖于INT10H BIOS功能调用来控制屏幕显示,INT21H DOS功能调用来处理键盘输入,以及图形取模技术来绘制时钟的圆形界面和指针。同时,16种颜色的组合被用于增强视觉效果,使得时钟更加生动。软件结构包括程序初始化、时钟绘制模块(负责绘制秒针、分针和时针)、字符绘制模块(用于显示制作者姓名)以及调时模块(接收和处理用户输入,更新时间显示)。 在程序调试和结果分析阶段,作者详细记录了调试过程中的问题、解决策略以及最终实现的功能。通过调试,模拟时钟能够正常运行,时间更新准确,用户交互功能也得到了验证。最后,作者分享了在设计过程中的心得体会,总结了遇到的挑战和收获。 参考文献和附录提供了进一步的研究背景和详细的技术资料,帮助读者深入理解模拟时钟的设计实现。 关键词: 汇编语言,模拟时钟,动态运行,修改,更新,模拟时钟设计 这个项目不仅展示了汇编语言在图形界面设计中的应用,还强调了软件工程中的问题解决和设计决策过程,对于学习微机原理和系统级编程的学生来说,具有很高的实践价值。
2012-02-05 上传
/*********************************************************** 实验名称:可调电子钟(数码管显示)示例程序 程序说明:按键S1切换时分秒,按下S6加一,按下S3减一 ***********************************************************/ #include unsigned char code SEG7[11]={0xC0,/*0*/ 0xF9,/*1*/ 0xA4,/*2*/ 0xB0,/*3*/ 0x99,/*4*/ 0x92,/*5*/ 0x82,/*6*/ 0xF8,/*7*/ 0x80,/*8*/ 0x90,/*9*/ 0xbf,/*-*/ }; unsigned short int tcount; struct time { unsigned char second; unsigned char minute; unsigned char hour; }time1; /***************************************/ /* 延时子程序 */ /***************************************/ void delay(k) unsigned int k; { unsigned char j; while((k--)!=0) for(j=0;j<125;j++); } /***************************************/ /* 时钟调整子程序 */ /***************************************/ TimeUpDown(n,x,y) unsigned char n,x,y; { if(P3_2==0) { delay(50); if(P3_2==0) { n++; if(n==x) n=0; while(P3_2==0); } } if(P3_3==0) { delay(50); if(P3_3==0) { if(n==0) n=y; else n--; while(P3_3==0); } } return n; } /***************************************/ /* 显示子程序 */ /***************************************/ void display(DisSecondH,DisSecondL,DisMinutH,DisMinutL,DisHourH,DisHourL) unsigned char DisSecondH,DisSecondL,DisMinutH,DisMinutL,DisHourH,DisHourL; { P0=SEG7[DisSecondH]; //显示秒钟的十位 P2=0xfe; delay(2); P0=SEG7[DisSecondL]; //显示分钟的个位 P2=0xfd; delay(2); P0=0xbf; //显示- P2=0xfb; delay(2); P0=SEG7[DisMinutH]; //显示秒钟的十位 P2=0xf7; delay(2); P0=SEG7[DisMinutL]; //显示分钟的个位 P2=0xef; delay(2); P0=0xbf; //显示- P2=0xdf; delay(2); P0=SEG7[DisHourH]; //显示小时的个位 P2=0xbf; delay(2); P0=SEG7[Dis