专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
51单片机
请教大哥大姐们51单片机一个定时器,多处程序怎么用
2019-07-15 23:03
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
51单片机
8918
11
972
一个定时器,多个程序用,(如主程序中让每进20次定时中断(1秒),让灯亮一下,这样循环着,当触发外部中断时,可以是1秒也可以大于1秒,响应另一个触发事件)
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
11条回答
auqyygtj
2019-07-17 02:39
上面的问题解决了,触发外部中断后把while(1) 死循环换成for就可以了
//……………………以下是外部中断中循环子程序……………………………………
void zhongduan()
{
init();//初始化程序
ptemp=0; //给加累数初值0
while(1) //这个循环是让它在满足条件的情况下循环累加数显示,关系量ptemp
// for(ptemp=0;ptemp<101;ptemp++) //如果这里启用for,而禁用while,执行完后会返回到主函数
{
if(tt>=1)//判断tt是否大于等于1,这里tt就是主程序里dd=20,tt自加1
tt=0; //置0重新计时
ptemp++;//初值自加1
if(ptemp==101) //给累加数定一个最大数
{
ptemp=0;
if(ptemp==0)
{
wela=1; //打开位选
P1=0xff; //将P1口置数11111111全部高电平, 打开8个数码管
wela=0; //关闭位选
dula=1;//打开段选
temp=0xfe; //赋temp值为11111110 ,也就是数码管的a段
P1=temp; //将temp的值赋予给P1口
delay(10); //调用延时程序
for(rr=0;rr<61;rr++)
// while(1) //这个循环是让它满足条件下循环小口字关系量rr
{
temp=_crol_(temp,1); //左移一位
P1=temp; //移位后的值赋予给P1口
delay(8); //调用延碧
rr++;//自加1,便于下面调用(rr=6刚好循环一次口字)
if(temp==0xdf) /*检测temp是否等于(高位11011111低位),因为数码管七段加一个DP点
我们不要DP(P1.7)点和G段(P1.6)亮*/
temp=0x7f; //置位到DP(P1.7)点,也就是P1.6和P1.7跳过(高位0111 1111低位)
if(rr>=60)//就是循环5个口字
{
for(ee=0;ee<10;ee++) //这里要是用while(1)就会死循环
// while(1) //这个循环是让它满足条件下循环大口字 ,关系量ee
{
xunhuankou();//调用循环8位数码管组成的口子子程序
ee++;//每循环一次自加1
}
}
}
}
}
qian=ptemp/1000;
bai=ptemp%1000/100;
shi=ptemp%1000%100/10;
ge=ptemp%10;
display(qian,bai,shi,ge);
}
}
//……………………以上是外部中断中循环子程序……………………………………
加载中...
查看其它11个回答
一周热门
更多
>
相关问题
【东软载波ESF0654 PDS开发板活动】开箱
1 个回答
东软载波ESF0654 PDS开发板外部中断
1 个回答
东软载波ESF0654 PDS开发板高级控制定时器AD16C4T
1 个回答
用串口调试助手为什么只能在hex模式接收发送而在文本模式不行
9 个回答
触摸芯片SC02B/SC04B在地砖灯的设计方案
1 个回答
相关文章
51单片机与蓝牙模块连接
0个评论
51单片机的硬件结构
0个评论
基于51单片机的无线遥控器制作
0个评论
51单片机 AD转换
0个评论
51单片机数码管递增显示
0个评论
如何实现对单片机寄存器的访问
0个评论
基于51单片机的指纹密码锁
0个评论
×
关闭
采纳回答
向帮助了您的知道网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
51单片机
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
×
付费偷看金额在0.1-10元之间
确定
×
关闭
您已邀请
0
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
//……………………以下是外部中断中循环子程序……………………………………
void zhongduan()
{
init();//初始化程序
ptemp=0; //给加累数初值0
while(1) //这个循环是让它在满足条件的情况下循环累加数显示,关系量ptemp
// for(ptemp=0;ptemp<101;ptemp++) //如果这里启用for,而禁用while,执行完后会返回到主函数
{
if(tt>=1)//判断tt是否大于等于1,这里tt就是主程序里dd=20,tt自加1
tt=0; //置0重新计时
ptemp++;//初值自加1
if(ptemp==101) //给累加数定一个最大数
{
ptemp=0;
if(ptemp==0)
{
wela=1; //打开位选
P1=0xff; //将P1口置数11111111全部高电平, 打开8个数码管
wela=0; //关闭位选
dula=1;//打开段选
temp=0xfe; //赋temp值为11111110 ,也就是数码管的a段
P1=temp; //将temp的值赋予给P1口
delay(10); //调用延时程序
for(rr=0;rr<61;rr++)
// while(1) //这个循环是让它满足条件下循环小口字关系量rr
{
temp=_crol_(temp,1); //左移一位
P1=temp; //移位后的值赋予给P1口
delay(8); //调用延碧
rr++;//自加1,便于下面调用(rr=6刚好循环一次口字)
if(temp==0xdf) /*检测temp是否等于(高位11011111低位),因为数码管七段加一个DP点
我们不要DP(P1.7)点和G段(P1.6)亮*/
temp=0x7f; //置位到DP(P1.7)点,也就是P1.6和P1.7跳过(高位0111 1111低位)
if(rr>=60)//就是循环5个口字
{
for(ee=0;ee<10;ee++) //这里要是用while(1)就会死循环
// while(1) //这个循环是让它满足条件下循环大口字 ,关系量ee
{
xunhuankou();//调用循环8位数码管组成的口子子程序
ee++;//每循环一次自加1
}
}
}
}
}
qian=ptemp/1000;
bai=ptemp%1000/100;
shi=ptemp%1000%100/10;
ge=ptemp%10;
display(qian,bai,shi,ge);
}
}
//……………………以上是外部中断中循环子程序……………………………………
一周热门 更多>