久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1321|回復: 0
打印 上一主題 下一主題
收起左側

沒有完成長按

[復制鏈接]
跳轉到指定樓層
樓主
ID:358998 發表于 2018-7-4 14:45 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#include "BS87D20A-3.h"
#define com1    _pc1
#define com2        _pc0
#define com3        _pc2
#define com4        _pc3
#define key1    _pd2
#define key2        _pd3
#define key3        _pa1
#define key4    _pa4
#define key_state_0        0   //按鍵的初始狀態
#define key_state_1        1   //按鍵按下的狀態
#define key_state_2        2   //按鍵釋放的狀態

volatile bit Flag_T5ms;
volatile bit Flag_T10ms;
volatile bit Flag_T1s;

const unsigned char tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsigned char strtab[3];//緩沖區
unsigned char key_number=0;
//unsigned char sec=0,min=0,hour=0;
unsigned char sec=0,min=0,hour=0;
unsigned char temp;
unsigned long s;  //秒級
unsigned long ms10;//毫秒
unsigned long ms5;
unsigned char n;
unsigned char read_key(void)
{
    static char key_state=0 ;     //按鍵的狀態

    unsigned char key_press;       //按鍵是否被按下
        unsigned char key_return = 0;  //按鍵返回值
    key_press = key4;         // 讀按鍵I/O電?

    switch (key_state)
    {
        case key_state_0:                 // 按鍵初始態
                if (!key_press)
                        {
                                if(Flag_T10ms)
                                {
                                        Flag_T10ms=0;
                                        }
                                key_return = 0;
                                key_state = key_state_1;// 鍵被按下,狀態轉換到鍵確認態
                }
                else key_state = key_state_0;
                        break;
                               
        case key_state_1:                   // 按鍵確認態
            if (!key_press)
            {
                    if(Flag_T10ms)
                    {
                            Flag_T10ms=0;
                            }
                key_return = 1;         // 按鍵仍按下,按鍵確認輸出為“1”
                key_state = key_state_2;// 狀態轉換到鍵釋放態
            }
            else
            {
                                key_state = key_state_0; // 按鍵已抬起,轉換到按鍵初始態
                                key_return = 0;
                        }
            break;
                               
        case key_state_2:
            if (key_press)
                        {
                               
                            key_state = key_state_0;//按鍵已釋放,轉換到按鍵初始態
                            key_return = 0;
            }
            break;
   }
return key_return;                //返回按鍵值
}
void displaypro()
{
        strtab[0]=tab[sec%10];
        strtab[1]=tab[sec/10];
        strtab[2]=tab[min%10];
        strtab[3]=tab[min/10];

}
void display_drive()
{
        com1=1;com2=1;com3=1;com4=1;
                    switch(temp)
                {
                        case 0:com4=0;
                         _pb=strtab[temp]; break;
                        case 1:com3=0;
                         _pb=strtab[temp]; break;
                        case 2:com2=0;
                         _pb=strtab[temp]; break;
                        case 3:com1=0;
                         _pb=strtab[temp]; break;
                        default:break;
                }
                temp++;
                if(temp==4)
                        temp=0;

}
void init()
{
    _ctm0c0=0x20;  // fh/16   2us        
        _ctm0c1=0xc1; // 定時/計數器模式 比較器a
        _ctm0al=0xf4; // 1ms
    _ctm0ah=0x01;
       
        _pbc=0; //輸出
        _pcc0=0;
        _pcc1=0;
        _pcc2=0;
        _pcc3=0;
       
        _pac1=1;
        _pac4=1;
        _pdc2=1;
        _pdc3=1;
        _pdpu3=1;
        _pdpu2=1;
        _papu1=1;
        _papu4=1;

        s=1000;
        ms10=10;
        ms5=5;
        temp=0;

        n=0;
        _mfe=1; //開多功能中斷
    _ctm0ae=1; //CTM a中斷使能
        _emi=1;        //開總中斷
        _ct0on=1; //開定時器

        }
        void main()
        {
                init();
                while(1)
                {
       
                        if(Flag_T5ms)
                        {
                                Flag_T5ms=0;  
                               
                        }
                        if(Flag_T1s)
                        {
                                Flag_T1s=0;
                                displaypro();
                                }
                       
                        if(Flag_T10ms)  //10MS進入一次
                        {
                               
                                read_key();
                                key_number=read_key();//調用按鍵掃描函數,取得按鍵值,5MS調用一次
                        if(key_number==1)
                        {
                               
                                n++;
                                _pb=tab[n];

               
               
                        }
                                Flag_T10ms=0;  
                        }

                        GCC_CLRWDT();
               
                        com1=1;com2=1;com3=0;com4=0;
                       

                }
        }
       
        void __attribute__((interrupt(0x14))) ISR_CTMO(void)
        {
                _ctm0af=0;

                s--;
                ms5--;
                ms10--;       
                  if(! ms5)
                {   
                        ms5=5;//5MS 視覺暫留
                        Flag_T5ms=1;
                }       
                if(!ms10)
                {
                        ms10=10;
                        Flag_T10ms=1;
                        }

                if(! s)
                {   
                        Flag_T1s=1;
                        s=1000;//1s電子鐘計數
                        sec++;       
                if(sec==60)
                {
               sec=0;
               min++;
               if(min==60)
               {
                min=0;
                 hour++;
                 if(hour==24)
                 {
                  hour=0;
                 }
                       }
               }
        }
       
       
        }

       
       
       
       

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩免费av | 国产午夜精品一区二区 | 春色av| 久久久久久中文字幕 | 91色综合 | 日本午夜免费福利视频 | 日本午夜网站 | 国产1区在线 | 怡红院免费的全部视频 | 久久精品亚洲一区二区三区浴池 | 天天干,夜夜操 | 91精品国产色综合久久不卡98 | 色综合天天天天做夜夜夜夜做 | 美女视频黄色片 | 中文字幕第十五页 | 综合久久国产 | 一区二区三区在线免费观看视频 | 成人精品一区二区三区四区 | 91xxx在线观看 | 久久机热 | 日韩欧美黄色 | 91久久久久久久久久久久久 | 99色视频| 欧美性乱 | 精品一区二区久久久久久久网站 | 国产欧美精品一区二区三区 | 免费视频一区二区 | 欧美精品福利视频 | 女朋友的闺蜜3韩国三级 | 国产精品1区 | 91天堂网 | 中文成人无字幕乱码精品 | 日本h片在线观看 | 日韩在线视频一区 | 午夜影院在线免费观看视频 | av黄色免费| 亚洲人成在线观看 | 福利视频网站 | 日韩视频观看 | 国产精品一区二区久久 | 久久国产视频网站 |