51单片机_独立按键检测
单片机独立按钮实训报告

一、实训目的通过本次单片机独立按钮实训,掌握单片机的基本原理,了解独立按钮的工作原理及其在单片机中的应用,提高动手实践能力,为后续单片机相关课程的学习打下坚实基础。
二、实训内容1. 独立按钮介绍2. 独立按钮在单片机中的应用3. 独立按钮驱动程序编写4. 实验电路搭建与调试三、实训过程1. 独立按钮介绍独立按钮是一种常用的电子开关,由一个开关和两个引脚组成。
当按钮未按下时,两个引脚处于断开状态;当按钮按下时,两个引脚导通,从而实现信号的传递。
2. 独立按钮在单片机中的应用在单片机中,独立按钮常用于实现简单的输入控制,如按键控制LED灯的亮灭、按键控制继电器开关等。
3. 独立按钮驱动程序编写以51单片机为例,编写独立按钮驱动程序如下:```c#include <reg51.h>#define BUTTON P1 // 定义按钮连接的端口void delay(unsigned int ms) // 延时函数{unsigned int i, j;for (i = 0; i < ms; i++)for (j = 0; j < 120; j++);}void main(){while (1){if (BUTTON == 0x00) // 检测按钮是否被按下{delay(10); // 消抖处理if (BUTTON == 0x00) // 再次检测按钮是否被按下{// 执行按钮按下后的操作// ...}}}}```4. 实验电路搭建与调试根据上述程序,搭建如下实验电路:(1)连接按钮:将按钮的两个引脚分别连接到单片机的P1.0引脚和地(GND)。
(2)连接LED灯:将LED灯的正极连接到单片机的P1.1引脚,负极连接到地(GND)。
(3)连接电源:将单片机的VCC引脚连接到5V电源,GND引脚连接到地(GND)。
(4)调试程序:将编译好的程序烧录到单片机中,观察LED灯是否在按钮按下时亮起。
基于proteus的51单片机仿真实例五十二、按键的判断与消抖实例

基于proteus的51单片机仿真实例五十二、按键的判断与消抖实例1、按键是单片机应用系统中经常用到的一种输入设备。
单片机通过检测按键是否被按下来进行不同的控制。
按键有很多种,常用的是独立按键和键盘2、常用的独立按键也有很多种,最常见的是基于机械开关原理的有触点的按键。
3、我们利用proteus来实际模拟仿真一下按键的按下与松开过程。
在proteus中绘制如下图所示的电路图。
4、在keil c51中新建工程ex40,输入如下程序代码,编译并生成ex40.hex文件//实例40,按键判断实例,无按键消除抖动处理#include <reg51.h> // 包含头文件sbit KEY = P1^0; //定义按键对应的端口位sbit LED = P3^0; // 定义LED对应的端口位void main(void){if(KEY == 0) //判断按键是否按下{LED = !LED; //如果按键按下,LED的状态翻转一次}}5、将ex40.hex载入at89c51中,启动仿真,观察运行结果,可以发现程序运行结果并不是预期的按键每按下一次,LED的亮灭状态翻转一次。
下面我们通过实例演示如何实现简单的消除按键抖动6、在keil c51中新建工程ex40_1,输入如下程序代码,编译并生成ex40.hex_1文件//实例40_1,按键判断实例,用延时的方法消除按键消除抖动处理#include <reg51.h> // 包含头文件sbit KEY = P1^0; //定义按键对应的端口位sbit LED = P3^0; // 定义LED对应的端口位void delay(void){unsigned char i,j;for(i = 0;i < 200;i++)for(j = 0;j < 200;j++);}void main(void){if(KEY == 0) //判断按键是否按下{delay(); //延时一会,等待按键状态稳定if(KEY == 0) //再次判断按键是否按下{LED = !LED; //如果按键按下,LED的状态翻转一次}}}7、将ex40_1.hex载入at89c51中,启动仿真,观察运行结果,可以发现程序运行结果符合预期:按键每按下一次,LED的亮灭状态翻转一次。
51 汇编独立按键查询

org 0000h
mov p0,#0x3f
mov p2,#0
main: mov r7,#0ffh
wait1: jb p3.2,wait1 ;按键没有按下,等待
call del10ms ;调用延时
jb p3.2,wait1 ;继续查询
ljmp play1
play1: inc r7
mov a,r7
mov dptr,#tab
movc a,@a+dptr
mov p0,a ;查表显示数字
wait2: jnb p3.2,wait2 ;等待按键弹起
cjne a,#6fh,wait1 ;判断是否显示到最后一个数字
ljmp main
ret
tab: db 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f
del10ms:mov r6,#14h
del1: mov r5,#0ffh
del2: djnz r4,del2
djnz r3,del1
ret
end
单片机原理-独立按键识别-单片机原理-实验报告

sbit Key=P3A2;
uchar Mode=0;
void delay(i nt x)II定义时间间隔
while(x--);
}
void button_Cotrol()II根据按键模式执行相
应的代码
{
if(Key==0)
{
delay(IOOO);
33
21
参考原理图
实验步骤、实验结果及分析:
1、使用Proteus ISIS7Professional应用程 序,建立一个.DSN文件
2
3
4
件;为工程选择目标器件(
5
1.
#i nclude"reg51.h"
#defi ne uchar un sig ned char
sbit Led 1= P1A0;
if(Key==0)
{
Mode=(Mode+1)%4; while(Key==0);
}
}
if(Mode==0)
{
Led4=0;
Led仁〜Led1;
delay(3000);
sbit KeyБайду номын сангаасP3A2;
uchar Mode=0;
void delay(i nt x)II定义时间间隔
{
while(x--);
}
void button_Cotrol() II根据按键模式执行相
应的代码
if(Key==O)
{ delay(IOOO); if(Key==0) {
Mode=(Mode+1)%2; while(Key==O);
2.理解按键防抖技术
华南农业大学独立按键检测实验报告

华南农业大学独立按键检测实验报告专业班次组别题目实验三独立按键检测姓名(学号)日期 19.4.13一、实验目的1.学会使用独立按键二、实验内容1.通过按键选择LED灯左右移动三、实验相关原理图四、实验程序#include //51单片机头文件#includesbit K1 = P1^0; //对应K1按钮为P1^0sbit K2 = P1^1; //对应K2按钮为P1^1#define GPIO_LED P0 //定义led由P0口输出信号void Delay10ms(unsigned int c); //延时函数声明,延时时间为为10msunsigned char Key_Scan(); //键盘扫描函数声明void main(void) //主函数{unsigned char ledValue, keyNum; //定义两个无符号字符型变量ledValue与keyNum ledValue = 0x01; //将0000 0001赋给ledValuewhile (1) //一直进行这个while循环专业班次组别题目实验三独立按键检测姓名(学号)日期 19.4.13 {keyNum = Key_Scan(); //扫描键盘if (keyNum == 1) //如果键值返回1{ledValue = _crol_(ledValue, 1); //左循环}else if (keyNum == 2) // 如果键值返回2{ledValue = _cror_(ledValue, 1);//右循环}GPIO_LED = ledValue;//点亮LED灯}}unsigned char Key_Scan() //键盘扫描函数{unsigned char keyValue = 0 , i; //定义变量用于保存键值if (K1==0) //检测按键K1是否按下{Delay10ms(1); //消抖if (K1==0) //再次检测按键是否按下{keyValue = 1; //使得键值为1i = 0; //令i=0while ((i<50) && (K1==0)) //检测按键是否松开,当i小于50并且K1按下的{ //时候,进入循环,单片机程序再此将循环500msDelay10ms(1);i++;}}if (K2==0) //检测按键K2是否按下{Delay10ms(1); //消除抖动if (K2==0) //再次检测按键是否按下{keyValue = 2; //使得键值为2i = 0; //令i=0专业班次组别题目实验三独立按键检测姓名(学号)日期 19.4.13 while ((i<50) && (K2==0)) //检测按键是否松开,当i小于50并且K2按{ //下的时候,进入循环,单片机程序再此将Delay10ms(1); //循环500msi++;}}}return keyValue; //将读取到键值的值返回}void Delay10ms(unsigned int c) //10ms的延时函数{unsigned char a, b;for (;c>0;c--){for (b=38;b>0;b--){for (a=130;a>0;a--);}}五、思考问题1.为什么需要按键防抖?如何实现软件去抖?答、由于按钮按下时,开关的触点并没有紧密贴合,而是可能存在不停地快速的通断通断,这种现象称为按键抖动,所以需要按键防抖方法:判断按键是否被按下之后,做短暂延时,待延时过后再检测一遍按键是否被按下,如果两者结果相同,则认为该按键被按下。
项目3__51单片机按键识别的设计

任务2
多路按键状态指示的设计
• B) 反转法: 1)行输入、列输出,将列输出端全置为0, 通过接口读取行线电平,判断行的位置 2)列输入、行输出,将行输出端全置为0, 通过接口读取列线电平,判断列的位置 综合两步获取按键号。
任务2
多路按键状态指示的设计
• 3.矩阵式键盘的软件设计 • 无论采用哪种方式,都要编制相应的键盘扫描程 序。在键盘扫描程序中一般要完成以下几个功能: • (1)判断键盘上有无按键按下; • (2)去键的机械抖动影响; • (3)求所按键的键号; • (4)转向键处理程序。
任务2
多路按键状态指示的设计
◇ 知识链接
• 一、矩阵式键盘 • 1.结构和工作原理 • 当输入部分有多个按键时,若仍然采用独立键盘, 必然会占用大量的I/O口,采用矩阵键盘是一种比 较节省资源的方法。矩阵式键盘又称行列式键盘, 往往用于按键数量较多的场合。矩阵式键盘的按 键设置在行与列的交点上。
任务3
任务2
单键控制LED的设计
软件消抖流程图
任务2
单键控制LED的设计
1.提出任务 • 用单键(即独立键盘中的按键)实现对LED进行控制, 每按一次按键时,LED 方式变化一次,用以表示按键控 制的结果。
2.任务分析 • (1)硬件电路设计 • 以8051单片机作为控制电路,按键连接至单片机的P1.4 引脚,另一端接地,P2.0口外接1个采用共阳极连接方式 的发光二极管(LED)和 1个限流电阻,硬件电路原理 图所示。
main() { while(1) { key=keyscan( ); if(key!=16) //显示二进制键 值 P2=~key; else P2=0xff; //无按键不显示
} }
单片机原理-独立按键识别-单片机原理-实验报告

单片机原理■独立按键识别■单片机原理■实验报告宁德师范学院计算机系实验报告(2014— 2015 W 第2 学期)课程名称_________ 单片机原理 _________ 实验名称独立按键识别__________ 专业计算机科学与技术(非师)年级_______________ 12> _____________ 学号B2012102147姓名王秋指导教师__________ 杨烈君____________ 实验日期___________ 2015.5.27 ________实验目的:1. 掌握查询式按键的原理和编程方法实验要2.理解按键防抖技术1. 在Proteus软件中画好51单片机最小核心电路,包括复位电路和晶振电路2. 在电路中增加按键、Led灯、八位7段数码管(共阳/共阴自选),将P2 口作数据输出口与7段数码管数据引脚相连,P3引脚输出位选控制信号。
实3 现单按键控制Led灯闪烁实现单按键多功能识别一一控制4路Led 灯闪烁5 实现0・99的计数器效果,按一下数值加一- 实现0・99码表(按一次开始计时,第二第次停止,三次清零)7倉扩展要求:通过3个按键实现时钟的调整模(KEY1 式,KEY2 + , KEY3 ・)实验设备(环境):计算机、Proteus ISIS 7 Professional 应用程序、Ke 订应用程序实验内容:_[麴WS轟P 控制4路Led]'实现99的计数器效果,按一下数值加一实现99码表(按一次开始计时,第二第次停g,三次清零)J 扩展要求:通过3个按键实现时钟的调整(KEY1 模式‘ KEY2 + , KEY3 ・)实验步骤、实验结果及分析:1、使用Proteus ISIS 7 Professional 应用程序,建立一个.DSN文件2、在“库”下拉菜单中,选中“拾取元件”(快捷键P),分别选择以下元件:AT89C51 CAP CAP-ELEC CRYSTAL RESPACK。
独立按键识别-单片机原理-实验报告材料

文档 师学院计算机系 实验报告
(2014—2015学年 第 2学期)
课程名称 单片机原理 实验名称 独立按键识别 专 业 计算机科学与技术(软工) 年 级 2012级 学号 B2012103145 冯武 指导教师 烈君 实验日期 2015.5.27 文档 实验目的与要求: 目的: 1. 掌握查询式按键的原理和编程方法 2. 理解按键防抖技术
要求: 1. 在Proteus软件中画好51单片机最小核心电路,包括复位电路和晶振电路 2. 在电路中增加按键、Led灯、八位7段数码管(共阳/共阴自选),将P2口作数据输出口与7段数码管数据引脚相连 ,P3引脚输出位选控制信号。 3. 实现单按键控制Led灯闪烁 4. 实现单按键多功能识别——控制4路Led灯闪烁 5. 实现0-99的计数器效果,按一下数值加一 6. 实现0-99码表 ( 按一次开始计时,第二次停止,第三次清零 ) 7. 扩展要求: 通过3个按键实现时钟的调整 ( KEY1 模式 , KEY2 + ,KEY3 - )
实验设备(环境): 1.计算机 2.Proteus ISIS 7 Professional应用程序 3.Keil应用程序 文档 实验容: 按键识别 要现: 1. 实现单按键控制Led灯闪烁
2. 实现单按键多功能识别——控制4路Led灯闪烁 3. 实现0-99的计数器效果,按一下数值加一 4. 实现0-99码表 ( 按一次开始计时,第二次停止,第三次清零 ) 5. 扩展要求: 通过3个按键实现时钟的调整 ( KEY1 模式 , KEY2 + ,KEY3 - )
P0.0/AD039P0.1/AD138
P0.2/AD237
P0.3/AD336
P0.4/AD435
P0.5/AD534
P0.6/AD633
P0.7/AD732
P3.0/RXD10P3.1/TXD11
P3.2/INT012
P3.3/INT113
P3.4/T014
P3.7/RD17P3.6/WR16P3.5/T115
独立按键识别-单片机原理-实验报告

宁德师范学院计算机系实验报告(2014—2015学年第2学期)课程名称单片机原理实验名称独立按键识别专业计算机科学与技术(软工)年级2012级学号B2012103145 姓名冯武指导教师杨烈君实验日期2015、5、27实验步骤、实验结果及分析:1实验步骤:1、使用Proteus ISIS 7 Professional应用程序,建立一个、DSN文件2、在“库”下拉菜单中,选中“拾取元件”(快捷键P),分别选择以下元件:AT89C51、CAP、CAP—ELEC、CRYSTAL、RESPACK—8.3、构建仿真电路图1 按键识别1、2图2 按键识别3图3按一下暂停图4归零4、创建一个Keil 应用程序:新建一个工程项目文件;为工程选择目标器件(A T89C52);为工程项目创建源程序文件并输入程序代码;保存创建得源程序项目文件;把源程序文件添加到项目中。
5、把用户程序经过编译后生成得HEX 文件添加到仿真电路中得处理器中(编辑元件→文件路径) 2 实验程序 〈流程图>(1)按键识别 ( 按下L ED灯亮,再按灭)#incl ude 〈reg51、h 〉#de fi ne uint unsigned int#d efine uc har uns igne d ch ars bit l ed=P2^6;sbit key=P2^7;void delay(ui nt x ){while(x ——);}voi d ma in(){ﻩ while (1) ﻩ{ ﻩﻩif(key==0) { dela y(1000);if (ke y==0)ﻩﻩ {ﻩ led=~led ;whi le(k ey==0);ﻩ }ﻩﻩ }}}(2)按键识别 ( 按下灭,再按闪)#in clude 〈re g51、h〉#d ef ine u int unsig ned in t#def ine uch ar unsign ed charsb it led=P2^6;sbit key =P2^7;void d elay(uin t x){图5时钟调整 电路图注:1、报告内得项目或设置,可根据实际情况加以补充与调整2、教师批改学生实验报告应在学生提交实验报告10日内。
独立按键识别-单片机原理-实验报告

师学院计算机系
实验报告
(2014—2015学年第 2学期)
课程名称单片机原理
实验名称独立按键识别
专业计算机科学与技术(软工)年级 2012级
学号 B2012103145 武
指导教师烈君
实验日期 2015.5.27
实验步骤、实验结果及分析:
1 实验步骤:
1、使用
Proteus ISIS 7 Professional应用程序,建立一个.DSN文件
2、在“库”下拉菜单中,选中“拾取元件”(快捷键P),分别选择以下元件:AT89C51、CAP、CAP-ELEC、CRYSTAL、RESPACK-8。
3、构建仿真电路
图1 按键识别1、2
图2 按键识别3
图3按一下暂停
图4归零
图5时钟调整
电路图
注:1、报告的项目或设置,可根据实际情况加以补充和调整 2、教师批改学生实验报告应在学生提交实验报告10日。
单片机之路—独立按键操作

单片机之路—独立按键操作1、概述我们在使用家用电器时经常需要通过按键给电器输入指令,让电器执行动作。
比如电磁炉的开关、电饭煲定时时间设定等等。
今天我们来讲一下单片机怎么识别按键操作指令的。
我们知道单片机只能识别高低电平,对于51单片机来说,0V为低电平,5V为高电平。
按键就相当于一个开关,按下时导通,按键弹开时断开。
2、硬件电路分析我们来看一下按键和单片机的接口电路图:独立按键与单片机接口我们直接把单片机P3.2引脚和P3.3引脚接到按键的一端,按键的另外一端接地。
因为单片机的P3引脚是接有上拉电阻的,所以可以这样接。
如果是P0口不能这样接。
3、程序编写在开始写程序之前,我们需要了解一个实际应用的中知识点,按键在按下和释放的时候并不是我们想象的是一个理想的方波脉冲,实际是在电平跳变的时候是有产生抖动的,这些抖动会导致单片机采集按键状态时出现误判的情况。
从实际波形我们可以看到在按键实际波形的中间有一段稳定的波形,我们可以采集这段波形进行判断。
也就是说在程序处理中,我们检测到按键按下后延时3~5ms再次检测按键是否处于按下状态。
按键实际波形和理想波形我们在上次流水灯的程序基础上进行编写,实现触碰P3.2引脚的KEY1流水灯间隔亮灭,触碰P3.3引脚的KEY2流水灯从低位往高位依次点亮。
我们先把两个按键引脚定义一下sbit KEY1 P3^2sbit KEY2 P3^3接下来我们写一个按键扫描函数unsigned char KeyScan(void){static unsigned char keynum = 0;if(KEY1 == 0){delay_ms(3);if(KEY1 == 0){keynum = 1;}}else if(KEY2 == 0){delay_ms(3);if(KEY2 == 0){keynum = 2;}}return keynum;}在这函数的处理中我们判断当KEY1按下时,我们返回1,当KEY2按下时,我们返回2,其他的情况返回0。
51单片机独立按键去抖动程序

if(!key4)
{
P0=0x66;//数码管显示"4"
}
}
}
}
{
P2=0x00;
while(1)
{
if(!key1)
{ //按下相应的按键,数码管显示相应的码值
delay(1000);
if(!key1)
{
P0=0x06;//数码管显示"1"
}
}
if(!key2)
{ //按下相应的按键,数码管显示相应的码值
delay(1000);//去抖动
if(!key2) //检测按键确实按下,进行按键处理
{
P0=0x5B;//数码管显示"2"
//这里可以添加按键按下所需要的操作,如数据加减乘除,蜂鸣器等设备开关
}
}
if(!key3)
{ //按下相应的按键,数码管显示相应的码值
delay(1000);
if(!key3)
{
P0=0x4F;//数码管显示"3"
}
}
if(!key4)
{ //按下相应的按键,数码管显示相应的码值
内容:切换到独立按键模式,通过按键在数码管显示对应的数字
------------------------------------------------*/
#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
sbit key1=P3^0; //定义按键位置
sbit key2=P3^1;
sbit key3=P3^2;
sbit key4=P3^3;
实验二独立按键试验实验报告

实验二独立按键试验实验报告
一、实验目的
独立按键试验是为了验证按键与单片机的连接是否正常,并测试按键
功能是否正常,通过实验掌握按键接口的使用和按键的原理。
二、实验原理
在实际应用中,常常需要使用按键来实现硬件的控制。
按键的原理是:当按键关闭时,两个按键引脚之间短接,按键关闭。
当按键打开时,两个
按键引脚之间断开,按键打开。
三、实验仪器
1.单片机开发板
2.按键
3.面包板和杜邦线
4.电源线
四、实验步骤
1.将按键连接到单片机开发板上的按键接口,并接通电源。
2.编写程序,监测按键是否被按下,并通过串口输出按键的状态。
3.烧录程序到单片机,运行程序。
4.进行按键试验。
五、实验结果与分析
按下按键后,通过监测按键引脚的电平变化,可以判断按键是否被按下。
根据不同的按键连接方式,可能需要使用上拉电阻或下拉电阻来连接按键。
六、实验结论
通过独立按键试验,我们验证了按键与单片机的连接是否正确,并测试了按键的功能。
在实际应用中,可以根据需要使用按键来实现硬件的控制。
七、实验心得
通过本次实验,我掌握了按键接口的使用方法和按键的原理。
在实际应用中,按键是一个常用的控制元件,有了这次实验的经验,以后在使用按键时会更加得心应手。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《51系列单片机_独立按键检测》
此程序使用 单片机89SC52
// 1、 此程序实现独立按键的检测功能,每次按下按键key5时,数码管最后一位显示的数
值加1,按键同时响蜂鸣器
#include
sbit key5 = P1^4; //独立按键
sbit P3_6 = P3^6; //蜂鸣器控制端口
unsigned char code BitSet[8] =
{
0xfe, 0xfd, 0xfb, 0xf7,
0xef, 0xdf, 0xbf, 0x7f
}; //用于设置(低电平位选)数码管的位选信号,从低到高对应8个数码管
unsigned char code NumberCode[16] =
{
0x3f, 0x06, 0x5b, 0x4f,
0x66, 0x6d, 0x7d, 0x07,
0x7f, 0x6f, 0x77, 0x7c,
0x39, 0x5e, 0x79, 0x71,
}; //用于设置(共阴极)数码管的段选信号,从0~f共16个数值
void delay_ms(unsigned int n)
{ //软件延时函数,延时n毫秒
unsigned int i, j;
for(i=n;i>0;i--)
for(j=110;j>0;j--);
}
void beep(int n)
{
int i = n; //喇叭连续响n毫秒
while(i>0) //向喇叭输入1000HZ的方波震荡源
{
P3_6 = 1;
delay_ms(1); //0.5毫秒高电平
P3_6 = 0;
delay_ms(1); //0.5毫秒低电平
i--;
}
}
void main()
{
int num=0;
while(1)
{
P2=BitSet[7]; //选择最低位的数码管
if(key5==0) //判断按键key5是否按下
{
delay_ms(10); //延时重新判断按键是否按下,延时消除抖动
if(key5==0)
{
num++; //每按下一次显示的数值加1
beep(200); //喇叭响200毫秒
if(num==16) num=0;
while(!key5); //直到按键释放,按下时key5==0,持续循环
}
}
P0=~NumberCode[num];
}
}
// 2、 此程序实现独立按键的检测功能,key5和key6每次按下按键时,数码管次低位和最
低位显示的数值加1,按键同时响蜂鸣器
#include
sbit key5 = P1^4;
sbit key6 = P1^5;
sbit P3_6 = P3^6;
unsigned char code BitSet[8] =
{
0xfe, 0xfd, 0xfb, 0xf7,
0xef, 0xdf, 0xbf, 0x7f
}; //用于设置(低电平位选)数码管的位选信号,从低到高对应8个数码管
unsigned char code NumberCode[16] =
{
0x3f, 0x06, 0x5b, 0x4f,
0x66, 0x6d, 0x7d, 0x07,
0x7f, 0x6f, 0x77, 0x7c,
0x39, 0x5e, 0x79, 0x71,
}; //用于设置(共阴极)数码管的段选信号,从0~f共16个数值
void delay_ms(unsigned int n)
{ //软件延时函数,延时n毫秒
unsigned int i, j;
for(i=n;i>0;i--)
for(j=110;j>0;j--);
}
void beep(int n)
{
int i = n; //喇叭连续响n毫秒
while(i>0) //向喇叭输入1000HZ的方波震荡源
{
P3_6 = 1;
delay_ms(1); //0.5毫秒高电平
P3_6 = 0;
delay_ms(1); //0.5毫秒低电平
i--;
}
}
void main()
{
int num=0, num2=0;
while(1)
{
P2=BitSet[6]; //选择最低位的数码管
if(key5==0) //判断按键key5是否按下
{
delay_ms(10); //延时重新判断按键是否按下,延时消除抖动
if(key5==0)
{
num++; //每按下一次显示的数值加1
beep(100); //喇叭响100毫秒
if(num==16) num=0;
while(!key5)
{
P2=BitSet[6]; //选择次低位的数码管
P0=~NumberCode[num];
delay_ms(3);
P2=0xff;
P2=BitSet[7]; //选择最低位的数码管
P0=~NumberCode[num2];
delay_ms(3);
P2=0xff;
}; //直到按键释放,按下时key5==0,持续循环
}
}
P0=~NumberCode[num];
delay_ms(3);
P2=0xff;
P2=BitSet[7]; //选择最低位的数码管
if(key6==0) //判断按键key6是否按下
{
delay_ms(10); //延时重新判断按键是否按下,延时消除抖动
if(key6==0)
{
num2++; //每按下一次显示的数值加1
beep(100); //喇叭响100毫秒
if(num2==16) num2=0;
while(!key6)
{
P2=BitSet[6]; //选择次低位的数码管
P0=~NumberCode[num];
delay_ms(3);
P2=0xff;
P2=BitSet[7]; //选择最低位的数码管
P0=~NumberCode[num2];
delay_ms(3);
P2=0xff;
};; //直到按键释放,按下时key6==0,持续循环
}
}
P0=~NumberCode[num2];
delay_ms(3);
P2=0xff;
}
}