第二十五课 点阵之一 独立按键控制点移动
程序讲解:
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
文章评论(0条评论)
登录后参与讨论