新手入坑
单片机电子琴仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
avr单片机源程序如下:
- //-----------------------------------------------------------------
- // 名称: 电子琴仿真
- //-----------------------------------------------------------------
- // 说明: 本例在键盘矩阵上模拟演奏电子琴,数码管显示键号.
- // 按下不同按键时将输出不同频率音符,按键长按时发出长音,
- // 短按时发出短音.
- //
- //-----------------------------------------------------------------
- #define F_CPU 1000000UL //1M晶振
- #include <avr/io.h>
- #include <avr/interrupt.h>
- #define INT8U unsigned char
- #define INT16U unsigned int
- //蜂鸣器定义
- #define SPK() (PORTD ^= _BV(PD7))
- //定时器比较中断启停定义
- //C调音符频率表(部分)
- //共阳数码管段码表(0~F)
- const INT8U SEG_CODE[]=
- {
- 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8, //0 1 2 3 4 5 6 7
- 0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E //8 9 A B C D E F
- };
- //键盘矩阵相关变量与程序
- //-----------------------------------------------------------------
- // 主程序
- //-----------------------------------------------------------------
- int main()
- {
- }
- //-----------------------------------------------------------------
- // T1定时器比较匹配中断程序,控制音符频率输出
- //-----------------------------------------------------------------
- ISR (TIMER1_COMPA_vect)
- {
- }
复制代码- //-----------------------------------------------------------------
- // 名称: 键盘矩阵扫描程序
- //-----------------------------------------------------------------
- #include <avr/io.h>
- #include <util/delay.h>
- #define INT8U unsigned char
- #define INT16U unsigned int
- //键盘端口定义
- //19:45 2017/12/19
- INT8U KeyNo = 16 ;
- //-----------------------------------------------------------------
- // 判断键盘矩阵是否有键按下
- //-----------------------------------------------------------------
- INT8U KeyMatrix_Down()
- {
- }
-
- //-----------------------------------------------------------------
- // 键盘矩阵扫描子程序
- //-----------------------------------------------------------------
- void Keys_Scan()
- {
- }
复制代码
程序在上面,只有框架,求大神补全啊,下面是仿真工程:
02 电子琴仿真.zip
(18.32 KB, 下载次数: 45)
|