<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 51單片機C編程(六、定時(shí)器時(shí)鐘顯示時(shí)分秒)

51單片機C編程(六、定時(shí)器時(shí)鐘顯示時(shí)分秒)

作者: 時(shí)間:2016-11-27 來(lái)源:網(wǎng)絡(luò ) 收藏
六位數碼管顯示時(shí)分秒,通過(guò)四個(gè)按鍵進(jìn)行時(shí)間的控制。按下"調時(shí)"按鍵,時(shí)間顯示停止;按下"選擇時(shí)分秒"按鍵,數碼管上方的發(fā)光二極管會(huì )點(diǎn)亮,對應著(zhù)選中的要修改的時(shí)間是小時(shí)、分鐘還是秒;按下"按下增加"按鍵,選中的時(shí)間將會(huì )增加;按下"完成"按鍵,時(shí)間繼續顯示。

已通過(guò)proteus仿真,電路圖如下所示,希望大家多多指點(diǎn),積極留言:

本文引用地址:http://dyxdggzs.com/article/201611/322159.htm

//編程:jumpmysoul

#include
#define ulong unsigned long
char tab[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共陽(yáng)數碼管數字碼
char tab_dp[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x70,0x10};//共陽(yáng)數碼管數字碼(帶小數點(diǎn))

#define LED P0//P0為數碼管的段選
#define LIGHT P1//P1為時(shí)分秒位的指示燈
#define WS P2//P2為數碼管的位選

sbit time_change=P3^0;//P3^0為“調時(shí)”按鍵
sbit time_choose=P3^1;//P3^1為“選擇時(shí)分秒”按鍵
sbit time_inc=P3^2;//P3^2為“增加”按鍵
sbit time_ok=P3^3;//P3^3為“完成”按鍵

ulong t;
ulong sec,min,hour,sec_ge,sec_shi,min_ge,min_shi,hour_ge,hour_shi;//定義秒,分,時(shí),秒的個(gè)位,十位,分的個(gè)位,十位,時(shí)的個(gè)位,十位
int choose_n;//按下“選擇時(shí)分秒”按鍵的次數
int flag;//定義“調時(shí)”按鍵的標志位
//---------------------------------------------------------------------
void init();
void display();
void delay(int);
void time_modify();
//---------------------------------------------------------------------
void main()
{
init();
while(1)
{
TR0=1;
display();
time_modify();
}
}
//---------------------------------------------------------------------
void init()
{
WS=t=LIGHT=choose_n=0;
sec_ge=sec_shi,min_ge,min_shi,hour_ge,hour_shi=sec=min=hour=flag=0;
TMOD=0x01;//定義定時(shí)器0工作與方式1
TH0=(65536-5536)/256;//定時(shí)器賦初值
TL0=(65536-5536)%256;
EA=1;//開(kāi)總中斷和T0中斷
ET0=1;
}
//--------------------------------延時(shí)子函數------------------------------------
void delay(int x)
{
int i,j;
for(i=x;i>0l;i--)
for(j=255;j>0;j--);
}
//-------------------------------顯示子函數---------------------------------------
void display()
{
int i=0;

if(TF0==1)//如果定時(shí)器溢出
{
TF0=0;//清中斷標志位
t++;
if(t==10)
{
t=0;
sec++;//秒加1
if(sec==60)//如果秒為60,則清零,分加1
{
sec=0;
min++;
}
if(min==60)//如果分為60,則清零,時(shí)加1
{
min=0;
hour++;
}
if(hour==24)//如果時(shí)為24,則清零
{
hour=0;
}
}
}
sec_ge=sec%10;//秒的個(gè)位和十位
sec_shi=sec/10;
min_ge=min%10;//分的個(gè)位和十位
min_shi=min/10;
hour_ge=hour%10;//時(shí)的個(gè)位和十位
hour_shi=hour/10;

WS=0x20;//循環(huán)掃描
LED=tab[sec_ge];
delay(1);

WS=0x10;
LED=tab[sec_shi];
delay(1);

WS=0x08;
LED=tab_dp[min_ge];
delay(1);

WS=0x04;
LED=tab[min_shi];
delay(1);

WS=0x02;
LED=tab_dp[hour_ge];
delay(1);

WS=0x01;
LED=tab[hour_shi];
delay(1);
}
//----------------------------調時(shí)子程序-------------------------------
void time_modify()
{
if(time_change==0)//如果“調時(shí)”按鍵按下
{
delay(5);//延時(shí)去抖
if(time_change==0)
{
flag=1;//標志位置1
while(flag)//當標志位為1時(shí)才能進(jìn)行時(shí)間調整
{
TR0=0;//定時(shí)器停止
display();//顯示停止時(shí)的時(shí)間
if(time_ok==0)//如果“完成”按鍵按下
{
delay(15);//延時(shí)去抖
if(time_ok==0)
{
flag=0;//標志位清零
}
}
if(time_choose==0)//如果“時(shí)分秒選擇”按鍵按下
{
delay(30);//延時(shí)去抖
if(time_choose==0)
{
++choose_n;//按下的次數增加
if(choose_n==4)//如果次數達到4次
{
choose_n=1;//次數清零
}
if(choose_n==1)//如果次數為1,秒指示燈亮
{
LIGHT=0x03;
}
else if(choose_n==2)//如果次數為2,分指示燈亮
{
LIGHT=0x0c;
}
else if(choose_n==3)//如果次數為3,時(shí)指示燈亮
{
LIGHT=0x30;
}
}
}
if(time_inc==0)//如果“增加”按鍵按下
{
delay(30);//延時(shí)去抖
if(time_inc==0)
{
switch(choose_n)//分支結構,根據choose_n的值來(lái)判斷哪一位加1
{
case 1://如果choose_n為1,秒加1,到60清零
{
sec++;
if(sec==60)
sec=0;
break;
}
case 2://如果choose_n為2,分加1,到60清零
{
min++;
if(min==60)
min=0;
break;
}
case 3://如果choose_n為3,時(shí)加1,到24清零
{
hour++;
if(hour==24)
hour=0;
break;
}
default:break;
}
}
}
}
}
}
}



評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>