单片机课程设计>八音盒

 

 


 

 

 


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=

  • 3
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值