- #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]; //顯示
- }
- }
復制代碼 |