
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
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)