2017—2018学年度第一学期
《单片机原理及应用》作品考试
八音盒
2017-2018-1《单片机原理及应用》作品设计提交文档
一、作品设计目的
1、利用51单片机的各个部件结合实现八音盒。
2. 通过按键控制蜂鸣器播放设定的歌曲,按键1~8控制8首歌曲的播放,按键0 停止播放歌曲。
3. 熟练掌握C 语言与单片机的结合,单片机的原理和PCB制图原理。
二、作品设计内容
1、总电路图显示
2、总程序
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
uchar th0_f;
uchar tl0_f;
unsigned char i=100;
unsigned char j,k,temp,key;
uchar code jie8[8]={12,14,16,17,19,21,23,24};
sbit datacs=P2^6; //位选
sbit chipcs=P2^7; //段选
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f}; ///共阴数码管显示段码0~8
sbit row1=P2^5; //行端口定义
sbit row2=P2^4;
sbit row3=P2^3;
sbit row4=P2^2;
sbit col1=P1^7; //列端口定义
sbit col2=P1^6;
sbit col3=P2^0;
sbit col4=P2^1;
sbit SPEAK = P3^0;//接蜂鸣器管脚
/*按键扫描函数*/
void keyScan(void)
{
col1=0;col2=1;col3=1;col4=1;
temp=P2&0x3f;
if(col1==0) //假设第一列有按键
{
if(temp!=0x3f) //没有按键退出这次对第一列键盘扫描
{
temp=P2&0x3C;
switch(temp)
{
case 0x38: key=12; break; //’0’键被按下时导通,则对应端口变为低电平
case 0x34:key=8;break;
case 0x2C:key=4;break;
case 0x1C:key=0;break;
}
}
}
col1=1;col2=0;col3=1;col4=1;
temp=P2;
temp=temp&0x3f;
if(col2==0)
{
if(temp!=0x3f)
{
temp=P2&0x3C;
switch(temp)
{
case 0x38: key=13; break; //’0’键被按下时导通,则对应端口变为低电平
case 0x34:key=9;break;
case 0x2C:key=5;break;
case 0x1C:key=1;break;
}
}
}
col1=1;col2=1;col3=0;col4=1;
temp=