欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2761|回復: 0
收起左側

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

[復制鏈接]
ID:529320 發(fā)表于 2019-6-4 16:39 | 顯示全部樓層 |閱讀模式
統(tǒng)計一分鐘按鍵次數(shù)

0.png


#include <reg51.h>

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

//共陽數(shù)碼管
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;//脈沖數(shù)
unsigned char calsp;//多長時間計數(shù)一次
unsigned char num1=60;//秒數(shù)
unsigned char Button_count=0;//按鍵次數(shù)
unsigned char da;


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

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

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

        P2 = P2&0xf0;//將P2的1-4置為1
                                Init();//初始化子函數(shù)
        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()                                                        //初始化子函數(shù)
{
        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;//設置成下降沿觸發(fā)方法
}

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;
}//統(tǒng)計按鍵總次數(shù)

void scankey()                                                //鍵盤檢測子函數(shù)
{
        if(k1==0)                                                //檢測鍵是否被按下
        {
                delay();                                        //延時消除抖動
                if(k1==0)                                        //重新讀取k1的值
                {                                                        
                        Button_count++;                                        //num2為按次數(shù)標志位
                        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;
                        }
                }
}



//數(shù)碼管顯示函數(shù),依次點亮數(shù)碼管

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;
}
//延遲函數(shù)
void delay()
{
        unsigned char i = 10;
        while(i--)
                ;
}

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


60s計數(shù)器.rar

12.55 KB, 下載次數(shù): 21, 下載積分: 黑幣 -5

回復

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表