#include "config.h"
#define uint unsigned int
#define uchar unsigned char
#define ulong unsigned long
#define SIGNAL P3_5 // 键盘初始信号
#define KEY6 P3_2 // KEY6口就是INT0口
#define KEY2 P3_3
int num;
// 延时约(0.001 * n)秒
void delay(unsigned char n)
{
ulong i;
do {
i = CPUCLK / 1000;
while(i--);
} while (--n != 0);
}
void int0() interrupt 0 // 也可不判断是否为KEY6按下,因为引发此中断的就是KEY6键
{
if(KEY6 == 0)
{
delay(10); // 延时消除按键抖动
if (KEY6 == 0) // 确定有键按下
{
num++;
if (num > 9)
num = 0;
P0 = num;
}
while (!KEY6) ; // 等待KEY1松开
delay(10); // 延时消除松键抖动
}
}
void int1() interrupt 2
{
if(KEY2 == 0)
{
delay(10); // 延时消除按键抖动
if (KEY2 == 0) // 确定有键按下
{
num--;
if (num < 0)
num = 9;
P0 = num;
}
while (!KEY2) ; // 等待KEY1松开
delay(10); // 延时消除松键抖动
}
}
// 外中断初始化函数
void int_init()
{
EA = 1; // 开总中断
EX0 = 1; // 开外中断0
IT0 = 0; // 外中断0低电平触发方式
EX1 = 1;
IT1 = 0;
}
// 主程序入口
void main(void)
{
int_init();
SIGNAL = 0; // 重要!!虽然SIGNAL和IT1是同一地址,但必须初始化SIGNAL
num = 0;
P0 = num;
for (;;){
}
}
外中断程序设计步骤:
1. 开总中断
2. 开外中断
3. 设置外中断触发方式
4. 中断处理程序
关键字:外中断 按键控制 数码管显示
引用地址:
外中断(按键)控制数码管显示
推荐阅读最新更新时间:2024-03-16 14:42
对单片机数码管显示段选位选的理解
在51单片机的数码管的应用开发中一些小的细节还是应该注意到的。 其中位选信号应该在段选之前打开,下面是一段示例代码(我用的是国信长天开发板): #include reg51.h // 包含51单片机寄存器定义的头文件 #include intrins.h #define uint unsigned int sbit buzz=P0^6; /************************************************** 函数功能:d延时函数,延时一段时间 ***************************************************/ void dela
[单片机]
zigbee学习之路(三):按键的控制
一.前言 通过前一次的实验,相信大家都已经对cc2530程序的编写有了一定的认识,这次我们来操作和实验的是cc2530上的按键模块。 二.原理分析 我们先来看一下按键的原理图: 根据原理图我们可以得出,按键不按下的时候值为0,因为接地,所以,按键要被按下的时候,BUT1和BUT2输入值为1,当检测到它们为1时,按键就为按下的状态,因为P0DIR默认的状态是输入,所以不需要配置IO寄存器,当按键按下时,改变led的状态,来验证实验。 三.程序 #define LED1 P1_0 //LED1为P1_0端口控制 #define LED2 P1_1 //LED2为P1_1端口控制 #define LED3 P1_4
[单片机]
51单片机按键控制输出pwm的占空比
之前说到利用51单片机输出pwm,但是输出的pwm是固定占空比的,如果想要改变占空比,还得回过头来修改程序并重新烧写进单片机。这样做的话不但麻烦、效率低,还又把芯片的可烧写次数减少了一次,虽然51的芯片现在很便宜,但能省点就省点,能不浪费就不浪费,哈哈,开玩笑啦!最主要的还是为了灵活性,为此特地通过加入按键的功能来实现动态修改输出的pwm的占空比。这样在用pwm控制电机的时候就能使用按键来控制电机转速了。废话不多说,见下: #include reg51.h #define uint unsigned int #define uchar unsigned char uchar
[单片机]
msp430按键控制灯亮灭
msp430按键控制 LAUNCHPAD的实验板上共有两个按键,一个按键接至RESET脚,固定作为复位按键来使用(S1)。按键S2连接在引脚P1.3,可供我们自由使用。这里我们实现通过此按键控制LED的闪烁。应当注意,连接按键的引脚松开时为高电平,按下为低电平。 按键一般可以通过扫描和中断来实现。扫描是指程序通过循环不停地读取IO口的输入值,并以此判断按键是否按下。中断实现可以免除扫描的麻烦,在按键按序通过循环不停地读取IO口的输入值,并以此判断按键是否按下。中断实现可以免除扫描的麻烦,在按键按下时,中断当前的程序,执行中断处理函数,效率较高。 msp430按键控制灯亮灭 1、实现功能:按一下按键,le
[单片机]
PWM --用按键控制 LED 的亮度
以前写过一篇关于 PWM 的博文,已经有一年了,链接如下: http://hi.baidu.com/do_sermon/item/ff523b0a8b9d3d173b53ee74 文中使用了示波器来显示不同占空比的波形。 其实,利用 LED 也能通过亮度来表现出 PWM 参数的变化,用实物进行测试,效果很好,但是用 PROTEUS 进行仿真试验,却只是看到闪烁的厉害,基本上看不出亮度的变化。 近来发现,加上一个大电容,就可以减弱 LED 的闪烁,亮度就能够稳定一些,这样一来,就可以用 PROTEUS 软件直接观察亮度的变化了。 电路见下图。图中的大电容(C6)的容量是 4700uF,这个是可以随便调整的,实
[单片机]
STC51-数码管显示
1 数码管显示原理 我们先来看几个数码管的图片, 左图为单位数码管、中图为双位数码管、右图为四位数码管, 另外还有右下角不带点的数码管,最右图还有“米”字数码管等。 不管将几位数码管连在一起,数码管的显示原理都是一样的,都是靠点亮内部的发光二极管来发光,下面就来我们讲解一个数码管是如何亮起来的。数码管内部电路如下图所示,从图(a)可看出,一位数码管的引脚是10个,显示一个8字需要7个小段,另外还有一个小数点,所以其内部一共有8个小的发光二极管,最后还有一个公共端,生产商为了封装统一,单位数码管都封装10个引脚,其中第3和第8引脚是连接在一起的。而它们的公共端又可分为共阳极和共阴极,图(b)为共阴极内部原理图,图
[单片机]
时钟及温度用74hc164+74ls145数码管显示单片机程序
下面是实物图: 电路图 很简单我就不画了 数码管用74hc164串行转并行 芯片 +74ls145这2个芯片驱动一个负责段选一个负责位选,具体看程序顶部的引脚定义.完整的keil工程文件下载地址: http://www.51hei.com/f/164smg.rar 下面是程序源码. #include reg52.h #include intrins.h #define uchar unsigned char #define uint unsigned int sbit iicclk=P1^0;////总线存储时钟引脚定义 sbit iicdat=P1^1;////总线存储数据引脚定义 sbit hc164dat
[单片机]
基于AVR微控制器的ADC按键设计技巧
1 引言 在单片机应用领域中,人机交互的途径和方式灵活多样,但键盘输人仍然是最常见、最重要的方法。通常实现键盘接口的方式有:直接输入、矩阵结构、A/D方式、键盘和显示复用、并行扩展、串口扩充以及用键盘和显示专用控制器件。本设计使用A/D转换的方法,其硬件电路简单,按键电路与MCU的连线少,易修改,而且可以节省MCU有限的I/0资源。但在处理按键数目较多的情况时,往往会出现按键不可靠的问题,如按键没有任何反映,按键功能交叉。本文除了给出A/D按键的硬件电路外.着重介绍利用软件技巧来实现可靠的键盘接口。 2硬件设计 本设计选用的单片机是基于AVR增强型RISC结构的低功耗8位CMOS微控制器ATmegal68「1」该微控制器具有
[模拟电子]