当前位置:首页 > 单片机学习程序
/*******************************************************************************
* * 普中科技
-------------------------------------------------------------------------------- * 实 验 名 : 按键选择LED灯左右移动实验 * 实验说明 : 按键选择LED灯左右移动 * 连接方式 : 见接线图 * 注 意 :
*******************************************************************************/
//--包含你要使用的头文件--//
#include
//--定义要使用的IO口--//
sbit K1 = P1^0; //对应按钮K1 sbit K2 = P1^1; //对应按钮K2
#define GPIO_LED P0 //led使用P0口
//--定义全局函数--//
void Delay10ms(unsigned int c); //延时10ms unsigned char Key_Scan();
/*******************************************************************************
* 函 数 名 : main * 函数功能 : 主函数 * 输 入 : 无 * 输 出 : 无
*******************************************************************************/
void main(void) { unsigned char ledValue, keyNum; ledValue = 0x01; while (1) { keyNum = Key_Scan(); //扫描键盘 if (keyNum == 1) //如果键值返回1
21
{ ledValue = _crol_(ledValue, 1); //左循环 } else if (keyNum == 2) { ledValue = _cror_(ledValue, 1); //右循环 } GPIO_LED = ledValue;//点亮LED灯 } }
/*******************************************************************************
* 函 数 名 : Key_Scan() * 函数功能 : 扫描键盘 * 输 入 : 无
* 输 出 : 读取到的键值
*******************************************************************************/
unsigned char Key_Scan() { unsigned char keyValue = 0 , i; //保存键值 //--检测按键1--// if (K1==0) //检测按键K1是否按下 { Delay10ms(1);//消除抖动 if (K1==0) //再次检测按键是否按下 { keyValue = 1; i = 0; while ((i<50) && (K1==0)) //检测按键是否松开 { Delay10ms(1); i++; } } } //--检测按键2--// if (K2==0) //检测按键K1是否按下
22
{ Delay10ms(1);//消除抖动 if (K2==0) //再次检测按键是否按下 { keyValue = 2; i = 0; while ((i<50) && (K2==0)) //检测按键是否松开 { Delay10ms(1); i++; } } } return keyValue; //将读取到键值的值返回 }
/*******************************************************************************
* 函 数 名 : Delay10ms * 函数功能 : 延时函数,延时10ms * 输 入 : 无 * 输 出 : 无
*******************************************************************************/
void Delay10ms(unsigned int c) //误差 0us {
unsigned char a, b; //--c已经在传递过来的时候已经赋值了,所以在for语句第一句就不用赋值了--// for (;c>0;c--) { for (b=38;b>0;b--) { for (a=130;a>0;a--); } } }
/************************************************************************
23
[文件名] C51音乐程序(八月桂花) [功能] 通过单片机演奏音乐
/**********************************************************************/ #include
//本例采用89C52, 晶振为11.0592MHZ
//关于如何编制音乐代码, 其实十分简单,各位可以看以下代码.
//频率常数即音乐术语中的音调,而节拍常数即音乐术语中的多少拍; //所以拿出谱子, 试探编吧!
sbit Beep = P1^5 ;
unsigned char n=0; //n为节拍常数变量 unsigned char code music_tab[] ={
0x18, 0x30, 0x1C , 0x10, //格式为: 频率常数, 节拍常数, 频率常数, 节拍常数, 0x20, 0x40, 0x1C , 0x10, 0x18, 0x10, 0x20 , 0x10, 0x1C, 0x10, 0x18 , 0x40, 0x1C, 0x20, 0x20 , 0x20, 0x1C, 0x20, 0x18 , 0x20, 0x20, 0x80, 0xFF , 0x20, 0x30, 0x1C, 0x10 , 0x18, 0x20, 0x15, 0x20 , 0x1C, 0x20, 0x20, 0x20 , 0x26, 0x40, 0x20, 0x20 , 0x2B, 0x20, 0x26, 0x20 , 0x20, 0x20, 0x30, 0x80 , 0xFF, 0x20, 0x20, 0x1C , 0x10, 0x18, 0x10, 0x20 , 0x20, 0x26, 0x20, 0x2B , 0x20, 0x30, 0x20, 0x2B , 0x40, 0x20, 0x20, 0x1C , 0x10, 0x18, 0x10, 0x20 , 0x20, 0x26, 0x20, 0x2B , 0x20, 0x30, 0x20, 0x2B , 0x40, 0x20, 0x30, 0x1C , 0x10, 0x18, 0x20, 0x15 , 0x20, 0x1C, 0x20, 0x20 , 0x20, 0x26, 0x40, 0x20 , 0x20, 0x2B, 0x20, 0x26 , 0x20, 0x20, 0x20, 0x30 , 0x80, 0x20, 0x30, 0x1C , 0x10, 0x20, 0x10, 0x1C , 0x10,
24
共分享92篇相关文档