永发信息网

51单片机10s内无操作就执行某一已操作怎么实现?

答案:3  悬赏:50  手机版
解决时间 2021-11-13 18:41
  • 提问者网友:两耳就是菩提
  • 2021-11-13 13:28
51单片机10s内无操作就执行某一已操作怎么实现?
最佳答案
  • 五星知识达人网友:执傲
  • 2021-11-13 14:29
定时,当然要用定时器了,就得写一个定时中断子程序,定时多少,计数中断次数,累计到10S就进行一下操作。很简单的事吗。
定时器的程序你应该写过吧,还是照样写吗。只不过是10S到了,就进行下一个操作吗。追问请问在主程序里怎么开定时器啊,直接TR0=1;这样吗?追答定时器的程序都没有写过呀,在百度这里随便就可以找到一大堆的程序,还是看看再说吧。追问我都看过了,但是我看到的都是主程序就是定时程序啊,我不知道要是定时程序作为子程序如何引用追答给你一个例子吧

见下面仿真图,仿真后,按加键,显示4位数。

无按键10秒到,显示0000

#include
#include
sbit S1=P3^2;  //定义按键1
sbit S2=P3^3;  //定义按键2
unsigned char code Ledtab[]=
{0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};//共阳数码管段码表
unsigned char LedBuff[4];
unsigned int  nx=1234;   //显示4位数计数
unsigned char cnt;       //中断计数,200次为10秒
void delay()

{
unsigned int j;
for(j=400;j>0;j--);
}
//显示子程序
void display()
{
unsigned char j,ledbit=0x01;
for(j=0;j<4;j++)
{
P2=ledbit;
P0=Ledtab[LedBuff[j]];
ledbit=_crol_(ledbit,1);
delay();
}
}


void main()
{
TMOD=0x01;  //用T0定时
TH0 =0x3C;  //T0定时50ms,晶振12M
TL0 =0xB0;
EA=1;ET0=1;
TR0 = 1;
while(1)
{
display();
if(S1==0)  //按S1键,计数nx加1
{
cnt=0; //有按键,计时10秒清0
nx++;
while(S1==0)display();
}
if(S2==0)  //按S2键,计数nx减1
{
cnt=0; //有按键,计时10秒清0
nx--;
while(S2==0)display();
}
if(cnt>=200)//无按键10秒到
{
cnt=0;  //重新计时
nx=0;   //显示0000
}
LedBuff[0]=nx/1000;  //取千位
LedBuff[1]=nx/100%10;//取百位
LedBuff[2]=nx/10%10; //取十位
LedBuff[3]=nx%10;    //取个位
}
}
void t0int() interrupt 1

{
TH0 = 0x3C;
TL0 = 0xB0;
cnt++;
}
全部回答
  • 1楼网友:往事埋风中
  • 2021-11-13 16:12
你好!你最好是要实现什么功能?达到什么控制目的追问采用51单片机,10s内按键无操作数码管就显示0000追答是c语言还是汇编呢追问c语言的,我就是不清楚如何使用定时器计数器,如何开,如何在主程序内引用
  • 2楼网友:第幾種人
  • 2021-11-13 15:21
定时器计时10,生成变量i。if(i =1)后面加数码管显示0000程序追问请问在主程序里怎么开定时器啊,直接TR0=1;这样吗?
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯