中科因仑“3+1”工程特种兵精英论坛
标题:
运用延时的办法消除抖动,求大神指导不足
[打印本页]
作者:
jerryzhai
时间:
2014-7-28 17:17
标题:
运用延时的办法消除抖动,求大神指导不足
本帖最后由 jerryzhai 于 2014-7-29 11:37 编辑
/*******************************************************
* 程序功能:外部中断触发
* 接线说明:核心板JP2 PA0-PA7连接到系统底板静态数码管显示电路JP71,PD2,PD3接到JP74上的DK0,DK1
* 实验现象:按下DK0数码管加1,按下DK1数码管减1
* 日 期 : 2014/7/28
* 作 者 : 翟志刚
*******************************************************/
#include <iom16v.h>
#include <macros.h>
#define uchar unsigned char
#define uint unsigned int
uchar led_7[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};//数码管从0显示到F
uchar counter = 0;
/*******************************************************
//函数名称:delay_ms(uint k)
//函数功能:延时子程序
//入口参数:k,延时时间参数
//返回参数:无
********************************************************/
void delay_ms(int k)
{
int i,j;
for(i=0;i<k;i++)
{
for(j=0;j<1000;j++)
;
}
}
// INT0中断服务程序
#pragma interrupt_handler int0:2
void int0(void)
{
if(PIND&0x40)
;
else
{
delay_ms(100);
counter++;
if(counter >= 16)
counter = 0;
}
}
// INT1中断服务程序
#pragma interrupt_handler int1:3
void int1(void)
{
if(PIND&0x40)
;
else
{
delay_ms(100);
counter--;
if(counter <= 0)
counter = 15;
}
}
void main(void)
{
PORTA = 0xFF; //初始化
DDRA = 0xFF;
DDRD = 0x00; //将D口初始化为输入
SREG=0x80; // 全局中断允许
GICR|=0xC0; // 允许INT0、INT1中断
MCUCR=0x0A; // INT0、INT1下降沿触发
GIFR=0xC0; // 清除INT0、INT1中断标志位
while (1)
{
PORTA = led_7[counter]; // 显示计数单元
};
}
复制代码
作者:
jerryzhai
时间:
2014-7-28 17:19
本帖最后由 jerryzhai 于 2014-7-29 11:37 编辑
错了一行,// INT1中断服务程序
#pragma interrupt_handler int1:3
void int1(void)
{
if(PIND&0x40)
;
else
{
delay_ms(100);
counter--;
if(counter <= 0)
counter = 15;
}
}中的if(PIND&0x04)改成if(PIND&0x08)
复制代码
作者:
张衍波
时间:
2014-7-29 11:52
值得研究一下,,,
作者:
SDC158477392
时间:
2014-7-29 14:59
我想想,
作者:
liliuyang
时间:
2014-7-29 15:18
跪求马老师出山。。
欢迎光临 中科因仑“3+1”工程特种兵精英论坛 (http://bbs.enlern.com/)
Powered by Discuz! X3.4