按键控制中断你这里的描述是不规范的,我想应该是两个按键接外部中断吧。
#include<reg51h>#define uchar unsigned char
uchar dat;
void ext0() interrupt 0
{
dat++;
P0=dat;
}
void ext1() interrupt 2
{
dat--;
P0=dat;
}
main()
{
EX0=1;
EX1=1;
IT0=1;
IT1=1;
EA=1;
while(1);
}
实现流水灯的方式有很多种(中断,定时器,延时等等),看用哪种方式,最简单的是延时做流水灯,那么在死循环里面增加按键检测,判断出有按键按下来时,再进入死循环,程序不往下走就可以暂停,再按跌出死循环。
#include //51系列单片机定义文件
#define uchar unsigned char //定义无符号字符
#define uint unsigned int //定义无符号整数
void delay(uint); //声明延时函数
void main(void)
{
uint i;
uchar temp;
uint Flag1=0; 按键标志位bai
uint Flag2=0;
while(1)
{
Flag1 = keyscan();
if(Flag1==1)(Flag2=~Flag2); //如果一旦检测到一次按键扫描就把标志位2 打开;再次就关闭;
if(Flag2==1)// 如果标志位打开就开始流水灯
{
temp=0x01;
for(i=0;i<8;i++) //8个流水灯逐个闪动
{
P1=~temp;
delay(100); //调用延时函数
temp<<=1;
}
}
扩展资料:
单片机编程就是硬件是单片机,基于单片机进行的程序开发,在有周围外设支持的情况下,用软件来控制的部分通过单片机编程来实现。单片机能识别的语言是硬件语言即汇编,因此编程就是围绕汇编来实现,有直接用汇编程序来编写的,但是较难调试的编写,特别是一上规模就更不易实现,因此常用高级语言来写然后通过编译器转化成汇编。
参考资料来源:百度百科-单片机C语言编程
很简单的啊,不太清楚你的电路图,我把主要程序写一下:
#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
}
希望对你有用,呵呵
语句分号后为你原先指令,前面为修改后指令。
主要是标号错误和输入时输入法错误,要英文模式。
修改后编译通过。
但没有 按8次后重复开始状态,你自己加入该功能。
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP iINT0 ;LJMP INT0
ORG 0013H
LJMP iINT1 ;LJMP INT1
ORG 0030H
MAIN:SETB EA
SETB EX0
SETB EX1
SETB IT0
SETB IT1
MOV B,#0FFH
HERE:SJMP HERE
iINT0:MOV A,B ;INT30:MOV A,B
RL A
DEC A
MOV B,A
MOV P1,A ;MOV P1,A
RETI
iINT1:MOV A,B ;INT1:MOV A,B
RR A
ADD A,#80H
MOV B,A
MOV P1,A ;MOV P1,A
RETI
end
以上就是关于用两按键控制51单片机的2个外部中断怎么编全部的内容,包括:用两按键控制51单片机的2个外部中断怎么编、单片机c语言编了个流水灯,用按键怎么实现它暂停。、求个单片机矩阵键盘(4*4)中断(记得要中断)的C语言程序。。求高手自己写个啊等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)