"); //-->
》》点此进入 http://bbs.armavr.com/ ARM-AVR嵌入式开发论坛
一、程序结构
二、仿真效果
三、程序源码
1、main.c
/*******************************************************************************
Platform : AVR mega16学习板(www.iccavr.com)
Project : 实验八:7种LED亮灭模式+INT0中断+蜂鸣器(GCC)
Clock F : 3.6864M
Software: WinAVR-20071221+Proteus7.4
Author : 林夕依然
Version : 08.12.07
Updata : 09.02.26 模块化
09.05.03 增加proteus仿真模型,仿真通过。
09.07.21 WinAVR-20071221环境下编译通过
comments:
1、以学习板LED灯和蜂鸣器为硬件电路,实现7种LED亮灭功能,INT0中断时产生蜂鸣器鸣叫模式
2、INT0中断的练习
3、T/C1的CTC工作模式下,频率发生器程序的编写
4、PD5用作频率发生器时,需配置为输出,否则不能发生频率
5、使用GCC自带延时函数,LED_01-LED_05参数不可用char,只能用int,否则模式2不能通过,不知何因。
*******************************************************************************/
#include <avr/io.h>
#include <avr/interrupt.h>
#include "led.h"
int main(void)
{
int l,m,n,o,p,r,s,i,j;
DDRA =0X00; //端口上拉输入
PORTA=0XFF;
DDRB =0xFF; //端口输出
PORTB="0xFF"; //输出高电平,LED熄灭
DDRC =0X00;
PORTC=0XFF;
DDRD =0XFF; //PD口输出高电平
PORTD=0XFF;
GICR |= (1 << INT0); //使能外部中断请求0
sei(); //全局中断使能
for (r=0;r<1;r++)
{
for(l=0;l<5;l++) //模式1:顺序点亮
{
for (i = 0; i < 8; i++) //顺序单个点亮LED
LED_01(i);
for (i = 6; i > 0; i--) //逆序单个点亮LED
LED_01(i);
}
LED_off();
for(m=0;m<5;m++) //模式2:顺序单个间隔点亮
{
for (i = 0; i < 8; i += 2) //顺序间隔点亮LED
LED_01(i);
for (i = 7; i > 0; i -= 2) //逆序间隔点亮LED
LED_01(i);
}
LED_off();
for(n=0;n<5;n++) //模式3:间隔点亮
{
for (i = 2; i < 8; i++) //间隔顺序同时点亮
LED_02(i);
for (i = 6; i > 2; i--) //间隔逆序同时点亮
LED_02(i);
}
LED_off();
for(o=0;o<5;o++) //模式4:相临点亮
{
for (i = 1; i < 8; i++) //相临顺序同时点亮
LED_03(i);
for (i = 6; i > 1; i--) //相临逆序同时点亮
LED_03(i);
}
LED_off();
for(p=0;p<5;p++) //模式5:发散聚集点亮
{
for(i=0;i<4;i++) //发散点亮
LED_04(i);
for(i=2;i>0;i--) //聚集点亮
LED_04(i);
}
LED_off();
for(s=0;s<5;s++) //模式6:四四点亮
{
for(i=0;i<2;i++) //四四顺序点亮
LED_05(i);
}
LED_off();
for(j=0;j<10;j++) //模式7:全部点亮熄灭
{
LED_on();
LED_off();
}
}
}
2、buzzer.c
#include <avr/io.h>
#include <util/delay.h>
//7种声音,由低到高
void buzzer01(void)
{
for(OCR1A= 1000;OCR1A<1700;OCR1A+=100)
{
TCCR1A = 0x40;
TCCR1B = 0x09;
_delay_ms(40); //蜂鸣器鸣叫30mS钟,定时器一开始工作蜂鸣器即开始鸣叫
TCCR1A = 0x00; //定时器停止工作,无频率产生,蜂鸣器停止鸣叫
}
}
//7种声音,由高到低
void buzzer02(void)
{
for(OCR1A= 1600;OCR1A>900;OCR1A-=100)
{
TCCR1A = 0x40;
TCCR1B = 0x09;
_delay_ms(40); //蜂鸣器鸣叫30mS钟,定时器一开始工作蜂鸣器即开始鸣叫
TCCR1A = 0x00; //定时器停止工作,无频率产生,蜂鸣器停止鸣叫
}
}
3、led.c
#include <avr/io.h>
#include <util/delay.h>
void LED_on(void) //打开所有LED
{
PORTB =0X00;
_delay_ms(100);
}
void LED_off(void) //关闭所有LED
{
PORTB = 0xFF;
_delay_ms(100);
}
void LED_01(int i) //LED亮灭控制
{
PORTB = ~_BV(i); //输出低电平
_delay_ms(100); //调用延时程序
}
void LED_02(int i) //间隔点亮
{
PORTB=~(_BV(i)|_BV(i-2));
_delay_ms(100);
}
void LED_03(int i) //相临点亮
{
PORTB=~(_BV(i)|_BV(i-1)); //~后内容需用括号括起来
_delay_ms(100);
}
void LED_04(int i) //发散聚集点亮
{
switch(i)
{
case 0:PORTB=0xE7;_delay_ms(100);break; //延时100ms
case 1:PORTB=0xDB;_delay_ms(100);break;
case 2:PORTB=0xBD;_delay_ms(100);break;
case 3:PORTB=0x7E;_delay_ms(100);break;
default:break;
}
}
void LED_05(int i)
{
switch(i)
{
case 0:PORTB=0XAA;_delay_ms(100);break;
case 1:PORTB=0X55;_delay_ms(100);break;
}
}
4、int0_interrupt.c
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include "buzzer.h"
ISR(INT0_vect)
{
char i,z;
for (z=0;z<5;z++)
{
buzzer01(); //7种声音,由低到高
for (i = 0; i < 8; i ++)
{
PORTB = ~(1 << i);
_delay_ms(100);
}
PORTB=0XFF; //关闭所有LED
buzzer02();//7种声音,由高到低
for (i = 0; i < 8; i ++)
{
PORTB = ~(1 << i);
_delay_ms(100);
}
PORTB=0XFF; //关闭所有LED
}
}
5、buzzer.h
void buzzer01(void);
void buzzer02(void);
6、led.h
void LED_on(void);
void LED_off(void);
void LED_01(int i);
void LED_02(int i);
void LED_03(int i);
void LED_04(int i);
void LED_05(int i);
四、完整项目文件下载
http://bbs.armavr.com/thread-801-1-2.html
专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们
相关推荐
2005年国际航宇回顾
诚聘ARM产品软硬件开发工程师
打破12V瓶颈:迈向48V供电系统
贸泽电子再度携手2026“创造未来”全球设计大赛, 创新赋能 点燃科技新动能
DECT无绳电话如何识别子机
激光阵列可能简化了共封光学元件
网络中心战中的无人机系统
一个棘手的问题,大家参详
美军导弹武器低成本化的途径与方式
液体液面和温度监控电路
美国设想的反卫星武器技术
采用热敏电阻的液面安全报警电路
带继电器的短路保护器
拥抱赋能OpenClaw智能生态,此芯科技CIX ClawCore螯芯系列芯片震撼首发
采用热敏电阻的送流保护电路
是德科技XR8示波器平台:重构测量本质,开启高速测试新纪元
GM8123 1扩3的通用异步串口扩展芯片
深入理解 I²C 协议
warning : clock skew
GM812X 通用异步串口扩展芯片
DSP的开发问题,各位大侠进来看看
限制AI/ML工具以确保物理AI的安全和保障
Diodes 公司推出高效多相 SPI 增压控制器,实现稳健灵活的汽车头灯系统
基于大规模并行GPU光栅化器加速计算光刻技术
液体用电子恒温箱电路
GSM/GPRS无线通信系统于地理位置监控之应用
BL9148 通用红外遥控发射器
ESC 2009上的Numonyx
低压4:1模拟多路复用器:专注一事,做到极致
请教arm9 embeddedIce-rt的一个技术细节问题