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

📄 exp25_17电子琴.cpp

📁 用c++程序,基于8255和8253实现的一个电子琴程序
💻 CPP
字号:
/*******************************/
/*          电子琴             */
/*******************************/
#include <stdio.h>
#include <conio.h>
#include "..\\ApiEx.h"

#pragma comment(lib,"..\\ApiEx.lib")

int time[]={120,106,94,89,79,70,63,59};		/*8253发不同音的计数器初值*/
int data[]={0x80,0x96,0xae,0xc5,0xd8,0xe9,0xf5,0xfd,
	  0xff,0xfd,0xf5,0xe9,0xd8,0xc5,0xae,0x96,
	  0x80,0x66,0x4e,0x38,0x25,0x15,0x09,0x04,
	  0x00,0x04,0x09,0x15,0x25,0x38,0x4e,0x66};	/*正弦波数据*/

void de_lay(int i);

void main()
{
	int i,k,j;
	if(!Startup())		/*打开设备*/
	{
		printf("ERROR: Open Device Error!\n");
		return;
	}
	printf("Press 1,2,3,4,5,6,7,8\n");
	printf("Press other key to exit!\n");
	PortWriteByte(0x28b,0x9b);	/*置8255和8253工作方式字*/
	PortWriteByte(0x283,0x10);
	for(;;) {
		k=getch();
		if(k<0x31||k>0x38) break;
		for (j=0;j<60;j++)
			for(i=0;i<32;i++)		/*轮流输出正弦波数据*/
			{
				PortWriteByte(0x290,(int)(data[i]));
				de_lay(time[k-0x31]);	/*延时*/
			}
	}
	Cleanup();		/*关闭设备*/
}

void de_lay(int i)
{
	BYTE	data;
	PortWriteByte(0x280,i);		/*输出计数值*/
	do{
		PortReadByte(0x288,&data);
	}while(!(data&0x01));		/*判断PA0是否为高电平,若是则返回*/
}

⌨️ 快捷键说明

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