技术文档

键盘 中断 单片机 单片机的独立按键学习,实现60秒循环数字的启动暂停与清零

小编 2025-08-05 技术文档 23 0

单片机的独立按键学习,实现60秒循环数字的启动暂停与清零

想要学习单片机必须要准备单片机开发板一块,和单片机C语言版本的书籍,我会把每天录制视频的源代码到头条,并且录制相同文章名字视频到西瓜视频,如果你再学习独立按键这一块有不明白的地方可以点开我的头像,进入我的主页,点击视频观看学习。

目前视频录制了9个左右,没学过的结合书本,结合我的视频,都可以学会。

话不多说先上今天的仿真效果图:

然后下面是本仿真图的源代码:如果有错误,请大神指教。

#include<reg52.h> //头文件,把芯片的数据地址编译成C语言可以调用的句子。

#define uchar unsigned char //宏定义 把后面的长句 给他们一个新定义,实现同样的功能。

#define uint unsigned int //宏定义 把后面的长句 给他们一个新定义,实现同样的功能。

sbit dula=P2^0; //把p2.0给他一个新名字叫dula 用于数码管锁存器段选位置

sbit wela=P2^1;//把p2.1给他一个新名字叫wela 用于数码管锁存器位选的位置

sbit key1=P3^0; //同样的,给按键1和按键2分别找两个串行口来对接。

sbit key2=P3^1;

uchar code table[]={0x3f,0x06,0x5b,0x4f, //定义的一个数码管的编码表。

0x66,0x6d,0x7d,0x07, //阴极数码管

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71};

void delayms(uint); //延时子程序

void display(uchar,uchar); //显示子程序

void keyscan(); //独立按键子程序

uchar num,shi,ge,num1; //定义四个无符号字符

void main() //主程序

{

TMOD=0x01; //中断确定工作方式,和选择定时器0

TH0=(65536-45872)/256; //装初值,

TL0=(65536-45872)%256; //对这一块不太明白的,可以看我上一个视频

EA=1; //开启总的中断

ET0=1; ////开启定时器/计数器寄存器中断 开启中断具体定时器中断

while(1) //循环式判断,

{

keyscan(); // 调用按键子程序,对按键子程序进项不断地扫描

display(shi,ge);//调用显示子程序,对显示子程序,进行不断地刷新显示

}

}

void display(uchar shi,uchar ge) //显示子函数,并且调用形式参数

{

P0=0x00; //为了在仿真电路让P0口没有其他的数据来影响段选显示的/阴极数码管,高电平有效。让数码管变得干净。

dula=1; //锁存器开

P0=table[shi]; 把十位的数字送到P0

dula=0; //锁存器关闭// 段选位置

P0=0XFF; //低电平有效,让位选的位置变得干净。

wela=1; //位选锁存器开启。//低电平有效。

P0=0xfe;//送入位选的 选位。

wela=0; 位选锁存器关闭。

delayms(5); /延时5毫秒。

P0=0x00;

dula=1;

P0=table[ge];

dula=0;

P0=0xff;

wela=1;

P0=0xfd; //选择数码管的第一个位置 来显示数字

wela=0;

delayms(5);

}

void delayms(uint xms) //延时子程序

{

uint i,j; //定义两个无符号字符

for(i=xms;i>0;i--)

for(j=110;j>0;j--);

}

void keyscan() //今天的重点:按键扫描子程序

{

if(key1==0) //判断按键1 有没有按下

{

delayms(10); //延时10毫秒,延时去抖动

if(key1==0) //在判断一次按键1有没有按下

{

while(!key1); //等待按键释放,如果没有释放那么按键始终等于0,也就是低电平。按键按下去了,

TR0=~TR0; //定时器的开启与关闭,开启 开始计数,关闭就会暂停

}

}

if(key2==0) //判断按键2是否按下

{

delayms(10); //延时去抖动

if(key2==0) //再次判断

{

num1=0;// num1是送给数码管的数值,0-60根据定时器变化的值。

while(!key2);//判断按键2时候松开,没有松开始终等于低电平。

}

}

}

void T0_time() interrupt 1 //定时器的子程序

{

TH0=(65536-45872)/256; //重装初值,这一块如果听不懂,可以去看上个视频。

TL0=(65536-45872)%256;

num++;

if(num==20) //定时器每次50毫秒,这里加个20次的循环,用来凑足1秒钟。

{

num=0;

num1++;

if(num1==60) //给num1进行每一秒钟数值变化送数值。

num1=0;

shi = num1/10; //求模的数,送到shi

ge = num1%10;

}

}

单片机Gpio中断讲解!#嵌入式培训

按键中断讲解。

讲一下单片机的GPIO外部中断。单片机的按键是日常开发中常用的功能,也讲一下单片机按键的外部中断触发方式。前面这些都是中断的初始化,涉及到中断的有一个抢占优先级和响应优先级。有谁不知道抢占优先级和响应优先级是怎么回事的?其实随便百度一下讲的都很清楚,CSDN里边讲的也很清楚。

抢占优先级就是这里就不展开说了,不清楚的自己查一下,到处都是讲解。重点就是外部中断的初始化,进去,这是按键的初始化,也就是GPL的初始化。这是两个GPL,三个GPL是PE3P14和P a03个GPIO,设置成输入的方式。

其实就仿照它,比如想整一个GPL的按键,有了一个PA0,参照它来个PA1就行了。这是初始化中断线,PA0是在外部中断线0上,假如要初始化PA1,触发完之后是使得中段优先级。

这个时候比如PA0原来是悬空,现在让它接地,PA01接地,这时候中段就直接响应了,直接进来。中段里面先来一个10毫秒的消斗,然后去执行功能函数。比如在公交报站里边想要去改变站点的信息,可以给它设置个flag,设置一个标志量,在这里边比如是加站就让flag加加一,是减站就让flag减一,用完之后清中段。

这就是单片机GPL外部中断的用法。

相关问答

单片机 应用中按键的 中断 控制方式?

在单片机应用中,按键的中断控制方式是一种常见的处理按键输入的方法。其主要思想是,当按键被按下或释放时,会产生一个电信号,这个信号可以被单片机检测到,并...

单片机 如何利用 中断 进行复位?

谢谢邀请:1.题主你提出的问题好像本身就有问题,首先通过按压一个按键使单片机复位的方法,这个跟中断没有关系,每一个单片机系统都可以设计一个复位电路,这个...

单片机 按键选择外部 中断 0和1混合使用,下降沿触发,寄存器是否出现触发信号锁存?

你看来还没有理解“中断”的真谛,之所以要用中断,就是用来处理“不确定”事件的,如果都是可以预知的按“时序”运行的事件,那么就没有必要用“中断”了。你看...

单片机 是如何控制步进电机扎旋转的?

/*按键扫描函数,需在定时中断中调用,推荐调用间隔1ms*/voidKeyScan(){unsignedchari;staticunsignedcharkeyout=0;...

单片机 按键复位程序怎么写?

硬复位:用按键把单片机的复位脚(或电源)短接到地;软复位:1.把按键功能做成IO电平变化中断,进中断入口后,人为让程序跳转到程序初始化,起到复位的效果...硬...

单片机 的按键怎么外接-ZOL问答

1、每个I/O端口接一个按键:按键接另一端通常是接地,I/O口通常还应该接一个上拉电阻,有些单片机的I/O口可以配置成内部上拉,就不需要外接上拉电阻了。这种接法的...

51 单片机 中如何通过一个按键实现暂停与恢复?需要一个编程的思想?

反之亦然。3.掉电暂停。这样需要按键能触发cpu工作。所以,需要按键接到外部中断上面。中断后可以恢复CPU工作。在中断中再判断是否要让cpu掉电与否。不知道...

我用电脑 键盘 控制 单片机 灯为何不亮呢,请各位帮帮忙!-ZOL问答

因为进来中断后RI肯定为1if(RI=1){mykey=SBUF;RI=0;}有用(0)回复...使用51单片机内部定时器和EEPROM即可实现有用(0)回复展开查看...

51 单片机 定时器 中断 控制led灯亮灭?

1.在设置好TCON(IT0/1=0/1)寄存器,IE寄存器后当设定的外部中断电平被拉低时会执行中断程序,中断程序执行完毕后回到原程序执行处继续执行*2.外部中断TCON设...

单片机 中断 实验实验四外 中断 P1.0~P1.7接8个发光二极管,管...

[最佳回答]问题:提问者并未陈述相关待解决问题。1.未陈述是否通过代码实现。2.若通过代码实现,未陈述通过何种语言实现。3.未陈述单片机类型。4.未陈述发...

猜你喜欢