/* * GccApplication2.c * * Created: 2014-8-25 20:05:24 * Author: Administrator */ /**************************************************************** 名称:3.23 报警器与旋转灯 (The alarm and the rotary lamp) 平台:GCC atmega16 *****************************************************************/ #define F_CPU 1000000UL // 1M 晶振 //#define INT8U unsigned char //#define INT16U unsigned int #include <avr/io.h> #include<avr/interrupt.h> #include<util/delay.h> #define INT8U unsigned char #define INT16U unsigned int #define SPK()(PORTD^=_BV(PD7)) // 蜂鸣器输出定义 volatile INT8U FRQ=0x00; // INT8U ON_OFF=0; // INT8U Pattern=0xE0; /**************************************************************** 主程序 *****************************************************************/ int main() { DDRC=0xFF; // DDRD=~_BV(PD2); PORTD=_BV(PD2); // TCCR0=0x05; // TCNT0=256-F_CPU/1024*0.1; // TCCR1B=0x01; // MCUCR=0x02; // GICR=0x40; // TIMSK = 0x05; sei(); // Pattern = 0x01; while(1) { FRQ ++; /*FRQ在超过255溢出后 从0开始在继续递增*/ _delay_ms(1); } } /**************************************************************** 外部中断0,启停报警器声音和 LED 旋转 *****************************************************************/ ISR(INT0_vect) { ON_OFF=!ON_OFF; // 启停切换 if(ON_OFF) { TIMSK|=0x05; Pattern=0xE0; } else { TIMSK=0x00; PORTC=0x00; PORTD&=~_BV(PD7); } } /**************************************************************** T0 定时器中断程序控制 LED 旋转 *****************************************************************/ ISR(TIMER0_OVF_vect) { TCNT0=256-F_CPU/1024.0*0.1; // 重装0.1s 定时初值 if(Pattern&0x80) Pattern=(Pattern<<1)|0x01; else Pattern<<=1; PORTC=Pattern; // 显示LED } /**************************************************************** T1 定时器中断程序控制报警声音输出 *****************************************************************/ ISR (TIMER1_OVF_vect) { TCNT1=0xFE00+FRQ; SPK();
您需要 登录 才可以下载或查看,没有账号?注册
收藏0 举报
本版积分规则 发表回复 回帖并转播 回帖后跳转到最后一页
等级类勋章
发帖类勋章
时间类勋章
人才类勋章
2404
7001
68
扫码关注 21ic 官方微信
扫码关注嵌入式微处理器
扫码关注电源系统设计
扫码关注21ic项目外包
扫码浏览21ic手机版
本站介绍 | 申请友情链接 | 欢迎投稿 | 隐私声明 | 广告业务 | 网站地图 | 联系我们 | 诚聘英才
京公网安备 11010802024343号