外中断(按键)控制数码管显示
2011-04-28 16:58
477 查看
/************************************************************************
功能:按键中断控制数码管加、减显示(独立显示)
所用器件:STC12C5A32S2
************************************************************************/
#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);
}
/*************************************************
外中断0函数
功能:KEY6按下,数码管数字加一
*************************************************/
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); // 延时消除松键抖动
}
}
/*************************************************
外中断1函数
功能:KEY2按下,数码管数字减一
*************************************************/
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. 中断处理程序
功能:按键中断控制数码管加、减显示(独立显示)
所用器件:STC12C5A32S2
************************************************************************/
#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);
}
/*************************************************
外中断0函数
功能:KEY6按下,数码管数字加一
*************************************************/
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); // 延时消除松键抖动
}
}
/*************************************************
外中断1函数
功能:KEY2按下,数码管数字减一
*************************************************/
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. 中断处理程序
相关文章推荐
- 按键控制数码管0-99显示,十位不跳,用定时器T0中断
- 并行口实现数字0~9、A~F、L、U、P、n总共19个键盘,将按键的结果用7段数码管(例如:7SEG-MPX-CA-BLUE)显示(可选——按键控制移位)出来
- 4*4矩阵按键控制数码管显示0-F
- 单片机:按键(使用中断)控制数码管的数字加减(c语言实现)
- 按键控制单个数码管显示
- 按键控制数码管显示
- 用定时器0控制切换流水灯顺序,用外部中断控制两种数码管显示方式
- 按键控制数码管显示
- 【数码管/定时器/中断】一个定时器控制数码管显示
- 按键控制计数,用两个数码管显示0到99。十位数为0的时候,显示为空白
- EEPROM—_IIC总线编程,用按键控制IIC写入读取数据并由数码管显示
- 按键控制数码管显示
- 4位共阳数码管 显示数字,调节亮度,时钟调时,控制LED巧妙编程
- 基于mini2440的按键中断控制LED(裸机代码)
- 使用中断INT0和INT1来实现数码管显示以及清零
- 按键控制蜂鸣器--采用中断方式(3)
- .net micro framework的入门例程-点灯神话-3.按键中断控制LED
- S3C2410 按键控制LED(中断)
- STC89C52单片机控制超声波测距模块SR04模块,带温度矫正,flash存储源程序,显示在数码管上
- 外部按键 控制 LED 中断 (参考 http://www.oschina.net/question/565065_115196?sort=time )