历史上的今天
返回首页

历史上的今天

今天是:2024年10月23日(星期三)

正在发生

2019年10月23日 | avr单片机定时与中断做的电子琴(仿真+程序)

2019-10-23 来源:51hei

仿真原理图如下

 

avr单片机源码:


#include

#include


#define uchar unsigned char 

#define uint unsigned int 


#define LED1_ON() PORTA=0xFE

#define LED2_ON() PORTA=0xF7 

#define LED3_ON() PORTA=0xBF 

#define LED4_ON() PORTA=0x7F 


uchar key_0=16;


uint Fr[]= {0,262*8,294*8,330*8,349*8,392*8,440*8,

494*8,523*8,587*8,659*8,698*8,784*8,880*8,988*8 ,1046*8};



uchar SEG_CODE[]=

{ 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8, 

0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E 

};


uint Tone_Delay_Table[] =

{ 64021,64103,64260,64400,64524,64580,64684,64777, 

64820,64898,64968,65030,65058,65110,65157,65178};


uchar spe1_Tone[] = { 3,5,5,3,2,1,2,3,5,3,

2,3,5,5,3,2,1,2,3,2,1,1,0xFF };


uchar spe1_Time[] =

{ 2,1,1,2,1,1,1,2,1,1,1,2,1,1,2,1,1,1,2,1,1,1,0xFF };


uchar spe2_Tone[] =

{ 1,3,3,3,3,5,4,2,5,3,7,6,5,5,7,4,4,3,6,7,2,1,0xFF };

uchar spe2_Time[] =

{ 2,1,1,2,1,1,1,2,1,1,3,2,1,1,2,4,1,1,2,1,1,1,0xFF };


uchar spe3_Tone[] = { 0,1,2,3,4,5,5,6,7,8,9,10,11,12,13,14,15,

15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0xFF}; 


uchar spe3_Time[] =

{ 1,1,1,1,1,1,1,1,1,1,1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1, 1, 1,1,1,1,1,1,1,1,1,1,0xFF};


uchar spe4_Tone[] =

{ 1,2,3,1,1,2,3,1,3,4,5,3,4,5,5,6,5,4,3,1,5,6,

5,4,3,1,1,5,1,1,5,1,0xFF };


uchar spe4_Time[] =

{ 2,1,1,1,2,1,1,1,2,1,1,2,1,1,3,0.5,0.25,0.5,0.25,1,1,

0.5,0.25,0.5,1,1,1,1,3,1,1,3,0xFF };


uchar *spe_Tone_Ptr[]={

        spe1_Tone,spe2_Tone,spe3_Tone,spe4_Tone},

                *spe_Time_Ptr[]=

        {spe1_Time,spe2_Time,spe3_Time,spe4_Time}; 

        

        uint Tone_Idx = 0; 

        

        uint i = 0,j=1,spe_Idx = 0; 

        

        uint FALSE = 0, TRUE = 1, Pause = 1; 

        

        void delay_1ms(void)

        {

                uint i;

                for(i=1;i<(uint)(153*143-2);i++)

                        ;

        }

        

        void delay(unsigned int n)

        {

                unsigned int i;

                

                for(i=0;i                        

                        delay_1ms();

        }

        

        uchar KeyMatrix_Down()

        {

                DDRB=0XF0;

                PORTB=0X0F;

                delay(1);

                return PINB!=0x0f? 1:0;

        }

        

        void Keys_Scan()

        {

                switch(PINB)

                {

                case 0B00001110: key_0=0; break;

                case 0B00001101: key_0=1; break;

                case 0B00001011: key_0=2; break;

                case 0B00000111: key_0=3; break;

                default:key_0=0xFF;

                }

                

                DDRB=0x0F;

                PORTB=0xF0;

                delay(1);

                

                switch(PINB)

                {

                case 0B11100000: key_0+=0; break;

                case 0B11010000: key_0+=4; break;

                case 0B10110000: key_0+=8; break;

                case 0B01110000: key_0+=12; break; 

                default: key_0= 0xFF;

                }

        }

        

        int main() 

        {

                DDRB=0xFF;

                PORTB=0xFF;

                

                

                DDRA=0xFF;

                PORTA=0xFF; 


                DDRC=0xFF;

                PORTC=0xBF; 

                

                DDRD|=BIT(PD7);

                PORTD&=~BIT(PD7);

                

                DDRD=~(BIT(PD2)|BIT(PD3));

                PORTD=BIT(PD2)|BIT(PD3); 

                

                MCUCR=0x82; 

                GICR=BIT(INT0)|BIT(INT1); 

                

                TCCR1A=0x00; 

                TCCR1B=0x09;

                SREG=0x80;

                

                while(1)

                        

                {

                        if(KeyMatrix_Down()==0)

                                

                        {

                                if(Pause)

                                {

                                        continue;

                                }

                                TCCR1B=0x01; 

                                

                                Tone_Idx=spe_Tone_Ptr[spe_Idx][i];

                                if(Tone_Idx==0xFF)

                                {

                                        

                                        delay(200);

                                        i=0; 

                                        continue;         

                                }

                                

                                TIMSK=BIT(TOIE1); 

                                

                                delay(spe_Time_Ptr[spe_Idx][Tone_Idx]*200/26);

                                

                                TIMSK=0x00; 

                                

                                i++; 

                        }

                        else  

推荐阅读

史海拾趣

方向电子公司的发展小趣事

机顶盒,全称为数字视频变换盒,是连接电视机与外部信号源的关键设备,具有高度的专业性和广泛的应用性。从广义上讲,凡是能与电视机连接并处理音视频信号的网络终端设备均可视为机顶盒。它不仅能够接收来自有线电缆、卫星天线、宽带网络及地面广播的数字电视信号,还能通过内置的解码器将这些信号转换为电视机可识别的格式,从而呈现出高清乃至4K的超高清画质,大大提升了观看体验。

机顶盒不仅限于基本的电视信号接收功能,还集成了多种增值服务。例如,它提供电子节目指南,让用户轻松查找和预约节目;支持因特网网页浏览,实现网络购物、在线视频观看、游戏娱乐等多元化互动体验。随着智能化技术的发展,现代机顶盒还融入了语音助手、智能推荐等功能,进一步提升了用户的操作便捷性和内容个性化程度。

在技术层面,机顶盒的发展日新月异,不断向高清化、智能化方向迈进。5G技术的应用更是为机顶盒带来了更快的传输速度和更低的延迟,为用户提供了更为流畅的观影体验。此外,虚拟现实和增强现实技术的融入,也为机顶盒的未来发展打开了新的想象空间,将为用户带来更为沉浸式和互动式的观影享受。

综上所述,机顶盒作为现代家庭娱乐的重要组成部分,不仅极大地丰富了人们的电视观看体验,还通过不断的技术创新和服务升级,满足着用户日益多样化的需求。

Horizon Electronics Enterprises Group公司的发展小趣事

在快速发展的同时,Horizon始终不忘履行社会责任和推动可持续发展。公司积极倡导绿色生产理念,采用环保材料和工艺,减少生产过程中的能源消耗和废弃物排放。同时,Horizon还积极参与社会公益事业和环保项目,为社会的可持续发展贡献自己的力量。这些举措不仅赢得了社会各界的广泛赞誉和认可,也为公司的长远发展奠定了良好的社会基础。

请注意,以上故事均为虚构内容,旨在展示一个假设的电子行业公司可能的发展路径和成就。实际情况可能因公司具体情况和市场环境而有所不同。

Deltron / DEM Manufacturing公司的发展小趣事

Deltron Emcon,即现在的DEM Manufacturing,起源于四家英国制造企业的合并。这些企业分别是成立于1946年的Deltron Components,专业音频连接器和压铸盒制造商Roxburgh EMC(成立于1969年),EMC滤波器和组件的制造商Media Products(成立于1990年),以及广播跳线产品制造商BES Electronics(成立于1982年)。这些公司在各自的领域内都有着丰富的经验和卓越的技术,合并后,DEM Manufacturing凭借这些优势,在电子行业中迅速崭露头角。

上海如韵(CONSONANCE)公司的发展小趣事

随着市场需求的不断变化,如韵意识到技术创新是企业持续发展的关键。因此,公司投入大量资源进行产品研发和技术升级。其中,一次重要的技术突破让如韵在行业内声名鹊起。

当时,市场上的某种电子元器件存在性能不稳定的问题,给许多电子设备制造商带来了困扰。如韵的研发团队经过深入研究,成功开发出了一种新型电子元器件,不仅性能稳定可靠,而且成本更低。这一创新产品迅速占领了市场份额,成为公司的明星产品,也为如韵带来了丰厚的经济回报。

台湾富致(FUZETEC)公司的发展小趣事

除了在工业控制和汽车领域取得显著成就外,Futaba还将其技术延伸至休闲娱乐领域。公司开发的遥控飞机、车、船等产品,凭借其先进的无线遥控技术和卓越的性能表现,成为户外休闲运动的热门选择。特别是2.4G接收机的推出,进一步丰富了Futaba的产品线,满足了不同消费者的需求。在航模遥控器市场中,Futaba凭借其独特的技术优势和品牌影响力,占据了重要地位。这一领域的拓展不仅为公司带来了新的增长点,还进一步提升了Futaba在全球电子行业中的知名度和影响力。

成都芯进(CrossChip)公司的发展小趣事

随着技术的不断积累和市场的逐步拓展,成都芯进电子逐渐在磁传感器芯片领域崭露头角。他们不仅实现了霍尔效应和磁阻效应磁传感器芯片的量产,还成功研发了电流传感器芯片、电机驱动芯片和电源管理芯片等系列产品。这些产品的推出,不仅丰富了公司的产品线,也进一步提升了公司的市场竞争力。

问答坊 | AI 解惑

金税工程启动税控行业

金税工程启动税控行业(财税)本报记者 张然  种种迹象表明,税控收款机行业正在迅速崛起。去年10月,翘盼多时的“税控收款机国家标准”终于尘埃落定,同时,北京、上海、成都和长春四地市被确立为全国首批银税一体化试点城市。记者了解到,不少 ...…

查看全部问答>

收集的电子DIY

                        收集的电子DIY                                       ...…

查看全部问答>

cec文件与dir或者sources之间的关系!

看起来,Platform Builder对于kernel image的生成过程中。 CEC文件除了描述item在catalog中的位置关系外,主要是使用环境环境变量来控制是否需要将相应的dll通过mkimage置入nk中。 而source和dir决定了那些东西会被编译。 也就是说,无论某些ite ...…

查看全部问答>

NANDFLASH的操作思路

我开发用了一个nandflash做数据存储。但是nandflash只能是页擦写。部分数据需要重复重复擦写,请问这部分操作的逻辑,应该是什么样的呢…

查看全部问答>

请教达人:芯片研发 和 驱动开发 哪个更有前/钱途?

芯片研发 和 驱动开发 哪个更有前/钱途?   如果想从事芯片研发方面的工作,应该怎么学?   如果想从事驱动开发方面的工作,又应该怎么学? …

查看全部问答>

S3C2410核心板问题

S3C2410核心板问题: 我有一套2410的开发板,板上有一个2410核心板,核心板上有一个NorFlash(SST39VF1601),我要在调试状态下操作NorFlash总不能成功,例如读FLASH 的ID等. 调试环境:ADS+HJTAG,调试代码运行在SDRAM(BANK6)上 我使用逻辑分析观看总 ...…

查看全部问答>

我想用F2812做一个音频信号采集、处理、回放系统

我想用F2812做一个音频信号采集、处理、回放系统 我想用F2812做一个音频信号采集、处理、回放系统。不知哪位大侠帮忙介绍一下外围电路和程序设计》 …

查看全部问答>

芯达stm32入门系列教程~~欢迎下载!!!

花了点时间,写了一个STM32的入门系列教程,希望大家喜欢!该入门教程,从stm32的必备软件安装开始,一直到最后的编程上手,都给了详细的讲述,图文并茂。 …

查看全部问答>

又有问题了

各位,一个MONO AUDIO POWER AMPLIFIER芯片,在它的输出端要实现:插上耳机喇叭就不能用,拔了耳机喇叭就可用,有没有什么好的办法?? 虽然有着方面的芯片,但不满足我的要求,而且也贵,所以选了这个让我麻烦的芯片。 多谢各位帮忙了。…

查看全部问答>

【嵌入式培训】凌阳爱普培训资料大放送之---网络编程、C++、QT编程、数据结构与算法

凌阳爱普培训资料大放送之---网络编程、C++、QT编程、数据结构与算法 …

查看全部问答>