- #include <reg51.h> //此文件中定义了单片机的一些特殊功能寄存器
- #define duan P2 //段选
- typedef unsigned int u16; //对数据类型进行声明定义
- typedef unsigned char u8;
- sbit s1=P3^2; //定义P32口是s1
- sbit s2=P3^7; //定义P37口是s2 开始/暂停/清零 按钮
- u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
- 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//显示0~F的值
- u8 cnt=0, display=0;
- u8 status =0; //0: 开始/1:暂停 /2: 清零 按钮
- /*******************************************************************************
- * 函 数 名 : delay
- * 函数功能 : 延时函数,i=1时,大约延时10us
- *******************************************************************************/
- void delay(u16 i)
- {
- while(i--);
- }
- /*******************************************************************************
- * 函 数 名 : keypros1
- * 函数功能 : 按键处理函数,判断按键s1是否按下
- *******************************************************************************/
- void keypros1()
- {
- if(s1==0) //检测按键s1是否按下
- {
- delay(1000); //消除抖动 一般大约10ms
- if(s1==0) //再次判断按键是否按下
- {
- if(!status) //检测暂停
- cnt++;
- if(cnt > 5) //按6次
- {
- cnt = 0;
- display++;
- if(display > 9)
- {
- display=0;
- }
- }
- }
- while(!s1); //检测按键是否松开
- }
- }
- /*******************************************************************************
- * 函 数 名 : keypros2
- * 函数功能 : 按键处理函数,判断按键s2是否按下
- *******************************************************************************/
- void keypros2()
- {
- if(s2==0) //检测按键s2是否按下
- {
- delay(1000); //消除抖动 一般大约10ms
- if(s2==0) //再次判断按键是否按下
- {
- status++;
- if(status == 2)
- {
- display=0;
- cnt = 0;
- }
- if(status > 2)
- {
- status=0;
- }
- }
- while(!s2); //检测按键是否松开
- }
- }
- /*******************************************************************************
- * 函 数 名 : main
- * 函数功能 : 主函数
- * 输 入 : 无
- * 输 出 : 无
- *******************************************************************************/
- void main()
- {
- while(1)
- {
- keypros1(); //按键处理函数
- keypros2(); //按键处理函数
- duan=smgduan[display]; //显示
- }
- }
复制代码 |