历史上的今天
返回首页

历史上的今天

今天是:2025年01月08日(星期三)

正在发生

2018年01月08日 | 秒计时器程序

2018-01-08 来源:eefocus

;************************************************** 
;带键盘设置的秒计时器 
;功能:倒计时的秒计时器,从59倒计到0,然后又从59开始倒计到0; 
;各个键的功能 
;S1:开始运行 
;S2:停止运行 
;S3:高位加1,按一次,数码管的十位加1,从0-5循环变化 
;S4:低位加1,按一次,数码管的个位加1,从0-9循环变化

;************************************************** 
KEYOK BIT  00H 
STARTRUN BIT 01H 
VALUE EQU 21H 
SETVAL EQU 22H ;设置值 
COUNTER EQU 23H ;用于显示的计数器 
COUNT EQU 24H ;秒计数器 
KEYVAL EQU 25H 
DISPBUF EQU 5EH 
FIRST BIT P2.7 ;第一位数码管的位控制 
SECOND BIT P2.6 ;第二位数码管的位控制 
P1LED EQU 22H 
TMRVAR EQU 60110 ;65536-5000*12/11.0592 定时器初值5毫秒 

ORG 0000H  
JMP START 
ORG 0*8+3 ;INT0中断入口 
RETI 
ORG 1*8+3 ;TIMER0中断入口 
JMP INT_T0 ;转去定时器0中断服务程序入口 
ORG 2*8+3 ;INT1中断入口 
RETI 
ORG 3*8+3 ;TIMER1中断入口 
RETI 
ORG 4*8+3 ;串行中断入口 
RETI 
START: 
MOV  SP,#5FH 
MOV  P1,#0FFH ;所有LED全部熄灭 
MOV  VALUE,#0 
MOV  P1LED,#0FEH 
MOV  SETVAL,#59  
MOV  VALUE,SETVAL 
MOV  DISPBUF,#5 
MOV  DISPBUF+1,#9 
CLR STARTRUN 
CLR KEYOK 
CALL INIT_T0 
SETB EA 
LOOP:  
CALL KEY ;调用键盘程序 
JB KEYOK,KEYPROC ;如果有键按下,转键盘处理 
NEXT:  
MOV  A,VALUE ;获得秒的数值 
MOV  B,#10  
DIV AB ;二进制转化为十进制,十位和个位分送显示缓冲区 
NEXT1:  
MOV  DISPBUF,A 
MOV  DISPBUF+1,B ;个位送显示缓冲区 
JMP LOOP 
;以下是键值处理 
KEYPROC: 
MOV  A,KEYVAL ;取得键值 
JZ KEYRUN ;如果键值是0 
DEC A 
JZ KEYSTOP ;如果键值是1 
DEC A 
JZ KEYLEFT ;如果键值是2 
JMP KEYRIGHT ;键值是3,转 
KEYRUN:  
SETB STARTRUN 
JMP LOOP 
KEYSTOP: 
CLR STARTRUN 
JMP LOOP 
KEYLEFT: 
CLR STARTRUN 
INC DISPBUF 
MOV  A,DISPBUF 
CJNE A,#6,LEFT0 
MOV  A,#0 
LEFT0:  
MOV  B,#10 
MUL AB 
MOV  SETVAL,A 
MOV  VALUE,SETVAL 
JMP LOOP 
KEYRIGHT: 
CLR STARTRUN 
INC DISPBUF+1 
MOV  A,DISPBUF+1 
CJNE A,#10,REFT0 
MOV  DISPBUF+1,#0 
REFT0:  
MOV  A,DISPBUF 
MOV  B,#10 
MUL AB 
ADD A,DISPBUF+1 
MOV  SETVAL,A  
MOV  VALUE,SETVAL 
JMP LOOP 
;键盘程序 
KEY:  
MOV  P3,#0FFH 
CLR KEYOK  
MOV  A,P3 
ORL A,#11000011B 
CPL A 
JZ KEY_RET 
CALL DELAY 
MOV  A,P3 
ORL A,#11000011B 
CPL A 
JZ KEY_RET 
SETB KEYOK 
JNB ACC.2,KEY_1 ;S1没有按下,转 
MOV  KEYVAL,#0 
JMP KEY_RET 
KEY_1:  
JNB ACC.3,KEY_2 ;S2没有按下,转 
MOV  KEYVAL,#1 
JMP KEY_RET 
KEY_2:  
JNB ACC.4,KEY_3 
MOV  KEYVAL,#2 
JMP KEY_RET 
KEY_3:  
MOV  KEYVAL,#3 
KEY_RET: 
MOV  A,P3 
ORL A,#11000011B 
CPL A 
JNZ KEY_RET 
RET 

DELAY: 
PUSH PSW 
SETB RS0 
MOV  R7,#50 
D1:  MOV  R6,#50 
D2: DJNZ R6,D2 
DJNZ R7,D1 
POP PSW 
RET 

INIT_T0: ;初始化T0为5毫秒的定时器 
MOV  TMOD,#01H 
MOV  TH0,#HIGH(TMRVAR) 
MOV  TL0,#LOW(TMRVAR) 
SETB ET0 ;开T0中断 
SETB TR0 ;定时器0开始运行 
RET ;返回 

;以下是中断程序,实现秒计数和显示 
INT_T0: ;定时器T0的中断响应程序 
PUSH ACC ;ACC入栈 
PUSH PSW ;PSW入栈 
MOV  TH0,#HIGH(TMRVAR) 
MOV  TL0,#LOW(TMRVAR) 
INC COUNT ;软件计数器加1 
MOV  A,COUNT 
CJNE A,#20,INT_N2 
MOV  COUNT,#0 ;计到20,软件计数器清0 
INT_N1:  
JNB STARTRUN,INT_N2 ;停止运行,转 
DEC VALUE ;计数器减1 
MOV  A,VALUE  
JNZ INT_N2 ;不等于0,转 
MOV  VALUE,SETVAL;否则,再置初值 
INT_N2: ;以下是显示部份 
SETB FIRST 
SETB SECOND ;关显示 
MOV  A,#DISPBUF ;显示缓冲区首地址 
ADD A,Counter  
MOV  R0,A 
MOV  A,@R0 ;根据计数器的值取相应的显示缓冲区的值 
MOV  DPTR,#DISPTAB ;字形表首地址 
MOV C A,@A+DPTR ;取字形码 
MOV  P0,A ;将字形码送P0位(段口) 
MOV  A,Counter ;取计数器的值 
JZ DISPFIRST ;如果是0则显示第一位 
CLR SECOND ;否则显示第二位 
AJMP DISPNEXT 
DISPFIRST: 
CLR FIRST ;显示第一位  
DISPNEXT: 
INC Counter ;计数器加1 
MOV  A,Counter 
DEC A ;如果计数器计到2,则让它回0 
DEC A  
JZ RSTCOUNT  
AJMP DISPEXIT 
RSTCOUNT: 
MOV  Counter,#0 ;计数器的值只能是0或1 
DISPEXIT:  
POP PSW 
POP ACC 
RETI 
DISPTAB: DB 28H,7EH,0a4H,64H,72H,61H,21H,7CH,20H,60H  
END 


推荐阅读

史海拾趣

AW Industries Inc公司的发展小趣事

随着市场竞争的加剧,AW Industries Inc意识到只有不断创新才能在行业中立足。公司加大了对研发的投入,并成功研发出了一款具有革命性的新型电子元件。这款元件不仅性能卓越,而且成本更低,迅速在市场上占据了主导地位。这一创新成果不仅为公司带来了丰厚的利润,也奠定了其在电子行业的领先地位。

Dymec公司的发展小趣事

Dymec公司成立的初期,正面临着电子市场快速变革的挑战。为了在市场上立足,公司创始人决定专注于研发高精度电子连接器。经过数月的努力,团队成功开发出了一款具有创新性的连接器产品,这款产品不仅提高了数据传输的效率,还大大增强了设备的稳定性。这一创新为Dymec公司赢得了第一批客户的认可,也为公司后续的发展奠定了坚实的基础。

Ceramics公司的发展小趣事

“跨界陶瓷”公司凭借其前瞻性的战略眼光,积极探索与其他行业的跨界合作。该公司与多家科研机构和高新技术企业建立了战略合作关系,共同研发新型陶瓷电子材料和技术。通过跨界合作,跨界陶瓷成功将陶瓷材料应用于新能源汽车、智能家居等新兴领域,为公司开辟了新的发展空间和市场机会。

这些故事虽然基于虚构,但反映了电子行业中Ceramics公司可能面临的机遇和挑战,以及他们如何通过技术创新、环保理念、国际化战略、品质管理和跨界合作等方式实现发展的普遍现象。当然,实际情况中每家公司的具体发展历程和策略都会有所不同,需要根据具体情况进行分析和评估。

ACP Optoelectronic Technology Co Ltd公司的发展小趣事

在国内市场取得一定成绩后,ACP Optoelectronic Technology Co Ltd开始积极拓展国际市场。公司积极参加国际电子展会和技术交流活动,与海外企业建立合作关系,拓展销售渠道。经过几年的努力,ACP Optoelectronic Technology Co Ltd的产品已经成功打入多个国际市场,公司也逐渐发展成为一家具有国际影响力的光电企业。

AUK Contractors Co Ltd公司的发展小趣事

AUK Contractors Co Ltd成立之初,电子市场正处于技术革新的热潮中。公司凭借对新技术敏锐的洞察力,成功研发出一款具有颠覆性的电路板设计,显著提高了电子设备的性能和稳定性。这一创新不仅赢得了客户的广泛认可,还为公司赢得了多个重要合同,从而奠定了在电子行业中的坚实地位。

Daniel Woodhead公司的发展小趣事

为了进一步提升技术水平和市场竞争力,Daniel Woodhead公司开始寻求与国际知名企业的合作。公司与多家国际知名半导体制造商和电子产品生产商建立了战略合作关系,共同研发新技术、新产品。这些合作不仅为公司带来了先进的技术和理念,还拓宽了公司的国际视野和市场渠道。

问答坊 | AI 解惑

用电阻做功率模拟

请教各位,我现在测一块散热板的散热效率,打算用铜壳线绕电阻做一个30W的发热源,电阻型号有以下几款 220Ω/5W;500Ω/8W;输入电压在60V左右,请问应该怎样排列电阻效果才好?谢谢!…

查看全部问答>

闪电击中世界最高建筑哈利法塔

上面这张令人震惊的照片展示了世界最高建筑哈利法塔遭闪电击中时的场面。 照片的拍摄者是一位23岁名叫穆罕默德·哈姆丹的学生,来自巴基斯坦,目前在阿联酋攻读建筑工程学。当时,迪拜正遭受暴风雨的袭击。雷电中,高达828米的哈利法塔在紫色的 ...…

查看全部问答>

今天参加mcu day赠送的一款开发板

参加TI mcu Day时,送的开发板,据说可以当做jtag仿真器使用,双重功能!!!…

查看全部问答>

U盘多盘符的问题

我在一个嵌入式系统中,主机在GET MAX LUN我已经返回01,但是主机并未显示2个盘符.仅仅出现了一个盘符 还需要做哪方面的工作…

查看全部问答>

关于桥式整流

这是在空闲之际模拟的几张桥式整流和接电容的图片,希望能对大家有点用处。    大家注意看波形随着电容的变化而变化。…

查看全部问答>

hmc5883的程序有人做过么?我的程序哪里出问题了?本人菜鸟,见笑了。

调了好几个小时了,就是不知道问题在哪里,请高手们指点。 测量先不说,就是怎么读寄存器都没弄清。 看了中文的pdf了,但是还是没搞懂,先看看我的程序吧。 程序部分(已近将无关部分删除): uchar code table[]=\"0123456789\"; //////////// ...…

查看全部问答>

有谁用了ADS8332,求程序!

最近用到团购买回来的ADS8332,但是调试了两天没成功,求助各位!谢谢!…

查看全部问答>

debug正常,51运算错误

已经用其他程序试验过了,不是xdata的问题,xdata里的数据能正常使用。我在用51做一个32点的fft。 部分代码如下: #include #include #define  uchar  unsigned  char #define  uint unsigned int ...…

查看全部问答>

谁用单片机驱动过PS2的数字小键盘?

我在网上买了一块PS2的数字小键盘,就是传统台式机键盘最右边的数字键部分。 学习了一下PS2及扫描编码相关内容,看懂了程序,但是,由于小键盘只有部分按键,有的键还是不能读取。 0—9数字键是可以输入的,小键盘的enter也能读取,但+、-、*、/ ...…

查看全部问答>