计算机类课程
实 验 报 告
(2010-2011学年第二学期)
系部 信息工程系
专业班级 计应0901
姓名 谢曼曼 学号 09090115
课程名称 单片机应用技术
实验项目 程控电子琴
实验地点 计算机控制实训室
实验日期 321—422
实验成绩 指导老师 王树森
实验目的和要求
学会单片机定时器/计数器使用;
学会音符发生器程序编写方法;
学会4*4键盘扫描、编写和去抖方法;
会使用C51编程。
环境说明
序号
软件名称
1
windowsxp
2
keiluV20
3
EasySST
上机准备工作
1、知道如何在仿真软件下画出程控电子琴的原理图。
2、会画流程图,要懂得画流程图的原则:进程用长方形、判定用菱形。
3、要知道在写程序中如何运用定时器、查表和条件转移程序的应用。
4、把keil和仿真结合起来,执行程序运行的结果。
四、实验内容
程控电子琴
五、实验步骤
1 用仿真软件画出蜂鸣器发声的原理图。P3口接4*4键盘,蜂鸣器接在单片机的P20口,中间通过三极管放大。
2 画出蜂鸣器发声的的流程图,如下图:
3、根据流程图写出程序
//程序名字:键盘扫描电子琴
//功能:实现七个中音的发声
//作者:谢曼曼
//建立日期:321
#include <reg51h>
#define uchar unsigned char
#define uint unsigned int
unsigned int code table1[]={0xf8,0xf9,0xfa,0xfa,0xfb,0xfb,0xfc,0xfc,
0xfc,0xfd,0xfd,0xfd,0xfd,0xfe,0x00}; //定义音节高八位(前7个为低音后7个为中音)
unsigned int code table2[]={0x8c,0x5b,0x15,0x67,0x04,0x90,0x0c,0x44,
0xac,0x09,0x34,0x82,0xc8,0x06,0x00}; //定义音节低八位(前7个为低音后7个为中音)
sbit yin=P2^0; //定义p20口为输出声音
uint DI,ZHONG, x,z; //定义变量
uchar y,num,temp;
uchar keyscan();
void delayms(uint z) //延时子程序
{
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void int1(void) interrupt 1 //中断程序
{
TH0=DI;
TL0=ZHONG;
yin=~yin;
}
void main() //主程序
{
TMOD=0x01; //定时器0工作方式1
EA=1; //开总中断
ET0=1; //开定时器0中断
TR0=0; //关闭定时器0
num=16;
while(1)
{
keyscan(); //键盘扫描子程序
}
if(num==15) //如果按键值为15则关定时器0
TR0=0;
else
TR0=1; //否则则开定时器0
}
uchar keyscan() //键盘扫描子程序
{
P3=0xfe; //假设第一行有按键按下
temp=P3;
temp=temp&0xf0;
while(temp!=0xf0) //判断是否有按键按下
{
程控电子琴 来自淘豆网m.daumloan.com转载请标明出处.