ATmega128单片机音节显示仿真与源码

发布者:SparklingMoon最新更新时间:2019-10-30 来源: 51hei关键字:ATmega128  单片机  音节显示 手机看文章 扫描二维码
随时随地手机看文章

ATmega128单片机源程序如下:

//ICC-AVR application builder : 2018/2/23 22:40:20

// Target : M128

// Crystal: 8.0000Mhz


#include

#include

//#include "delay.h"


//本程序通过按键生成1-7共7个音阶,音阶对应的频率分别为523hz、587hz、698hz。。。

// tone_freq[7]={523,587,659,698,784,880,987}

//tone_cnt[]中成员值是生成不同频率的定时器寄存器OCR1A的设置值,例如523hz对应的定时器OCR1A的值为0x3BC,其他依次类推

unsigned int tone_cnt[7]={0x03BC,0x0353,0x02F6,0x02CC,0x027D,0x0238,0x01FA}; 



void port_init(void)

{

PORTB = 0x01;   //PORTB.0为输入带上拉

DDRB  = 0x00;   //PORTB.0为输入口

PORTC = 0x00;   //PORTC口输出0电平

DDRC  = 0xFF;   //PORTC口为输出口

}


//使用定时器1的CTC模式(模式4),使能比较匹配A中断,即如要产生523hz的频率信号,计算523hz的周期=1.9ms,半周期=0.95ms 设置定时器的OCR1A值,使得定时器每过0.95ms

//发生一次中断,在中断中进行高低电平的处理,获得523hz的方波信号。可以借助于应用向导帮助计算OCR1A的值。有两种方法:1、如上算出半周期时间 2、使用523*2HZ的一周期时间

//本例程采用第二种方法,注意采用的是8分频


//TIMER1 initialize - prescale:8  8分频

// WGM: 4) CTC, TOP=OCR1A         TCNT1计数的最大值=OCR1A,一旦相等,TCNT1自动清0,重新开始计数,OCR1A的值不变,除非程序修改

// desired value: 1046Hz          1046hz的一个周期时间=523hz的高电平时间或低电平时间

// actual value: 1046.025Hz (0.0%)  注意:定时间隔为该频率一周期的时间

void timer1_init(void)

{

TCCR1B = 0x00; //stop   关闭定时器,定时器没有被供给时钟

TCNT1H = 0xFC; //setup

TCNT1L = 0x45;

OCR1AH = 0x03;

OCR1AL = 0xBB;

TCCR1A = 0x00;

//TCCR1B = 0x0A; //start Timer

}


#pragma interrupt_handler timer1_compa_isr:iv_TIM1_COMPA

void timer1_compa_isr(void)

{

//compare occured TCNT1=OCR1A

//还有另一种方法,可对定时器进行初始化设置,信号直接从OC1A输出,就不需要本中断了

PORTC=PORTC^0xFF;                //每次进入中断进行高低电平的轮流输出

}


//call this routine to initialize all peripherals

void init_devices(void)

{

//stop errant interrupts until set up

CLI(); //disable all interrupts

XDIV  = 0x00; //xtal divider

XMCRA = 0x00; //external memory

port_init();

timer1_init();


MCUCR = 0x00;

EICRA = 0x00; //extended ext ints

EICRB = 0x00; //extended ext ints

EIMSK = 0x00;

TIMSK = 0x10; //timer interrupt sources

ETIMSK = 0x00; //extended timer interrupt sources

SEI(); //re-enable interrupts

//all peripherals are now initialized

}


//

void main(void)

{

unsigned char key_num;

init_devices();

key_num=0;

//delay_nms(5);

//insert your functional code here...

while(1)

{

   if ((PINB&0x01)==0x00)

      {

       if ((PINB&0x01)==0x00);     //等待按键结束

           OCR1A=tone_cnt[key_num];

           key_num=(key_num+1)%7;     //7种音阶轮流发出

           TCCR1B = 0x0A;             //开定时器         

           delay_nms(500);

           TCCR1B = 0x00;             //关定时器,如果需要精确控制每个音阶的发声时间,可采用另一个定时器,在该定时器中断中决定本定时器的开和关

          }


}

}





……………………



关键字:ATmega128  单片机  音节显示 引用地址:ATmega128单片机音节显示仿真与源码

上一篇:SHT10温湿度传感器应用,含单片机源码
下一篇:单片机全场定位系统程序

推荐阅读最新更新时间:2024-11-01 13:39

基于飞思卡尔MCU的中央车身控制模块(BCM)方案
方案描述: 中央车身控制模块( BCM )是实现车身功能的中枢系统,如内部与外部照明、安全系统与门禁控制、车门及座椅舒适性调整以及其他便利性控制功能。 飞思卡尔 业内领先的产品组合包括基于Power Architecture的32位,以及基于S12的16位 MCU 系列,专门满足各种 BCM 应用需求。在实现系统支持方面,我们提供信号调节、MOSFET前置驱动器、源监视器或LED驱动器取代开关。SBC采用单一封装将电压调节器与CAN或LIN物理接口相结合。H桥驱动器及一系列高边开关(eXtreme 开关)支持大电流负载并取代继电器。网关可用作各种车载通信网络之间的信息接口,包括以太网、FlexRay、CAN、LIN及MOST?
[汽车电子]
基于飞思卡尔<font color='red'>MCU</font>的中央车身控制模块(BCM)方案
枚举在单片机编程的应用
什么时候需要用到enum呢?当变量的数值在几个范围之间,如一个week变量取值只有Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday。这样用enum比较好.当然也可以用define.但是define维护起来比较麻烦, 适合变量的数值范围值较少的时候. 1、用enum关键字说明常量(即说明枚举常量)有以下几点好处: (1) 使程序更容易维护和直观。例如,下面定义的枚举是描述UART支持的传输bit位数,从枚举类型的定义就可以知道UART模块提供的传输bit的几种模式。 enum { usartDatabits4 = USART_FRAME_DATABITS_FO
[单片机]
用51单片机汇编语言,写一个60s倒计时的程序
题目。写出一个60s倒计时的汇编语言,不要用C语言写,用汇编语言。 再设置一个按键,按一下,停止倒计时,再按一下,恢复倒计时。 ;--------------------------------------- ;假设系统晶振为 12MHz ;按键连接在P3.2 ;--------------------------------------- ORG 0000H LJMP MAIN ORG 0003H LJMP X0_INT ORG 000BH LJMP T0_INT ;--------------------------------------- ORG 0100H
[单片机]
单片机复位电路的工作原理
如何进行复位呢?只要在单片机的RST引脚上加上高电平就可以了,时间不少于5ms。 基本的复位电路的原理图如下所示:                   这种复位电路的工作原理是:通电时,电容两端相当于是短路,于是RST引脚上为高电平,然后电源通过电阻对电容充电,RST端电压慢慢下降,降到一定程度为低电平,单片机开始正常工作。 改进的复位电路如下:                      在满足单片机可靠复位的前提下,该复位电路的优点在于降低复位引脚的对地阻抗,可以显著增强单片机复位电路的抗干扰能力。二极管可以实现快速释放电容电量的功能,满足短时间复位的要求。
[单片机]
基于PIC16C55单片机控制多用电子钟原理介绍
本 电子钟 采用 PIC16C55 单片机 控制,适于温室的定时恒温或自来水的定时定压控制等。PIC16C55单片机工作电压为2.5~6.25V,功耗低、驱动能力强。本电子钟可以控制一路负载在24小时内的3次开/关;一个双限触发的定时输出口,既可接传统的功率保持型继电器,也可接脉冲继电器。本机用四位LED数码管扫描式显示,还有消隐(省电)工作方式,使用起来非常灵活、方便。 一、 电子钟工作原理 电子钟电路见图1。RB7口是定时指示端,在定时开期间输出高电平,驱动V1发光,该口也可经缓冲作定时输出口;RB6是双限触发控制的定时输出口,其工作方式是:在RB7高电平期间,若RB1为高电平,则RB6输出高电平;若RB0为高电平,RB6输出
[单片机]
基于PIC16C55<font color='red'>单片机</font>控制多用电子钟原理介绍
基于单片机的超声波测距系统的研究与设计
电子科技 南京工程学院通信工程学院 沙爱军   在日常生产生活中,很多场合如汽车倒车、机器人避障、工业测井、水库液位测量等需要自动进行非接触测距。超声波是指频率大于20 kHz的在弹性介质中产生的机械震荡波,其具有指向性强、能量消耗缓慢、传播距离相对较远等特点,因此常被用于非接触测距。由于超声波对光线、色彩和电磁场不敏感,因此超声波测距对环境有较好的适应能力,此外超声波测量在实时、精度、价格也能得到很好的折衷。   为此,文中尝试以单片机AT89S52为核心,利用一对40 kHz压电超声传感器设计一款体积较小、价格低廉、精度较高、具有温度补偿、实时LCD显示和报警的超声波测距仪。   1 超声波测距原理   超声波传感器
[单片机]
基于<font color='red'>单片机</font>的超声波测距系统的研究与设计
基于Cortex-M3的微控制器热电偶测量系统
  器件连接/参考   ADuCM360:基于Cortex-M3的微控制器,内置双通道24位Σ-Δ型ADC   ADP1720-3.3:低压差线性稳压器   评估和设计支持   电路评估板   CN-0300评估板(EVAL-CN0300-EB1Z)包含USB-SWD/UART和SEGGER J-Link Lite电路板   设计和集成文件   原理图、布局文件、物料清单、ADuCM360源代码   电路功能与优势   本电路在精密热电偶温度监控应用中使用ADuCM360精密模拟微控制器,并相应地控制4 mA至20 mA的输出电流。ADuCM360集成双通道24位Σ-Δ型模数转换器(ADC)、双通道可编程电流源、
[测试测量]
基于Cortex-M3的<font color='red'>微控制器</font>热电偶测量系统
基于AT89C51和DS18B20的最简温度测量系统
l引 言 温度的测量和控制在激光器、光纤光栅的使用及其他的工农业生产和科学研究中应用广泛。温度检测的传统方法是使用诸如热电偶、热电阻、半导体PN结之类的模拟温度传感器。信号经取样、放大后通过模数转换,再交自单片机处理。被测温度信号从温敏元件到单片机,经过众多器件,易受干扰、不易控制且精度不高。因此,本文介绍一种新型的可编程温度传感器DS18B20,他能代替模拟温度传感器和信号处理电路,直接与单片机沟通,完成温度采集和数据处理。DS18B20与AT89C51结合实现最简温度检测系统,该系统结构简单,抗干扰能力强,适合于恶劣环境下进行现场温度测量,有广泛的应用前景。 2温度测量系统硬件 系统结构图如图1所示 。这里通过上拉电阻直
[测试测量]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved