|
简易电子琴的设计
主程序代码如下: - #include <reg52.h>
- #include <stdio.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit buz=P0^1;
- uchar keycode;
- /* 各音阶对应计数器初值: 1,2,3,4,5,6,7,1(高)*/
- uint toneh[8]={ 0xfc43,0xfcab,0xfd08,0xfd32,0xfd81,0xfdc7,0xf05e,0xfe21};
- uchar keymode[8]={ 0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
- void main()
- {
- Sys_Init();
- do
- {
- keycode=Get_Key(); /*获取键值索引*/
- Play(keycode);
- }
- }
- 子程序Get_Key ()为键值读取子函数。代码如下:
- uchar Get_Key () /*读取键值,并转换为索引值*/
- {
- uchar temp,i;
- P1=0xff;
- temp=P1;
- for (i=0;i<8;i++)
- {
- if (temp==keymode) return i;
- }
- return (8); //无正确对应的键值,则忽略
- }
- 系统初始化子程序Sys_Init用于设定定时器工作模式,开启中断。代码如下:
- void sys_init()
- {
- TMOD=0x10; /*启动定时器1*/
- EA=1; /*开总中断*/
- ET1=1; /*允许定时器1中断*/
- P1=0xff; /*设置P1口为输入模式*/
- }
- 子程序Play()代码如下:
- void play(uchar key)
- {
- if (key==8)/*无键按下或多键按下,不响应*/
- {
- TR1=0;
- buz=0;
- }
- else
- {
- TR1=1; /*有键按下,开中断*/
- keycode=key; /*键值索引赋值*/
- }
- }
- 定时器T1主要用于生成各音阶对应的方波频率。
- 代码如下:
- void timer0(void) interrupt 3 using 1 /*定时器1中断服务程序*/
- {
- *************///////////文本限制,移步下载附件///////**************
复制代码
|
-
-
电子琴设计.rar
51.65 KB, 下载次数: 26, 下载积分: 黑币 -5
包含原理图,程序文本,KEIL文件
评分
-
查看全部评分
|