久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
51單片機時鐘顯示+計時
[打印本頁]
作者:
fghdfjh
時間:
2017-11-20 09:22
標題:
51單片機時鐘顯示+計時
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code Tab0[]= //定義數(shù)碼管數(shù)組,沒有小數(shù)點
{
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f
};
uchar code Tab1[]= //定義數(shù)碼管數(shù)組,有小數(shù)點
{
0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef
};
sbit K1=P3^2; //模式選擇鍵,本程序三種模式,分別是時間顯示、秒表、時間設置
sbit K2=P3^3; //設置時間時加一/開始(暫停)秒表按鍵
sbit K3=P3^4; //切換設置位/清零秒表按鍵
void Delay(uchar x); //延時函數(shù)
void Display0(); //時間顯示函數(shù)
void Display1(); //秒表顯示函數(shù)
void Display2(); //時間設置顯示函數(shù)
void Init(); //中斷初始化函數(shù)
void Mode_K1(); //模式切換函數(shù)
void KEY_MiaoBiao(); //檢測秒表操作按鍵
void KEY_Time_Set(); //檢測時間設置按鍵
uchar Hours=23,Minutes=56,seconds=55; //分別定義三個變量表示時、分、秒
uchar Time0_bit=0; //用于定時器0的溢出標志
bit Set_Time=0; //設置時 閃爍時長的標志位
bit Set0=0; //設置時間標志,確定是設置‘分’還設置‘時’
uchar K1_bit=0; //用于模式切換的標志
uchar Miao_Biao0,Miao_Biao1,Miao_Biao2,Miao_Biao3,Miao_Biao4; //用于秒表的變量
void main()
{
Init(); //中斷初始化
while(1) //死循環(huán)
{
Mode_K1(); //模式掃描
switch(K1_bit) //模式選擇
{
case 0:
{
Display0(); //顯示時間
break;
}
case 1:
{
Display1(); //顯示秒表
KEY_MiaoBiao(); //掃描秒表操作
break;
}
case 2:
{
Display2(); //設置時間時的顯示程序,可閃爍定位
KEY_Time_Set(); //掃描按鍵
break;
}
}
}
}
void KEY_Time_Set() //設置時間時的按鍵掃描函數(shù)
{
if(K1_bit==2) //判斷是否為時間設置模式
{
if(K2==0) //K2有按下(下同)
{
Delay(10); //延時消抖(下同)
if(K2==0) //再次檢測是否為誤按
{
if(Set0==0) //檢測是設置‘時’還是分,Set0為0時設置‘分’,Set0為1時設置‘時’
{
Minutes++; //‘分’加1
if(Minutes==60) //當'分'加到60時,重新賦值0
Minutes=0;
}
else
{
Hours++; //‘時’加1
if(Hours==24) //當'時'加到24時,重新賦值0
Hours=0;
}
while(!K2); //按鍵松開檢測,消除松開按鍵時的抖動干擾
}
}
if(K3==0)
{
Delay(10);
if(K3==0)
{
Set0=~Set0; //K3每按一次Set0取反,以確定是設置‘時’還是設置‘分’,Set0為0時設置‘分’,Set0為1時設置‘時’
while(!K3);
}
}
}
}
void KEY_MiaoBiao() //檢測秒表按鍵操作
{
if(K1_bit==1) //判斷是否為秒表模式
{
if(K2==0)
{
Delay(10);
if(K2==0)
{
TR1=~TR1; //K2每按一次TR1取反,暫停或開始定時器1,達到暫停或開始秒表的目的
while(!K2);
}
}
if(K3==0)
{
Delay(10);
if(K3==0) //當K3按下時秒表所有數(shù)據(jù)清零,并停止定時器1
{
TR1=0; //停止定時器1
Miao_Biao0=0; //清零數(shù)據(jù)
Miao_Biao1=0;
Miao_Biao2=0;
Miao_Biao3=0;
Miao_Biao4=0;
while(!K3);
}
}
}
}
void Mode_K1() //模式選擇鍵,本程序三種模式,分別是時間顯示、秒表、時間設置
{
if(K1==0)
{
Delay(10);
if(K1==0)
{
K1_bit++;
if(K1_bit==3)
{
K1_bit=0;
}
while(!K1);
/***********************************************************************
*************當K1_bit為0時顯示時鐘,為1時進入秒表,*********************
*******************為2時進入時間設置模式********************************
***********************************************************************/
}
}
}
void Time1() interrupt 3 //定時器1函數(shù)
{
TH1=(65536-50000)/256; //重裝初值
TL1=(65536-50000)%256;
Miao_Biao0++;
if(Miao_Biao0==2) //以下為秒表數(shù)據(jù)處理
{
Miao_Biao0=0;
Miao_Biao1++; //Miao_Biao1每加1次為100ms,
if(Miao_Biao1==10)
{
Miao_Biao1=0;
Miao_Biao2++;
if(Miao_Biao2==60)
{
Miao_Biao2=0;
Miao_Biao3++;
if(Miao_Biao3==60)
{
Miao_Biao3=0;
Miao_Biao4++;
if(Miao_Biao4==10)
Miao_Biao4=0;
}
}
}
}
}
void Time0() interrupt 1 //定時器0函數(shù)
{
TH0=(65536-50000)/256; //重裝初值
TL0=(65536-50000)%256;
Time0_bit++;
if((Time0_bit%10)==0) //每溢出10次Time0_bit取反一次
Set_Time=~Set_Time; //0.5秒閃爍一次
if(Time0_bit==20) //以下為時間數(shù)據(jù)處理
{
Time0_bit=0;
seconds++;
if(seconds==60)
{
seconds=0;
Minutes++;
if(Minutes==60)
{
Minutes=0;
Hours++;
if(Hours==24)
{
Hours=0;
}
}
}
}
}
void Init() //中斷初始化函數(shù)
{
EA=1; //開總中斷
TMOD=0X11; //定時器工作方式選擇,定時器0和定時器1都選擇第1種工作方式
TH0=(65536-50000)/256; //定時器0裝初值,定時50ms
TL0=(65536-50000)%256;
ET0=1; //開定時器0開關
TR0=1; //開定時器0小開關
TH1=(65536-50000)/256; //定時器1裝初值,定時50ms
TL1=(65536-50000)%256;
ET1=1; //開定時器1開關
TR1=0; //關定時器1小開關
}
void Display2() //時間設置時的顯示函數(shù)
{
if(Set0==0) //判斷是否為設置‘時’還是‘分’
{
P0=Tab0[seconds%10]; //顯示秒的個位
P1=0xdf; //段選
Delay(10); //延時
P0=0X00; //消隱
P0=Tab0[seconds/10]; //顯示秒的十位
P1=0xef; //段選
Delay(10); //延時
P0=0X00; //消隱
if(Set_Time) //這個if語句實現(xiàn)分鐘以0.5秒的頻率閃爍
{
P0=Tab1[Minutes%10]; //顯示分的個位,需要加上小數(shù)點做分隔符
P1=0xf7; //段選
Delay(10); //延時
P0=0X00; //消隱
P0=Tab0[Minutes/10]; //顯示分的十位
P1=0xfb; //段選
Delay(10); //延時
P0=0X00; //消隱
}
else
{
P0=0x00; //顯示分的個位,需要加上小數(shù)點做分隔符
P1=0xf7; //段選
Delay(10); //延時
P0=0X00; //消隱
P0=0x00; //顯示分的十位
P1=0xfb; //段選
Delay(10); //延時
P0=0X00; //消隱
}
P0=Tab1[Hours%10]; //顯示時的個位,需要加上小數(shù)點做分隔符
P1=0xfd; //段選
Delay(10); //延時
P0=0X00; //消隱
P0=Tab0[Hours/10]; //顯示時的十位
P1=0xfe; //段選
Delay(10); //延時
P0=0X00; //消隱
}
else //‘時’鐘閃爍
{
P0=Tab0[seconds%10]; //顯示秒的個位
P1=0xdf; //段選
Delay(10); //延時
P0=0X00; //消隱
P0=Tab0[seconds/10]; //顯示秒的十位
P1=0xef; //段選
Delay(10); //延時
P0=0X00; //消隱
P0=Tab1[Minutes%10]; //顯示分的個位,需要加上小數(shù)點做分隔符
P1=0xf7; //段選
Delay(10); //延時
P0=0X00; //消隱
P0=Tab0[Minutes/10]; //顯示分的十位
P1=0xfb; //段選
Delay(10); //延時
P0=0X00; //消隱
if(Set_Time) //這個if語句實現(xiàn)‘時’鐘以0.5秒的頻率閃爍
{
P0=Tab1[Hours%10]; //顯示時的個位,需要加上小數(shù)點做分隔符
P1=0xfd; //段選
Delay(10); //延時
P0=0X00; //消隱
P0=Tab0[Hours/10]; //顯示時的十位
P1=0xfe; //段選
Delay(10); //延時
P0=0X00; //消隱
}
else
{
P0=0x00; //顯示時的個位,需要加上小數(shù)點做分隔符
P1=0xFF; //段選
Delay(10); //延時
P0=0X00; //消隱
P0=0X00; //顯示時的十位
P1=0xFF; //段選
Delay(10); //延時
P0=0X00; //消隱
}
}
}
void Display1() //顯示秒表
{
P0=Tab0[Miao_Biao1%10]; //顯示1/10秒的個位
P1=0xdf; //段選
Delay(10); //延時
P0=0X00; //消隱
P0=Tab1[Miao_Biao2%10]; //顯示秒的個位,需要加上小數(shù)點做分隔符
P1=0xef; //段選
Delay(10); //延時
P0=0X00; //消隱
P0=Tab0[Miao_Biao2/10]; //顯示秒的十位
P1=0xf7; //段選
Delay(10); //延時
P0=0X00; //消隱
P0=Tab1[Miao_Biao3%10]; //顯示分的個位,需要加上小數(shù)點做分隔符
P1=0xfb; //段選
Delay(10); //延時
P0=0X00; //消隱
P0=Tab0[Miao_Biao3/10]; //顯示分的十位
P1=0xfd; //段選
Delay(10); //延時
P0=0X00; //消隱
P0=Tab1[Miao_Biao4%10]; //顯示時的個位,需要加上小數(shù)點做分隔符
P1=0xfe; //段選
Delay(10); //延時
P0=0X00; //消隱
}
void Display0() //顯示時鐘
{
P0=Tab0[seconds%10]; //顯示秒的個位
P1=0xdf; //段選
Delay(10); //延時
P0=0X00; //消隱
P0=Tab0[seconds/10]; //顯示秒的十位
P1=0xef; //段選
Delay(10); //延時
P0=0X00; //消隱
P0=Tab1[Minutes%10]; //顯示分的個位,需要加上小數(shù)點做分隔符
P1=0xf7; //段選
Delay(10); //延時
P0=0X00; //消隱
P0=Tab0[Minutes/10]; //顯示分的十位
P1=0xfb; //段選
Delay(10); //延時
P0=0X00; //消隱
P0=Tab1[Hours%10]; //顯示時的個位,需要加上小數(shù)點做分隔符
P1=0xfd; //段選
Delay(10); //延時
P0=0X00; //消隱
P0=Tab0[Hours/10]; //顯示時的十位
P1=0xfe; //段選
Delay(10); //延時
P0=0X00; //消隱
}
void Delay(uchar x) //延時
{
uchar i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
99pao成人国产永久免费视频
|
91精品国产777在线观看
|
欧美精品在欧美一区二区少妇
|
国产精品久久久久久婷婷天堂
|
一区二区三区国产精品
|
国产视频一二三区
|
国产精品中文
|
亚洲天堂成人在线视频
|
国产一在线
|
久久av影院
|
激情一区二区三区
|
日本精品免费
|
久久久五月天
|
夜夜草
|
色欧美片视频在线观看
|
av片在线免费看
|
jlzzjlzz国产精品久久
|
欧美一区二区免费
|
国产一区亚洲
|
国产伦精品一区二区三区四区视频
|
精品国产乱码
|
国产一级毛片精品完整视频版
|
午夜av电影
|
黄色av网站免费看
|
日韩一二区在线
|
国产一区二区中文字幕
|
日韩欧美三区
|
国产亚洲精品综合一区
|
亚洲美女一区
|
免费观看的av
|
国产良家自拍
|
精品欧美一区二区三区久久久
|
欧美成年黄网站色视频
|
视频1区
|
成人在线免费观看av
|
久久久福利
|
久久毛片
|
国产欧美一区二区三区在线看
|
a级在线免费观看
|
精品1区
|
婷婷综合
|