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

標題: 基于51的電子鐘,可切換秒表 [打印本頁]

作者: rrrcv    時間: 2018-7-29 19:30
標題: 基于51的電子鐘,可切換秒表
/*
名稱:定時器T0實現電子表功能
時間:2018.7.15
功能:8位數碼管顯示時分秒(01-25-55);
                        按鍵Key1顯示秒表計時,每60s報時一次
                        整時報時,
*/
#include <reg51.h>
#define DataPort P1//宏定義端口
sbit Sound = P0^0;//將Sound位定義為P0.0引腳
unsigned char  time;        //記錄中斷次數
unsigned char  second;//記錄秒
unsigned char  min;//記錄分鐘
unsigned char  hour;//記錄小時
unsigned char key = 0;//記錄按鍵次數
unsigned int i;
unsigned char code Seg_Code[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//段碼
unsigned char code Bit_Code[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//位碼
sbit Seg_Latch = P2^2;  //段口
sbit Bit_Latch = P2^3; //位口
unsigned char num[8];//存儲顯示值
unsigned char num2[5];
void Display(unsigned int i,unsigned char j);//顯示函數
void Init_Timer0(void);//

/*****************延時************************/
void DelayUs2x(unsigned int t)
{   
while(--t);
}
void DelayMs(unsigned char t)
{

while(t--)
{
   DelayUs2x(245);
         DelayUs2x(245);
}
}
/****************主函數**********************/
void main()
{
                TMOD = 0x01; //T0方式1
                TH0 = 0xd8;        //(65536-10000)/256
                TL0 = 0xf0;        //(65536-10000)%256 0.01s
                ET0 = 1;//允許T0中斷
                EA = 1;   //開總中斷
                TR0 = 1;        //        啟動T0
                /*PX0 = 0;        //中斷1為高優先級
                PX1 = 1;*/
                while(1)
                {
                                if(second == 60)        //60s/1min
                                {
                                        second = 0;
                                        min++;
                                        if(min == 60)        //60min
                                        {
                                                min =0 ;
                                                hour ++;
                                                Sound = ~Sound;
                                                if(hour == 24)        //24h
                                                {
                                                        hour = 0;
                                                }
                                        }
                                }
                num[0] = Seg_Code[hour/10];
                num[1] = Seg_Code[hour%10];
                num[2] = 0x40;
                num[3] = Seg_Code[min/10];
                num[4] = Seg_Code[min%10];
                num[5] = 0x40;
                num[6] = Seg_Code[second/10];
                num[7] = Seg_Code[second%10];
                for(i=0;i<8;i++)
                {                               
                        Display(i,num[i]);
                }
               
                if((P3&0x80)==0x00)//按鍵被按下
                {
                        key ++;
                        TR0 = 0;                //關閉T0
                        EA = 0;
                        time = 0;
                        second = 0;
                        Init_Timer0();
               
                        switch(key)
                        {
                                case 1:                                //第一次按下
                                        TH1 = 0xd8;                //定時0.01s
                                        TL1 = 0xf0;
                                        ET1 = 1;        //允許T1中斷
                                        TR1 = 1;  //起動T1
                                        while(1)
                                        {
                                                if(second == 60)        //60s / 1min
                                                {
                                                        second = 0;
                                                        Sound = ~Sound;
                                                }
                                                num2[0] = Seg_Code[second/10];
                                                num2[1] = Seg_Code[second%10];
                                                num2[2] = 0x40;
                                                num2[3] = Seg_Code[time/10];
                                                num2[4] = Seg_Code[time%10];       
                                                for(i=0;i<5;i++)
                                                {
                                                        Display(i,num2[i]);
                                                }
                                        }
                                        break;
                                case 2:                        //第二次按下
                                        ET1 = 0;
                                        TR1 = 0;        //關閉T1
                                        break;
                                case 3:                        //第三次按下
                                        key = 0;        //鍵值清零
                                        DataPort = 0;
                                        second = 0;
                                        time = 0;
                                        TR0 = 1;
                                        break;
                        }
                }
        }
}

/*************顯示函數*****************/
void Display(unsigned int i,unsigned char j)
{
                       
                                        DataPort =0;
                                        Seg_Latch =1;
                                        Seg_Latch =0;
                       
                                        DataPort = Bit_Code[i];
                                        Bit_Latch =1;
                                        Bit_Latch =0;
                               
                                        DataPort = j;
                                        Seg_Latch =1;
                                        Seg_Latch = 0;
                               
                                        DelayUs2x(300);               
}

/******************        void Init_Timer0(void);****************************/
void Init_Timer0(void)
{
        TMOD = 0x10; //T1方式1
        EA = 1;   //開總中斷
        TH1 = 0xd8;                //定時0.01s
        TL1 = 0xf0;
}

/****************T0中斷函數************************/
void int_T0() interrupt 1
{
        EA = 0;        //屏蔽
        TH0 = 0xd8;        //(65536-10000)/256
        TL0 = 0xf0;        //(65536-10000)%256 0.01s
       
                time ++;
                if(time == 100)        //中斷100次(1s)
                {
                                time = 0;
                                second++;
       
                }
        EA = 1;
}
/********************T1中斷函數*********************************/
void int_T1() interrupt 3
{
        EA = 0;        //屏蔽
        TH1 = 0xd8;        //(65536-10000)/256
        TL1 = 0xf0;        //(65536-10000)%256 0.01s
       
                time ++;
                if(time == 100)        //中斷100次(1s)
                {
                                time = 0;
                                second++;
                }
        EA = 1;
}







歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 欧美成人精品在线 | 国产美女免费视频 | 国产女人与拘做受视频 | 国产精品久久久乱弄 | h在线| 天天操天天插天天干 | 国产三级大片 | 男女视频在线免费观看 | 日韩波多野结衣 | 黄色大片视频 | 国产成人99久久亚洲综合精品 | 黄网站在线播放 | 一级高清视频 | 国产网站在线播放 | 天天操综合网 | 99久久精品国产一区二区三区 | 色视频成人在线观看免 | 精品1区2区3区4区 | 五月激情六月婷婷 | 日本午夜精品 | 国产不卡一区在线观看 | 伊人网站视频 | 日韩区 | 久久精品国产a三级三级三级 | 亚洲精品一区二区冲田杏梨 | 蜜桃传媒一区二区 | 无码一区二区三区视频 | 国产日屁| h视频免费观看 | 欧美精品一区二区在线观看 | 91黄色免费看 | 欧美日韩精品免费观看 | www.天堂av.com | 亚洲精品在线看 | 女女百合av大片一区二区三区九县 | 日韩日b视频 | 久久精品福利视频 | 亚洲国产精久久久久久久 | 香蕉视频久久久 | 日韩一级不卡 | 亚洲国产一区在线 |