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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于51單片機的60S計數器(源碼、設計圖、仿真)

[復制鏈接]
跳轉到指定樓層
樓主
統計一分鐘按鍵次數




#include <reg51.h>

sbit P2_0 = P2^0;//數碼管選定位
sbit P2_1 = P2^1;//數碼管選定位
sbit P2_2 = P2^2;//數碼管選定位
sbit P2_3 = P2^3;//數碼管選定位
sbit k1=P1^0;
sbit k2=P1^1;

//共陽數碼管
unsigned char code table[] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0x88, 0x83, 0xc6, 0xa1, 0x86, 0x8e};

//unsigned int motorspeed = 0;
unsigned int bcf = 0;
unsigned char GE, SHI, BAI, QIAN;
//unsigned int counter = 0;//脈沖數
unsigned char calsp;//多長時間計數一次
unsigned char num1=60;//秒數
unsigned char Button_count=0;//按鍵次數
unsigned char da;


void display(unsigned char da);//數碼管顯示
void delay();//延遲函數
//void calspeed();
void Button_sum(bcf);//按鍵總次數
void scankey();//按鍵掃描
void Init();//初始化

void main()
{
        //EA = 1;//開啟部中斷
       // EX0 = 1;//開啟外部中斷0
        //IT0 = 1;//設置成下降沿觸發方式
       // TMOD = 0x01;//設置定時器0為模式1,即16位計數模式
       // TH0 = (65536-10000)/256;//計數時間為10ms
       // TL0 = (65536-10000)%256;

       // ET0 = 1;//開啟定時器0中斷
       // TR0 = 1;//啟動定時器0

        P2 = P2&0xf0;//將P2的1-4置為1
                                Init();//初始化子函數
        while(1)
        {   
                        scankey();
                        Button_sum(bcf);
                        if(num1==0)
                        {
                                TR0=0;
                                bcf=1;
                                ET0=0;
                                //k1=1;
                                
                        }
                        display(Button_count);
                        //display(bcf);
                        //display(num1);
                                }
        return ;
}


void Init()                                                        //初始化子函數
{
        TMOD=0X01;                                                //設定定時器0的工作方式為1
        TH0=(65536-50000)/256;                        //定時器裝初值一個周期50ms
        TL0=(65536-50000)%256;
        EA=1;                                                        //開總中斷
        ET0=1;                                                    //開定時器0中斷
        TR0=1;                                                        //啟動定時器0
        
                                EX0=1;//開啟外部中斷
                                IT0=1;//設置成下降沿觸發方法
}

void Button_sum(bcf)
        {
                /*if(k1==0&&bcf==0){
                delay();
                if(k1==0&&bcf==0){
                Button_count++;
                if(Button_count>=10000)
                Button_count=0;
                while(!k1 && bcf==0);        
                }
        }*/
                if(bcf==0){
                        if(k1==0){
                        delay();
                        if(k1==0){
                                Button_count++;
                                if(Button_count>=10000)
                                        Button_count=0;
                                        while(!k1);
                        }
                        }        
                }
                else{
                        Button_count=0;
                }
               
        //Button_count=bcf;
}//統計按鍵總次數

void scankey()                                                //鍵盤檢測子函數
{
        if(k1==0)                                                //檢測鍵是否被按下
        {
                delay();                                        //延時消除抖動
                if(k1==0)                                        //重新讀取k1的值
                {                                                        
                        Button_count++;                                        //num2為按次數標志位
                        while(!k1);                                //等待按鍵釋放
                        if(Button_count==1)                                //按鍵一次計時開始
                           TR0=1;
                }
        }
                if(k2==0)
                {
                        delay();
                        if(k2==0)
                        {
                        TR0=0;
                        num1=60;
                        calsp=0;
                        Button_count=0;
                        bcf=0;
                        }
                }
}



//數碼管顯示函數,依次點亮數碼管

void display(unsigned char da)
{
        GE = da%10;
        SHI = da/10%10;
        BAI = da/100%10;
        QIAN = da/1000%10;

        P2_0 = 1;
        P0 = table[QIAN];
        delay();
        P2_0 = 0;

        P2_1 = 1;
        P0 = table[BAI];
        delay();
        P2_1 = 0;

        P2_2 = 1;
        P0 = table[SHI];
        delay();
        P2_2 = 0;

        P2_3 = 1;
        P0 = table[GE];
        delay();
        P2_3 = 0;
}
//延遲函數
void delay()
{
        unsigned char i = 10;
        while(i--)
                ;
}

void _TIMER0() interrupt 1
{
        TH0 = (65536-50000)/256;//重新裝入初值,計數時間為50ms
        TL0 = (65536-50000)%256;
        calsp++;
                if(calsp==20)
                {
                        calsp=0;
                        num1--;
                /*        if(num1==0)
                                TR0=0;,
                                bcf=1;*/
                        
                        
                }
}


60s計數器.rar

12.55 KB, 下載次數: 21, 下載積分: 黑幣 -5

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 自拍偷拍第一页 | 亚洲网在线 | 久草在线 | 国产999精品久久久 精品三级在线观看 | 91视频网 | 欧美一级二级在线观看 | 亚洲国产精品一区在线观看 | 无码一区二区三区视频 | 欧美日韩一区在线 | 久久精品亚洲精品 | 国产成人在线观看免费 | 美女福利网站 | 中文字幕一区二区三区四区五区 | 人人澡视频 | 成人在线视频免费观看 | 精品一区二区三区在线观看国产 | 在线免费观看毛片 | 欧美日韩亚洲系列 | 自拍偷拍第1页 | 丝袜 亚洲 另类 欧美 综合 | 亚洲欧美成人影院 | 91成人小视频 | 国产欧美日韩二区 | 久久久.com| 国产精品美女久久久久久久网站 | 91精品国产一区二区三区 | 亚洲高清在线观看 | 怡红院怡春院一级毛片 | 亚洲 自拍 另类 欧美 丝袜 | 亚洲一区二区三区视频在线 | 久久er精品 | 成人av播放 | 亚洲最大看片网站 | 成人性视频在线播放 | 国产国拍亚洲精品av | 2021天天干夜夜爽 | 日韩免费毛片视频 | 美女天天操 | 性色的免费视频 | www.色婷婷| 波多野结衣一二三区 |