七段码电子表显示程序

七段码电子表显示程序,第1张

1.题目及要求

1.1题目:七段码电子表显示程序

1.2要求

1.七段码电子表显示程序

2.菜单选择:设置时,分,秒,开始,退出等

3.模拟七段码管显示时,分,秒

4.要求界面美

2.功能设计

说明:esc键退出 s键设置时间

数据段

(1)Disptime , showtime 显示时钟

(2)定义定义0-9十个图形数字,以便模拟七段码显示时钟

宏定义

(1)Clear定义清屏宏

(2)rowcol 定义光标定位宏

(3)crlf 回车换行宏

(4)display显示字符串宏

(5)change 计算时间宏

函数

(1) main 主函数

(2) play 主要完成显示七段码电子表显示

(3) prog0 到prog10完成七段码到一般显示的转换

(4) moveshape 显示七段码电子表

(5) delay 延迟函数

(6) exit 返回DOS函数

3.设计详细

3.1设计方法

(1)Clears清屏宏 用到了BIOS中断06H。

(2)rowcol光标定位宏 用到了BIOS中断02H。

(3) crlf 回车换行宏 用到了DOS中断的0ah, 0dh

(4) display显示字符串宏 用到了DOS中断的09h

(5) change 计算时间宏 用户自己定义的宏,方便以后使用

(6)main 主函数 主要调用子函数实现功能

(7)delayr 延迟函数 用双重循环实现,根据不同机子设置不同的参数

(8)exit 返回DOS函数 ,也就是结束函数。调用int 21h中的04h

(9) moveshape 显示七段码电子表函数。利用int 21h中的09h

目 录

1题目及要求2

2功能设计2

3详细设计2

3.1设计方法2

3.2流程图2

3.3重点,难点6

4总结心得体会7

5参考文献7

6附:源程序7 谢谢请采纳

电脑在我们生活中是非常常见的,并且电脑在我们工作中发挥的作用也是非常巨大的。特别是做文职工作的朋友对电脑的依赖性更大的,而电脑的办公软件也是大家经常使用的,而很多朋友在工作中都会遇到做表格,而对于电脑做表格很多朋友都不熟悉,而电脑做表格的方法也有很多种的。那么接下来小编就为大家详细分享电脑做表格的方法。希望我们的分享能够帮助大家学会利用电脑做表格。

如何在电脑上制作表格

用Word制作表格

开一个空白的文档,在菜单栏中选择“表格”,执行“插入”-“表格”命令在打开的表格对话框中输入我们表格的行数和列数。我们根据实际需要进行设置,设置好后点击确定按钮一个表格就插入到编辑区了,我们可以在单元格中输入相应的内容选定表格一行,我们右击,在d出的菜单中我们可以对表格进行 *** 作,我们可以重新插入表格的一行或删除表格的一行。同理对列进行 *** 作的话可以删除和增加列在步骤4中d出的菜单中选择"表格属性”可以对表格的颜色,边框,底纹,高度等进行设置。

用Excel制作表格

新建一个excel文件,在草纸上画好草稿,将需要数据的表格样式及列数和行数确定。比如我需要建立一个 五行 六列的表格,最上面是标题行。在新建excel中,用鼠标选中需要的表格行数列数,然后点右键,“设置单元格格式”——“边框”,在“预置”中根据需要选择“外边框”、“内部”边框。根据需要加边框。如果是标题处,可以取消外边框,合并横向或者纵向的表格。方法也是先选中需要设置的表格(第一行),然后右键点击“设置单元格格式”——“对齐”,然后选中“合并单元格根据标题长度、宽度调整一下标题行。如我的标题是“XXXXXX公司表”题目比较长,将标题行拉宽,设置“自动换行”,然后根据需要左右缩进,调整居中,然后设置字体大小等。

根据字体调整表,其他空格内容填好后,同样根据内容调整一下就可以。如果需要打印,就要设置页面了。我们这个表一看就是横向的,所以选择“文件”-“页面设置”,选择“横向”,然后打印预览一下。如果要求居中打印但是表格处于页面左上角,就调整一下页边距。调整好位置后打印即可。

以上就是我们给大家详细介绍的有关于电脑做表格的知识,希望我们的分享能够帮助大家更好的学会电脑制作表格。而以上我们对电脑制作表格的方法分享的非常详细。并且也分享了不同软件做表格的方法。希望在工作中需要做表格的朋友,可以多关注我们的分享内容。尤其是从事文职工作的朋友,更要多关注我们的分享内容。同时也希望我们的分享内容可以帮助更多的朋友学会使用电脑制作表格。

*

* 简易电子时钟,数码管显示 *

* K1---时调整 *

* K2---分调整 *

* *

* *

********************************************************************************

* 【版权】 Copyright(C)伟纳电子 www.willar.com All Rights Reserved*

* 【声明】 此程序仅用于学习与参考,引用请注明版权和作者信息! *

********************************************************************************

CODE_SEG SEGMENT CODE

DATA_SEG SEGMENT DATA

STACK_SEG SEGMENT IDATA

K1 BIT P1.4

K2 BIT P1.5

RSEG DATA_SEG

KEY_S: DS 1

KEY_V:DS 1

DIS_DIGIT:DS 1

SEC: DS 1

DIS_INDEX: DS1

HOUR:DS1

MIN: DS1

SEC100:DS1

DIS_BUF:DS8

BUF_HOUR_H EQU DIS_BUF 小时十位

BUF_HOUR_L EQU DIS_BUF+1 小时个位

BUF_MIN_H EQU DIS_BUF+3 分十位

BUF_MIN_L EQU DIS_BUF+4 分个位

BUF_SEC_H EQU DIS_BUF+6 秒十位

BUF_SEC_L EQU DIS_BUF+7 秒个位

RSEG STACK_SEG

STACK: DS 20

===============================================================================

CSEG AT 0000H

JMP MAIN

CSEG AT 0000BH

LJMP TIMER0

CSEG AT 0001BH

LJMP TIMER1

===============================================================================

RSEG CODE_SEG

MAIN:

USING 0

MOV SP, #(STACK-1)

MOV P0,#0FFH

MOV P2,#0FFH

MOV TMOD,#011H 定时器0, 1工作模式1, 16位定时方式

MOV TH0,#0FCH

MOV TL0,#017H

MOV TH1,#0DCH

CLR A

MOV TL1,A

MOV HOUR,#12

CLR A

MOV MIN,A

MOV SEC,A

MOV SEC100,A

MOV A,HOUR

MOV B,#10

DIV AB

MOV DPTR,#DIS_CODE

MOVC A,@A+DPTR

MOV BUF_HOUR_H,A 时十位

MOV A,HOUR

MOV B,#10

DIV AB

MOV A,B

MOVC A,@A+DPTR

MOV BUF_HOUR_L,A 时个位

MOV A,MIN

MOV B,#10

DIV AB

MOVC A,@A+DPTR

MOV BUF_MIN_H,A 分十位

MOV A,MIN

MOV B,#10

DIV AB

MOV A,B

MOVC A,@A+DPTR

MOV BUF_MIN_L,A 分个位

MOV A,SEC

MOV B,#10

DIV AB

MOVC A,@A+DPTR

MOV BUF_SEC_H,A 秒十位

MOV A,SEC

MOV B,#10

DIV AB

MOV A,B

MOVC A,@A+DPTR

MOV BUF_SEC_L,A 秒个位

MOV BUF_HOUR_H+02H,#0BFH

MOV BUF_HOUR_H+05H,#0BFH

MOV DIS_DIGIT,#0FEH

CLR A

MOV DIS_INDEX,A

MOV IE,#08AH 使能timer0,1 中断

SETB TR0

SETB TR1

MOV KEY_V,#03H

MAIN_LP:

LCALL SCAN_KEY 键扫描

JZ MAIN_LP 无键返回

MOV R7,#10 延时10ms

LCALL DELAYMS 延时去抖动

LCALL SCAN_KEY 再次扫描

JZ MAIN_LP 无键返回

MOV KEY_V,KEY_S 保存键值

LCALL PROC_KEY 键处理

SJMP MAIN_LP 调回主循环

===============================================================================

SCAN_KEY:

扫键扫描子程序

保存按键状态到key_s

返回: A --- 按键是否按下(BOOL)

CLR A

MOV C,K1 读按键K1

MOV ACC.0,C

MOV C,K2 读按键K2

MOV ACC.1,C

MOV KEY_S,A保存按键状态到key_s

XRL A,KEY_V

RET

===============================================================================

PROC_KEY:

键处理子程序

传入参数: KEY_V --- 按键值

返回值: 无

CLR EA

MOV A,KEY_V

JNB ACC.0,PROC_K1

JNB ACC.1,PROC_K2

SJMP END_PROC_KEY

PROC_K1:按键k1处理

LCALL INC_HOUR 小时加1

SJMP END_PROC_KEY

PROC_K2:按键K2处理

INC MIN 分钟加1

MOV A,MIN

SETB C

SUBB A,#59

JCK2_UPDATE_MIN 如果分钟等于60,则分清0,小时加1

CLR A

MOV MIN,A

K2_UPDATE_MIN:更新分显示缓冲区

MOV A,MIN

MOV B,#10

DIV AB A = MIN / 10

MOV DPTR,#DIS_CODE

MOVC A,@A+DPTR

MOV BUF_MIN_H,A 更新分十位

MOV A,MIN

MOV B,#10

DIV AB

MOV A,B A = MIN % 10

MOVC A,@A+DPTR

MOV BUF_MIN_L,A 更新分个位

END_PROC_KEY:

SETB EA

RET

===============================================================================

USING 0

TIMER0:

定时器0中断服程序, 用于数码管的动态扫描

DIS_INDEX --- 显示索引, 用于标识当前显示的数码管和缓冲区的偏移量

DIS_DIGIT --- 位选通值, 传送到P2口用于选通当前数码管的数值, 如等于0xfe时,

选通P2.0口数码管

DIS_BUF --- 显于缓冲区基地址

PUSH ACC

PUSH PSW

PUSH AR0

MOV TH0,#0FCH

MOV TL0,#017H

MOV P2,#0FFH 先关闭所有数码管

MOV A,#DIS_BUF 获得显示缓冲区基地址

ADD A,DIS_INDEX 获得偏移量

MOV R0,A R0 = 基地址 + 偏移量

MOV A,@R0 获得显示代码

MOV P0,A 显示代码传送到P0口

MOV P2,DIS_DIGIT

MOV A,DIS_DIGIT 位选通值左移, 下次中断时选通下一位数码管

RL A

MOV DIS_DIGIT,A

INC DIS_INDEX DIS_INDEX加1, 下次中断时显示下一位

ANL DIS_INDEX,#0x07 当DIS_INDEX等于8(0000 1000)时, 清0

POP AR0

POP PSW

POP ACC

RETI

===============================================================================

USING 0

TIMER1:

定时器1中断服务程序, 产生时基信号10ms

PUSH PSW

PUSH ACC

PUSH B

PUSH DPH

PUSH DPL

MOV TH1,#0DCH

INC SEC100

MOV A,SEC100

CLR C

SUBB A,#100 是否中断100次(达到1s)

JCEND_TIMER1 <1S

MOV SEC100,#00H 达到1s

LCALL INC_SEC 秒加1

END_TIMER1:

POP DPL

POP DPH

POP B

POP ACC

POP PSW

RETI

===============================================================================

INC_SEC:

INC SEC

MOV A,SEC

SETB C

SUBB A,#59

JCUPDATE_SEC

CLR A

MOV SEC,A

LCALL INC_MIN

UPDATE_SEC:

MOV A,SEC

MOV B,#10

DIV AB A = SEC / 10

MOV DPTR,#DIS_CODE

MOVC A,@A+DPTR

MOV BUF_SEC_H,A

MOV A,SEC

MOV B,#10

DIV AB

MOV A,B A = SEC % 10

MOVC A,@A+DPTR

MOV BUF_SEC_L,A

RET

===============================================================================

INC_MIN:

INC MIN 分钟加1

MOV A,MIN

SETB C

SUBB A,#59

JCUPDATE_MIN 如果分钟等于60,则分清0,小时加1

CLR A

MOV MIN,A

LCALL INC_HOUR 小时加1

UPDATE_MIN:更新分显示缓冲区

MOV A,MIN

MOV B,#10

DIV AB A = MIN / 10

MOV DPTR,#DIS_CODE

MOVC A,@A+DPTR

MOV BUF_MIN_H,A 更新分十位

MOV A,MIN

MOV B,#10

DIV AB

MOV A,B A = MIN % 10

MOVC A,@A+DPTR

MOV BUF_MIN_L,A 更新分个位

RET

===============================================================================

INC_HOUR:

INC HOUR 小时加1

MOV A,HOUR

SETB C

SUBB A,#24

JCUPDATE_HOUR 如果小时等于24,则小时清0

CLR A

MOV HOUR,A 小时清0

UPDATE_HOUR:

MOV A,HOUR

SETB C

SUBB A,#9

JCUPDATE_HOUR1 如果小时小于10,则十位0不显示

MOV A,HOUR

MOV B,#10

DIV AB

MOV DPTR,#DIS_CODE

MOVC A,@A+DPTR

MOV BUF_HOUR_H,A

SJMP UPDATE_HOUR2

UPDATE_HOUR1:

MOV BUF_HOUR_H,#0FFH

UPDATE_HOUR2:

MOV A,HOUR

MOV B,#10

DIV AB

MOV A,B

MOV DPTR,#DIS_CODE

MOVC A,@A+DPTR

MOV BUF_HOUR_L,A

RET

===============================================================================

DELAYMS:

延时子程序

传入参数:R7 --- 延时值(MS)

返回值:无

MOV A,R7

JZ END_DLYMS

DLY_LP1:

MOV R6,#185

DLY_LP2:

NOP

NOP

NOP

DJNZ R6,DLY_LP2

DJNZ R7,DLY_LP1

END_DLYMS:

RET

END OF DELAYMS

===============================================================================

DIS_CODE:

DB 0C0H

DB 0F9H

DB 0A4H

DB 0B0H

DB 099H

DB 092H

DB 082H

DB 0F8H

DB 080H

DB 090H

DB 0FFH

END


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/11339105.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-15
下一篇2023-05-15

发表评论

登录后才能评论

评论列表(0条)

    保存