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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機開發板制作可按鍵控制 倒計時( 含數顯)

[復制鏈接]
跳轉到指定樓層
樓主
ID:765212 發表于 2020-5-30 18:48 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#include<reg52.h>
#include<intrins.h>
#define uint  unsigned int
#define ucahr unsigned char
#define key P1        

sbit  LSA=P2^2;
sbit  LSB=P2^3;
sbit  LSC=P2^4;
sbit  beep=P1^5;

uint hour,min,sec;
ucahr date[8];
ucahr a;
uint code table[16]=
{
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};//共陰

void  delay(uint x)
{
                uint i,j;
                for(i=0;i<x;++i)
                        for(j=0;j<110;++j);
}
/******************************************************************
函數:init
功能:初始化
******************************************************************/
void init()
{
        TMOD=0x21;  //定時器0模式,使用工作方式1
               
        TH0=(65536-50000)/256;//賦予初值 50ms
        TL0=(65536-50000)%256;
        EA=1;
        ES=1;
        ET0=1;  //打開定時器,容許中斷
        TR0=1; //打開終中斷
//串口中斷設置
        SCON=0X50;
        //TMOD=0X20;
        PCON=0X80;
        TH1=0Xf3;
        TL1=0Xf3;
        TR1=1;
        
        hour=1;
        min=1;
        sec=5;
}

/******************************************************************
函數:display
功能:1\數碼管數顯 2輸入時分秒進行數顯
/******************************************************************/
void dispiay()
{
        ucahr v;
        //微位選打開所有數碼管
                for(v=0;v<8;v++)
                {
                        switch(v)
                        {
                                case 0 :
                                        LSA=1;LSB=1;LSC=1;break;
                                case 1 :
                                        LSA=0;LSB=1;LSC=1;break;
                                case 2 :
                                        LSA=1;LSB=0;LSC=1;break;
                                case 3 :
                                        LSA=0;LSB=0;LSC=1;break;
                                case 4 :
                                        LSA=1;LSB=1;LSC=0;break;
                                case 5 :
                                        LSA=0;LSB=1;LSC=0;break;
                                case 6 :
                                        LSA=1;LSB=0;LSC=0;break;
                                case 7 :
                                        LSA=0;LSB=0;LSC=0;break;
                        }

                        P0=date[v];
                        delay(1);        
                        P0=0x00;
                }
}        

void  datepros()
{
  date[0]=table[hour/10];
        date[1]=table[hour%10];
        date[2]=0x40;        
        date[3]=table[min/10];
        date[4]=table[min%10];
        date[5]=0x40;
        date[6]=table[sec/10];
        date[7]=table[sec%10];
        
}
/***********************************************
函數:timer0  interrupt  1
功能:定時0 中環函數
************************************************/

void timer0 () interrupt 1
{
        ucahr t0;

        TH0=(65536-50000)/256;//賦予初值 50ms
        TL0=(65536-50000)%256;
        t0++;//五十毫秒為基礎單位,20此后達到一秒,進行時分秒的換換算

        if(t0==20)
        {
                t0=0;
                if(sec==0)//對清清零情況進行判定
                {
                        if(hour==0&&min==0&&sec==0)
                                sec=0;
                        else
                        {
                                sec=59;
                                min--;
                        }
                }
                else//用以實現功能
                        sec--;        
        
                if(sec<0)//對秒的情況進行判定
                {
                        //sec=59;
                        if(hour==0&&min==0)
                        {
                                hour=0;
                                min=0;
                                sec=0;
                        }               
                        else           //n套入對分的判定
                        {
                                if(min>0)
                                        min--;
                                else
                                {
                                        min=59;
                                        if(hour!=0)
                                                hour--;
                                }
                        }
                        
                        
                        if(min<0)//對分鐘的判定
                        {
                                if(hour==0)  //倒計時情況
                                {
                                        min=0;
                                        hour=0;
                                }        
                                else  //對分鐘及前位的操作
                                {
                                        min=59;
                                        hour--;
                                }
                                
                  }
          }
        }        
        
        if(sec==0&&min==0&&hour!=0)
        {
                hour--;
                min=59;
                sec=59;                        
        }
               
        if(hour==0&&min==0&&sec==0)
        {        
                beep=~beep;
                //delay(1);
        }        
}




/***********************************************
函數;keydown
功能;掃描對應矩陣按鍵,服賦予按鍵不同功能
*******************************************/
void keydown(void)
{
        uint k1;
        //uchar a;
        key=0x0f;
        if(key!=0x0f)
        {
                        //waterfall_display();
                        delay(10);
                        if(key!=0x0f)
                        
                        {
                                        key=0X0F;//開列
                                        switch(key)
                                        {
                                                case 0x07:k1=0;
                                                        break;
                                                case 0x0b:k1=1;
                                                        break;
                                                case 0x0d:k1=2;
                                                        break;
                                                case 0x0e:k1=3;
                                                        break;
                                        }
                                        key=0xf0;//開行
                                        switch(key)
                                        {
                                                case 0x70:k1=k1;
                                                        break;
                                                case 0xb0:k1=k1+4;
                                                        break;
                                                case 0xd0:k1=k1+8;
                                                        break;
                                                case 0xe0:k1=k1+12;
                                                        break;
                                        }               
                        }               
                //while((key!=0xf0)&&(a<50))
                        while(key!=0xf0)
                {
                        delay(10);
                //        a++;
                }        
        }
//賦予按鍵功能
    //0.1.2.3分別控制第一二位(時)
        //4.5.6.7分別控制第三四位(分)
        //8.9.10.11   控制七八位(秒)
        //12.13.14.15 清空時,分,秒,全部
        if(k1==0)
        {
                hour=hour+10;
        }
        if(k1==1)
        {        
                if(hour>=10)
                hour=hour-10;
                else
                hour=0;        
        }        
        if(k1==2)
                hour++;
        if(k1==3)
        {
                if(hour>=1)
    hour--;
                else
                hour=0;
        }
        if(k1==4)
        {
                min=min+10;
                if(min>=60)
                        min=min-60;
        }
        if(k1==5)
        {
                if(min>=10)
                        min=min-10;
                else
                {
                        if(min==0)
                                min=50;
                        else
                                min=60-min;
          }
        }
        if(k1==6)
        {
                min++;
                if(min>=60)
                        min=60-min;
        }        
        if(k1==7)
        {
                if(min>=1)
                        min--;
                else
                        min=59;
        }
        if(k1==8)
        {
                sec=sec+10;
                if(sec>=60)
                        sec=sec-60;
        }
        if(k1==9)
        {
                if(sec>10)
                        sec=sec-10;
                else
                {
                        if(sec==0)
                                sec=50;
                        else
                         sec=60-sec;
                }
        }
        if(k1==10)
        {
                sec++;
                if(sec>=60)
                        sec=sec-60;
        }
        if(sec==11)
        {

                if(sec>=1)
                        sec--;
                else
                {
                        if(sec==0)
                                sec=59;
                        else
                         sec=60-sec;
                }
        }
        if(k1==12)
                hour=0;
        if(k1==13)
                min=0;
        if(k1==14)        
                sec=0;
        if(k1==15)
        {
                hour=0;
                min=0;
                sec=0;
        }
}

/***********************************************
函數;chuankou
功能;利用上位機直接修改數值
********************************************/
void Usr() interrupt 4
{
        uint re;
        //ucahr re1;
        //ucahr re2;
        
        re=SBUF;
        RI=0;
        SBUF=re;
        while(TI==0);
        TI=0;
        a++;
        
        re=re/16*10+re%16;

        if(a==1)
                hour=re;
        if(a==2)
                min=re;
        if(a==3)
        {        
                sec=re;
                a=0;
        }
}

/************************************************
主函數
*************************************************/
void main()
{
        init();
        while(1)
        {
                keydown();  //矩陣掃描并修改數值
                datepros();//產傳送數值到數組內
                dispiay();//數顯

        }
}


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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品成人一区二区 | 国产精品久久久久久影视 | 午夜久久久 | 成人av一区| 亚洲精品一二区 | 久www | 午夜在线小视频 | 亚洲欧洲一区 | caoporn免费在线视频 | 91精品国产高清久久久久久久久 | 久热国产在线 | 精品久久久久久久 | 成年免费在线观看 | 天天干狠狠操 | 伊人网站视频 | 国产精品99久久久久久动医院 | 国产综合精品 | 欧美在线观看一区二区 | 午夜亚洲| 在线成人| 日韩亚洲欧美综合 | 欧美日韩福利视频 | 国产精品一区在线观看你懂的 | 日韩一区二区免费视频 | 色婷婷综合网站 | 一级网站 | 欧美日韩在线综合 | 精品国产乱码一区二区三 | 国产高清免费 | 97精品超碰一区二区三区 | 日韩成人影院 | 日韩免费在线视频 | 日韩精品一区二区三区在线播放 | 久久久久久国产精品免费免费男同 | 欧美成ee人免费视频 | 国产精品毛片一区二区三区 | 国产精品福利久久久 | 亚洲精品视频免费 | 一区二区三区四区不卡视频 | 久久国产精品网站 | 一级黄色片日本 |