|
本帖最后由 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]; // 显示计数单元
- };
- }
复制代码
|
|