原创 第二十五课 点阵之一 独立按键控制点移动

2009-6-3 16:20 5245 7 7 分类: MCU/ 嵌入式

第二十五课 点阵之一 独立按键控制点移动



程序讲解:
1、Beep.H 头文件 (无源蜂鸣器最简单的发音驱动)
/*------------------------------------*/
//Note: Sounder_Driver
//File: Beep.H
//Date: 08-7-16
//Time: 21:46



/*------------------------------------*/
#ifndef __Beep_H__
#define __Beep_H__



/*------------------------------------*/
sbit Sounder="P3"^6;    //Beep接口定义对应开发板



/*------------------------------------*/
//函数声明
void delay_sound(void);
void speaker(void);



/*------------------------------------*/
void delay_sound(void)     //频率
{
 unsigned char j;
 for(j=55;j>0;j--);
}



/*------------------------------------*/
void speaker(void)             //音长
{
 unsigned char i,j;
 for(i=2;i>0;i--)
  for(j=248;j>0;j--)
  {
   Sounder=~Sounder;
   delay_sound();   
  }
 Sounder = 1;                    //关闭蜂鸣器
}



/*------------------------------------*/
#endif


2、主程序讲解
/*--------------------------------------------------------------*/
//LED8*8显示
//C+/R-


#include <reg52.h>
#include "74Hc595.H"
#include "Beep.H"



/*--------------------------------------------------------------*/
//独立按键接口定义 与开发板实际电路相对应
sbit K1 = P3^2;
sbit K2 = P3^3;
sbit K3 = P3^4;
sbit K4 = P3^5;



/*--------------------------------------------------------------*/
//坐标缓存
char x, y;          



/*--------------------------------------------------------------*/
//延时100000+1us 函数定义
void delay100ms(void)
{
    unsigned char i,j,k;
    for(i=156;i>0;i--)
    for(j=58;j>0;j--)
    for(k=4;k>0;k--);
}



/*--------------------------------------------------------------*/
 //定点显示,一次只显示一个点                                                                                     //说明:硬件电路是第一片595接点阵的列,第二片595接点阵的行
void goto_xy(unsigned char x, unsigned char y)
{
 Ser_IN(0x01 << x);          //列选(高电平有效)
 Ser_IN(~(0x01 << y));     //行数据(低电平有效)
 Par_OUT();                      //上升沿锁存输出
}



/*--------------------------------------------------------------*/
//按键扫描
void key_scan(void)
{
 if(!(K1 && K2 && K3 && K4))    //判断是否有按键按下
 {
  speaker();            //有按键按下蜂鸣器响一下
  if(K1 == 0) x--;   //列选控制,即水平左移
  if(K2 == 0)  x++; //列选控制,即水平右移
  if(K3 == 0) y--;   //行数据移位,即垂直上移
  if(K4 == 0) y++; //行数据移位,即垂直下移
  
 }
 delay100ms();
}


/*--------------------------------------------------------------*/
//主函数
void main (void)

 while(1)
 {
  key_scan();                               //按键扫描
  goto_xy(x & 0x07, y & 0x07);  //显示xy坐标的点
  delay100ms();
 }
}


本节重点:
1、无源蜂鸣器最简单的发音驱动的头文件Beep.H 的理解
2、点阵坐标改变的原理。怎样改变列选和行数据


相关程序:https://static.assets-stash.eet-china.com/album/old-resources/2009/6/3/df1eadec-0ecc-477f-b197-3714c411c687.rar


 



 

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
7
关闭 站长推荐上一条 /3 下一条