#include <avr/ioh>
#include <avr/interrupth>
void loop(){
}
void setup(){
timer();
}
void timer(){
TCCR2A = 0x00;
TCCR2B = 0x07;
TIMSK2 =_BV(TOIE2) | 0x00;
TCNT2 = 0x00;
TCCR2A = 0x01;
sei();
}
ISR(TIMER2_OVF_vect){
TCNT2 = 0x00;
//你的中断程序:
}
看没有给你出代码,我就花几分钟给你写一个程序。
#include "REG52H"
sbit KEY1_Outak = P1^3;
sbit Temp_Out001 = P1^0;
sbit Temp_Out002 = P1^1;
sbit Temp_Out003 = P1^2;
unsigned char Value_tem;
/
带形参延时1ms子函数
/
void Delay_1ms(unsigned int Temp)
{
unsigned int x, y;
for(x = Temp; x > 0; x--)
for(y = 110; y > 0; y--);
}
/
按键选择不同程序执行
/
void Scank_keyCmd(void)
{
if( KEY1_Outak == 0) //判断按键是否按下
{
Delay_1ms(10); //延时去抖动
if( KEY1_Outak == 0) //按键确实按下
{
Value_tem++; //开始执行变量加加
if(Value_tem == 3) //判断按键变量按下次数等于3
{
Value_tem = 0; //变量清零
}
while(KEY1_Outak == 0); //判断按键松手不等于零退出
}
}
}
/
不同程序按键选择执行
/
void Display_VslutsbekCmd(void)
{
if(Value_tem == 0) //如果没有按键按下变量默认值是0,执行LED1
{
do //进入循环
{
Temp_Out001 = 0; //LED1 = 0;
Delay_1ms(500); //延时500ms
Temp_Out001 = 1; //LED1 = 1;
Delay_1ms(500); //延时500ms
} while(Value_tem == 0); //判断变量等于0一直循环执行否则退出
}
else if(Value_tem == 1) //如果按键按下变量加1, 等于 1 执行LED1
{
do //进入循环
{
Temp_Out002 = 0;
Delay_1ms(500);
Temp_Out002 = 1;
Delay_1ms(500);
} while(Value_tem == 1); //判断变量等于1一直循环执行否则退出
}
else if(Value_tem == 2) //如果按键按下变量加1, 等于2执行LED2
{
do
{
Temp_Out003 = 0;
} while(Value_tem == 2);
}
}
/
主程序
/
int main(void)
{
while(1)
{
Scank_keyCmd(); //循环扫描检测是否有按键按下
Display_VslutsbekCmd(); // 主程序循环扫描显示相应程序
}
}
很简单的啊,不太清楚你的电路图,我把主要程序写一下:
#include<reg52h>
unsigned char flag=0;//设置flag作为标志位,初值为0,一旦产生中断,将其置1
void main()
{
EA=1;//开总中断
EX0=1;//开外部中断0 ,假设是由P32产生的中断
IT0=1;//设置产生中断的方式,这是表示下降沿触发
P0=0X0F;//假设矩阵键盘接P0口,给所有列线低电平,所有行线高电平
while(1)
{
if(flag==1) //这个是表示,如果中断不产生,下面的程序不会运行,只有中断了,才会键盘扫描
{
按键扫描程序,这个我就不写了,写法有很多啦
}
数码管显示程序,这个我也不写了,不晓得你是什么电路图
}
}
void scan() interrupt 0
{
flag=1;//表示,一旦中断产生了,将flag置1
}
希望对你有用,呵呵
不清楚你用的是什么型号的单片机,51单片机的PSW中只有F0,没有什么F1,也许你用的是其它型号的片子。
其实不管你用什么单片机,按你的题目要求不需要用标志位,我给你写个流程图吧。
(假设按键低电平有效)
初始化
↓
等待按键(只要用jb p32,$)
↓
开始计时
↓
等待按键(同上)
↓
停止计时
↓
等待按键
↓
清零
计时和显示只要用定时器中断就行了!
我所设计的流程是顺序结构,因为你的题目是“第一次按、第二次按、第三次按”,而你的想法的分支结构,当然就比顺序的难做了。
按你说的用标志位也是可以的,但主程序要同时实时的检测按键和标志位,太麻烦,不值得。
以上就是关于Arduino拖尾灯 添加按键中断主程序执行子程序全部的内容,包括:Arduino拖尾灯 添加按键中断主程序执行子程序、利用单片机中断写出按键程序实现每按下一个按键一个程序立马停止而去执行另一个程序,写出主程序、求个单片机矩阵键盘(4*4)中断(记得要中断)的C语言程序。。求高手自己写个啊等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)