重新设计这段单片机程序,采用定时器中断轮询的机制来判断是否有按键按下,并实现同样功能。

重新设计这段单片机程序,采用定时器中断轮询的机制来判断是否有按键按下,并实现同样功能。,第1张

#include<reg51h>

#define uchar unsigned char

#define uint unsigned int

uchar code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,

0x88,0x83,0xc6,0xa1,0x86,0x8e,0x00};

sbit BEEP=P3^7;

bit flag=0;

uchar Pre_KeyNo=16,KeyNo=16;

void DelayMS(uint x)

{

uchar i;

while(x--) for(i=0;i<120;i++);

}

void void t0isr() interrupt 1

{

uchar Tmp;

P1=0x0f;

DelayMS(1);

Tmp=P1^0x0f;

switch(Tmp)

{

case 1: KeyNo=0;break;

case 2: KeyNo=1;break;

case 4: KeyNo=2;break;

case 8: KeyNo=3;break;

default:flag=1;break;

}

P1=0xf0;

DelayMS(1);

Tmp=P1>>4^0x0f;

switch(Tmp)

{

case 1: KeyNo+=0;break;

case 2: KeyNo+=4;break;

case 4: KeyNo+=8;break;

case 8: KeyNo+=12;

default:flag=1;break;

}

}

void Beep()

{

uchar i;

for(i=0;i<100;i++)

{

DelayMS(1);

BEEP=~BEEP;

}

BEEP=0;

}

/

void main()

{

TMOD=0x01;

TH0=(65536-10000)/256;

TL0=(65536-10000)%256;

TR0=1;

ET0=1;

EA=1;

P0=0x00;

BEEP=0;

while(1)

{

if(flag)

{

flag=0;

P0=~DSY_CODE[KeyNo];

Beep();

Pre_KeyNo=KeyNo;

}

DelayMS(100);

}

}

因为调用9号功能,字符串是以'$'结束的,所以你可以

STRING DB 8

DB 0

DB 8 DUP(‘$’)

这样就可以显示了

宏定义CRLF ENDM应该直接是ENDM

结束时应为MOV AH,4CH INT 21H

int main()

{

while( true )

{

程序。。

if( 事件号改变 )

{ continue; Init(); }

}

}

方法很多种,一楼兄弟已经给你一个很好的解决方法了简单思路供参考:1检查故障泵;2定时器或其他方法循环启动P1,P2,P3;3若P1、P2、P3任何一个有故障停止此泵运转,同时启动P4,报警提示Pn故障;4若同时两台泵故障,令两台循环,报警,处理5若同时三台泵故障,报警,处理6全部故障,报警,处理其它异常状况按要求逐一处理

以上就是关于重新设计这段单片机程序,采用定时器中断轮询的机制来判断是否有按键按下,并实现同样功能。全部的内容,包括:重新设计这段单片机程序,采用定时器中断轮询的机制来判断是否有按键按下,并实现同样功能。、arm汇编的轮询该怎么实现、C语言 任务号轮询等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: https://outofmemory.cn/zz/10142450.html

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

发表评论

登录后才能评论

评论列表(0条)

保存