⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 用AVR单片机做的一些程序,包括跑马灯显示,PWM产生,ADC转换等
💻 C
字号:
/*
实验三:
	驱动无源蜂鸣器实验。
	1、定时器实验,用定时器的CTC模式驱动无源蜂鸣器,是否输出由按键0控制。
	2、内部1 M晶振,程序采用单任务方式,软件延时,驱动无源蜂鸣器由定时器硬件完成。
	3、进行此实验请插上BUZ短路块。
	4、此实验让大家了解定时器里面的CTC功能,从而可以利用它来产生频率信号。

	AVR  mega128学习板
	www.iccavr.com	阿发
	23:03 2007-10-09
*/
#include "iom128v.h"

/*延时函数*/
void delay_ms(unsigned char i) {

	unsigned char a, b;
	for (a = 0; a < i; a++) {
		for (b = 1; b; b++);
		}
}

/*IO口初始化函数*/
void io_init(void) {

	DDRA = 0x00;										/*方向输入*/
	PORTA = 0xFF;										/*打开上拉*/
	DDRB = 0x00;										/*方向输入*/
	PORTB = 0xFF;										/*高电平*/
	DDRC = 0x00;										/*不用的IO口建议设置为输入带上拉*/
	PORTC = 0xFF;
	DDRD = 0x00;
	PORTD = 0xFF;
	DDRE = 0x08;										/*设置蜂鸣器对应脚为输出*/
	PORTE = 0xF7;										/*蜂鸣器脚输出低电平*/
	DDRF = 0x00;
	PORTF = 0xFF;
	DDRG = 0x00;
	PORTG = 0xFF;
}

void main(void) {

	io_init();
	while (1) {
		if (!(PINE & (1 << PE0))) {						/*判断是否有按键按下*/
			TCCR3A = 0x40;								/*设置定时器工作在CTC模式*/
			TCCR3B = 0x09;
			OCR3A =  1000;
			delay_ms(200);								/*延时一段时间,保证蜂鸣器的最短工作时间*/
			
			while (!(PINE & (1 << PE0)));				/*等待按键松开*/
			TCCR3A = 0x00;								/*关闭定时器*/
			PORTE &= ~(1 << PE3);						/*人为将蜂鸣器控制脚置低*/
			}
		}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -