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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3252|回復(fù): 8
打印 上一主題 下一主題
收起左側(cè)

新人課程設(shè)計(jì)。單片機(jī)電子時(shí)鐘問題。

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
400黑幣


本來已經(jīng)完成了但是又加上一條串口直接設(shè)置定時(shí)時(shí)間,并實(shí)時(shí)顯示剩余時(shí)間。理論本來就沒弄太懂,跌跌撞撞完成了。但是加上又難弄了。


在這個(gè)的基礎(chǔ)上可以修改嗎?   3.1口修改時(shí)分秒,dp是選擇的標(biāo)志。3.2  3.3口是加和減  外部中斷控制的。這是本來的電子時(shí)鐘。現(xiàn)在還要加上新串口直接定時(shí)顯示剩余時(shí)間,不知道怎么弄了。
下面是目前的程序         希望有人能幫助一下。




#include<reg51.h>

#define uchar unsigned char

#define uint  unsigned int

sbit k1=P3^1;  //第一個(gè)按鍵,選擇設(shè)置

uchar code distab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};//共陰數(shù)碼管段碼表

uchar disbuf[8]; //聲明顯示緩沖區(qū)8個(gè)單元

uchar hour=12;   //聲明小時(shí)變量,初值為12

uchar minute=59; //聲明分變量,初值為59

uchar second;    //聲明秒變量

uchar t0n;       //定時(shí)器T0中斷計(jì)數(shù),定時(shí)50ms,中斷20次為1秒

uchar dis;       //調(diào)時(shí)狀態(tài)下,顯示小數(shù)點(diǎn)位

void delay()     //延時(shí)子程序,用于顯示子程序

{

uint j;

for(j=300;j>0;j--);

}

//顯示子程序,參數(shù)dis為顯示小數(shù)點(diǎn)位

void display(uchar dis)

{

uchar j,disbit=0x01; //位碼

for(j=0;j<8;j++)

{

P2=~disbit;       //P2口輸出位碼

if(dis>0&&dis==j) //調(diào)時(shí)狀態(tài)下,顯示小數(shù)點(diǎn)

P0=distab[disbuf[j]]+0x80; //在小時(shí),分,秒位上顯示小數(shù)點(diǎn)

else

P0=distab[disbuf[j]]; //其它位正常顯示

disbit<<=1;           //取下一個(gè)位碼

delay();              //延時(shí)

}

}

void main()

{

disbuf[2]=disbuf[5]=10;//數(shù)碼管第3,6位顯示-

TMOD=0x01;

TH0 =0x3C;    //單片機(jī)晶振頻率=12M,定時(shí)50ms,時(shí)間常數(shù)=3CB0

TL0 =0xB0;

IE  =0x82;    //開定時(shí)器T0中斷

TR0 =1;       //啟動(dòng)定時(shí)器T0

IT0 =1;       //設(shè)置外部中斷為下降沿有效

IT1 =1;

while(1)

{

display(dis); //調(diào)顯示子程序

if(k1==0)     //選擇設(shè)置

{

dis++;    //停止計(jì)時(shí),進(jìn)入調(diào)時(shí)狀態(tài)

EX0=1;    //調(diào)時(shí)狀態(tài)下,允許外部INT0,INT1中斷

EX1=1;    //用來調(diào)小時(shí),分,秒

if(dis>7) //調(diào)小時(shí),在小時(shí)位顯示小數(shù)點(diǎn)

{

dis=0; //滅小數(shù)點(diǎn)

t0n=0; //調(diào)時(shí)結(jié)束,開始計(jì)時(shí)

TR0=1;

EX0=0; //關(guān)外部中斷

EX1=0;

}

else if(dis==2)dis=4; //調(diào)分,在分位顯示小數(shù)點(diǎn)

else if(dis==5)dis=7; //調(diào)秒,在秒位顯示小數(shù)點(diǎn)

while(k1==0)display(dis); //等待按鍵釋放

}

if(t0n>=20&&dis==0) //中斷20次,1秒到,計(jì)時(shí)狀態(tài)下時(shí)鐘計(jì)時(shí)

{

t0n=0;

second++;      //秒加1

if(second>=60) //到60秒

{

second=0;

minute++;      //分加1

if(minute>=60) //到60分

{

minute=0;

hour++;    //小時(shí)加1

if(hour>=24)

hour=0;

}

}

}

disbuf[0]=hour/10;    //顯示小時(shí)十位

disbuf[1]=hour%10;    //顯示小時(shí)個(gè)位

disbuf[3]=minute/10;  //顯示分十位

disbuf[4]=minute%10;  //顯示分個(gè)位

disbuf[6]=second/10;  //顯示秒十位

disbuf[7]=second%10;  //顯示秒個(gè)位

}

}

//定時(shí)器T0中斷服務(wù)子程序

void T0_isr() interrupt 1

{

TH0=0x3C;  //重寫時(shí)間常數(shù)

TL0=0xb0;

t0n++;     //中斷次加1

}

//外部中斷INT0服務(wù)程序,調(diào)時(shí)狀態(tài)下,加1

void INT0_ISR() interrupt 0

{

if(dis==1)     //調(diào)小時(shí)

{

hour++;    //小時(shí)加1

if(hour>=24)

hour=0;

}

if(dis==4)     //調(diào)分

{

minute++;  //分加1

if(minute>=60)

minute=0;

}

if(dis==7)     //調(diào)秒

{

second++;  //秒加1

if(second>=60)

second=0;

}

}

//外部中斷INT1服務(wù)程序,調(diào)時(shí)狀態(tài)下,減1

void INT1_ISR() interrupt 2

{

if(dis==1)   //調(diào)小時(shí)

{

hour--;  //小時(shí)減1

if(hour==0xff)

hour=23;

}

if(dis==4)    //調(diào)分

{

minute--; //分減1

if(minute==0xff)

minute=59;

}

if(dis==7)   //調(diào)秒

{

second--;//秒減1

if(second==0xff)

second=59;

}

}






評(píng)分

參與人數(shù) 1黑幣 +5 收起 理由
hzy123 + 5 贊一個(gè)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:303383 發(fā)表于 2018-6-9 22:56 | 只看該作者
提示: 作者被禁止或刪除 內(nèi)容自動(dòng)屏蔽
回復(fù)

使用道具 舉報(bào)

板凳
ID:272269 發(fā)表于 2018-6-10 14:38 | 只看該作者
串口是什么串口是通訊還是什么?
你要的是倒計(jì)時(shí)在數(shù)碼管上顯示嗎?
還是增加多一個(gè)模式?
回復(fù)

使用道具 舉報(bào)

地板
ID:348416 發(fā)表于 2018-6-10 16:46 | 只看該作者
jizi 發(fā)表于 2018-6-10 14:38
串口是什么串口是通訊還是什么?
你要的是倒計(jì)時(shí)在數(shù)碼管上顯示嗎?
還是增加多一個(gè)模式?

多加一個(gè)模式,在數(shù)碼管顯示倒計(jì)時(shí)。  倒計(jì)時(shí)時(shí)間可以設(shè)置的。
回復(fù)

使用道具 舉報(bào)

5#
ID:336165 發(fā)表于 2018-6-13 13:43 | 只看該作者
你這個(gè)的具體功能是什么
回復(fù)

使用道具 舉報(bào)

6#
ID:193818 發(fā)表于 2018-6-13 14:17 | 只看該作者
1.我先提一點(diǎn),樓主應(yīng)該不打算做實(shí)物吧?因?yàn)樽鰧?shí)物的畫,你的數(shù)碼管驅(qū)動(dòng)電路需要重新設(shè)計(jì)下。
2.你現(xiàn)在是一般時(shí)鐘,需要外加一個(gè)功能,我不清楚你說的串口是啥。姑且認(rèn)為你是說按鍵,通過按鍵切換到這個(gè)模式,然后設(shè)計(jì)相應(yīng)位置,再確定。這里應(yīng)該還需要一個(gè)中斷,然后用另一個(gè)定時(shí)器。當(dāng)中斷觸發(fā)時(shí)數(shù)碼管顯示倒計(jì)時(shí)模式,然后你設(shè)置運(yùn)行,當(dāng)?shù)褂?jì)時(shí)結(jié)束后,中斷結(jié)束返回時(shí)鐘畫面。個(gè)人愚見

評(píng)分

參與人數(shù) 1黑幣 +8 收起 理由
hedianzi + 8 絕世好帖!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

7#
ID:351040 發(fā)表于 2018-6-13 17:30 | 只看該作者
多加一個(gè)顯示倒計(jì)時(shí)
回復(fù)

使用道具 舉報(bào)

8#
ID:324844 發(fā)表于 2018-6-27 09:32 | 只看該作者
在P3^4上加上一個(gè)按鍵命名為k2,k2鎖死就會(huì)自動(dòng)倒計(jì)時(shí),k2打開就恢復(fù),可以直接先用你的k1中斷0中斷1設(shè)置時(shí)間再鎖死k2,也可以先鎖死再用你的k1和中斷0中斷1調(diào)整
#include<reg51.h>

#define uchar unsigned char//宏替換

#define uint  unsigned int

sbit k1=P3^1;             //第一個(gè)按鍵,選擇設(shè)置
sbit k2=P3^4;
bit c;
uchar code distab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};//共陰數(shù)碼管段碼表(0-9,-)

uchar disbuf[8];         //聲明顯示緩沖區(qū)8個(gè)單元
uchar hour=12;          //聲明小時(shí)變量,初值為12

uchar minute=59;        //聲明分變量,初值為59

uchar second;           //聲明秒變量

uchar t0n;              //定時(shí)器T0中斷計(jì)數(shù),定時(shí)50ms,中斷20次為1秒

uchar dis;             //調(diào)時(shí)狀態(tài)下,顯示小數(shù)點(diǎn)位

void delay()          //延時(shí)子程序,用于顯示子程序

{

uint j;

for(j=300;j>0;j--);

}

                      //顯示子程序,參數(shù)dis為顯示小數(shù)點(diǎn)位

void display(uchar dis) // ????????????????????????????

{

uchar j,disbit=0x01;  //位碼(未知)

for(j=0;j<8;j++)

{

P2=~disbit;       //P2口輸出位碼

if(dis>0&&dis==j) //調(diào)時(shí)狀態(tài)下,顯示小數(shù)點(diǎn)(看不懂)

P0=distab[disbuf[j]]+0x80; //在小時(shí),分,秒位上顯示小數(shù)點(diǎn)

else

P0=distab[disbuf[j]]; //其它位正常顯示

disbit<<=1;           //取下一個(gè)位碼

delay();              //延時(shí)

}

}

void main()//主函數(shù)

{

disbuf[2]=disbuf[5]=10;//數(shù)碼管第3,6位顯示-

TMOD=0x01;  //t0定時(shí)器方式1

TH0 =0x3C;    //單片機(jī)晶振頻率=12M,定時(shí)50ms,時(shí)間常數(shù)=3CB0

TL0 =0xB0;

IE  =0x82;    //開定時(shí)器T0中斷(EX1外部中斷1沒開)

TR0 =1;       //啟動(dòng)定時(shí)器T0

IT0 =1;       //設(shè)置外部中斷為下降沿有效

IT1 =1;

while(1)

{

display(dis); //調(diào)顯示子程序(未知)

if(k1==0)     //選擇設(shè)置

{

dis++;    //停止計(jì)時(shí),進(jìn)入調(diào)時(shí)狀態(tài)(暫停了秒計(jì)時(shí))

EX0=1;    //調(diào)時(shí)狀態(tài)下,允許外部INT0,INT1中斷

EX1=1;    //用來調(diào)小時(shí),分,秒

if(dis>7) //調(diào)小時(shí),在小時(shí)位顯示小數(shù)點(diǎn)

{

dis=0; //滅小數(shù)點(diǎn)

t0n=0; //調(diào)時(shí)結(jié)束,開始計(jì)時(shí)

TR0=1;

EX0=0; //關(guān)外部中斷

EX1=0;

}

else if(dis==2)dis=4; //調(diào)分,在分位顯示小數(shù)點(diǎn)

else if(dis==5)dis=7; //調(diào)秒,在秒位顯示小數(shù)點(diǎn)

while(k1==0)display(dis); //等待按鍵釋放

}
//這里做改動(dòng)
if(c==0);
{
if(t0n>=20&&dis==0) //中斷20次,1秒到,計(jì)時(shí)狀態(tài)下時(shí)鐘計(jì)時(shí)

{

t0n=0;

second++;      //秒加1

if(second>=60) //到60秒

{

second=0;

minute++;      //分加1

if(minute>=60) //到60分

{

minute=0;

hour++;    //小時(shí)加1

if(hour>=24)

hour=0;

}

}
}
}
if(k2==0)
{
c=~c;
ET0=~ET0;
while(k1==0)display(dis);
}
if(c==1)
{

second--;      //秒加1

if(second==0xff) //到60秒

{

second=59;

minute--;      //分加1

if(minute==0xff) //到60分

{

minute=59;

hour--;    //小時(shí)加1

if(hour==0xff)

hour=23;

}
}
}


disbuf[0]=hour/10;    //顯示小時(shí)十位

disbuf[1]=hour%10;    //顯示小時(shí)個(gè)位

disbuf[3]=minute/10;  //顯示分十位

disbuf[4]=minute%10;  //顯示分個(gè)位

disbuf[6]=second/10;  //顯示秒十位

disbuf[7]=second%10;  //顯示秒個(gè)位

}

}

//定時(shí)器T0中斷服務(wù)子程序

void T0_isr() interrupt 1

{

TH0=0x3C;  //重寫時(shí)間常數(shù)

TL0=0xb0;

t0n++;     //中斷次加1

}

//外部中斷INT0服務(wù)程序,調(diào)時(shí)狀態(tài)下,加1

void INT0_ISR() interrupt 0

{

if(dis==1)     //調(diào)小時(shí)

{

hour++;    //小時(shí)加1

if(hour>=24)

hour=0;

}

if(dis==4)     //調(diào)分

{

minute++;  //分加1

if(minute>=60)

minute=0;

}

if(dis==7)     //調(diào)秒

{

second++;  //秒加1

if(second>=60)

second=0;

}

}

//外部中斷INT1服務(wù)程序,調(diào)時(shí)狀態(tài)下,減1

void INT1_ISR() interrupt 2

{

if(dis==1)   //調(diào)小時(shí)

{

hour--;  //小時(shí)減1

if(hour==0xff)

hour=23;

}

if(dis==4)    //調(diào)分

{

minute--; //分減1

if(minute==0xff)

minute=59;

}

if(dis==7)   //調(diào)秒

{

second--;//秒減1

if(second==0xff)

second=59;

}

}

]4FU{4{@BOYR16ES6]9K_US.png (242.02 KB, 下載次數(shù): 54)

]4FU{4{@BOYR16ES6]9K_US.png

時(shí)鐘.rar

18.3 KB, 下載次數(shù): 4

回復(fù)

使用道具 舉報(bào)

9#
ID:324844 發(fā)表于 2018-6-27 11:08 | 只看該作者
加P3^4一個(gè)按鍵定義為k2,該按鍵鎖死則開始從當(dāng)前時(shí)間倒計(jì)時(shí),釋放則恢復(fù)正常時(shí)鐘。可以先用你的k1,中斷0和1進(jìn)行設(shè)置定時(shí)時(shí)間,再鎖死,也可以鎖死再實(shí)時(shí)設(shè)置
#include<reg51.h>

#define uchar unsigned char//宏替換

#define uint  unsigned int

sbit k1=P3^1;             //第一個(gè)按鍵,選擇設(shè)置
sbit k2=P3^4;
bit c;
uchar code distab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};//共陰數(shù)碼管段碼表(0-9,-)

uchar disbuf[8];         //聲明顯示緩沖區(qū)8個(gè)單元
uchar hour=12;          //聲明小時(shí)變量,初值為12

uchar minute=59;        //聲明分變量,初值為59

uchar second;           //聲明秒變量

uchar t0n;              //定時(shí)器T0中斷計(jì)數(shù),定時(shí)50ms,中斷20次為1秒

uchar dis;             //調(diào)時(shí)狀態(tài)下,顯示小數(shù)點(diǎn)位

void delay()          //延時(shí)子程序,用于顯示子程序

{

uint j;

for(j=300;j>0;j--);

}

                      //顯示子程序,參數(shù)dis為顯示小數(shù)點(diǎn)位

void display(uchar dis) // ????????????????????????????

{

uchar j,disbit=0x01;  //位碼(未知)

for(j=0;j<8;j++)

{

P2=~disbit;       //P2口輸出位碼

if(dis>0&&dis==j) //調(diào)時(shí)狀態(tài)下,顯示小數(shù)點(diǎn)(看不懂)

P0=distab[disbuf[j]]+0x80; //在小時(shí),分,秒位上顯示小數(shù)點(diǎn)

else

P0=distab[disbuf[j]]; //其它位正常顯示

disbit<<=1;           //取下一個(gè)位碼

delay();              //延時(shí)

}

}

void main()//主函數(shù)

{

disbuf[2]=disbuf[5]=10;//數(shù)碼管第3,6位顯示-

TMOD=0x01;  //t0定時(shí)器方式1

TH0 =0x3C;    //單片機(jī)晶振頻率=12M,定時(shí)50ms,時(shí)間常數(shù)=3CB0

TL0 =0xB0;

IE  =0x82;    //開定時(shí)器T0中斷(EX1外部中斷1沒開)

TR0 =1;       //啟動(dòng)定時(shí)器T0

IT0 =1;       //設(shè)置外部中斷為下降沿有效

IT1 =1;

while(1)

{

display(dis); //調(diào)顯示子程序(未知)

if(k1==0)     //選擇設(shè)置

{

dis++;    //停止計(jì)時(shí),進(jìn)入調(diào)時(shí)狀態(tài)(暫停了秒計(jì)時(shí))

EX0=1;    //調(diào)時(shí)狀態(tài)下,允許外部INT0,INT1中斷

EX1=1;    //用來調(diào)小時(shí),分,秒

if(dis>7) //調(diào)小時(shí),在小時(shí)位顯示小數(shù)點(diǎn)

{

dis=0; //滅小數(shù)點(diǎn)

t0n=0; //調(diào)時(shí)結(jié)束,開始計(jì)時(shí)

TR0=1;

EX0=0; //關(guān)外部中斷

EX1=0;

}

else if(dis==2)dis=4; //調(diào)分,在分位顯示小數(shù)點(diǎn)

else if(dis==5)dis=7; //調(diào)秒,在秒位顯示小數(shù)點(diǎn)

while(k1==0)display(dis); //等待按鍵釋放

}
//這里做改動(dòng)
if(c==0);
{
if(t0n>=20&&dis==0) //中斷20次,1秒到,計(jì)時(shí)狀態(tài)下時(shí)鐘計(jì)時(shí)

{

t0n=0;

second++;      //秒加1

if(second>=60) //到60秒

{

second=0;

minute++;      //分加1

if(minute>=60) //到60分

{

minute=0;

hour++;    //小時(shí)加1

if(hour>=24)

hour=0;

}

}
}
}
if(k2==0)
{
c=~c;
ET0=~ET0;
while(k1==0)display(dis);
}
if(c==1)
{

second--;      //秒加1

if(second==0xff) //到60秒

{

second=59;

minute--;      //分加1

if(minute==0xff) //到60分

{

minute=59;

hour--;    //小時(shí)加1

if(hour==0xff)

hour=23;

}
}
}


disbuf[0]=hour/10;    //顯示小時(shí)十位

disbuf[1]=hour%10;    //顯示小時(shí)個(gè)位

disbuf[3]=minute/10;  //顯示分十位

disbuf[4]=minute%10;  //顯示分個(gè)位

disbuf[6]=second/10;  //顯示秒十位

disbuf[7]=second%10;  //顯示秒個(gè)位

}

}

//定時(shí)器T0中斷服務(wù)子程序

void T0_isr() interrupt 1

{

TH0=0x3C;  //重寫時(shí)間常數(shù)

TL0=0xb0;

t0n++;     //中斷次加1

}

//外部中斷INT0服務(wù)程序,調(diào)時(shí)狀態(tài)下,加1

void INT0_ISR() interrupt 0

{

if(dis==1)     //調(diào)小時(shí)

{

hour++;    //小時(shí)加1

if(hour>=24)

hour=0;

}

if(dis==4)     //調(diào)分

{

minute++;  //分加1

if(minute>=60)

minute=0;

}

if(dis==7)     //調(diào)秒

{

second++;  //秒加1

if(second>=60)

second=0;

}

}

//外部中斷INT1服務(wù)程序,調(diào)時(shí)狀態(tài)下,減1

void INT1_ISR() interrupt 2

{

if(dis==1)   //調(diào)小時(shí)

{

hour--;  //小時(shí)減1

if(hour==0xff)

hour=23;

}

if(dis==4)    //調(diào)分

{

minute--; //分減1

if(minute==0xff)

minute=59;

}

if(dis==7)   //調(diào)秒

{

second--;//秒減1

if(second==0xff)

second=59;

}

}

]4FU{4{@BOYR16ES6]9K_US.png (242.02 KB, 下載次數(shù): 49)

]4FU{4{@BOYR16ES6]9K_US.png

時(shí)鐘.rar

18.3 KB, 下載次數(shù): 4

回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 天天激情综合 | 欧美亚洲国产日韩 | 国产va| 国产精品一区一区三区 | 久久精品中文 | 精精国产xxxx视频在线播放 | 视频一二三区 | 综合色播| 亚洲激情在线观看 | 欧美一区二区三区视频 | 中文字幕第十页 | 91久久| 国产视频第一页 | 在线观看免费国产 | 欧美久久久久久久久 | 激情影院久久 | 精品国产一区二区三区免费 | 国产精品污www一区二区三区 | 国产精品久久久久久一级毛片 | 日韩一区二区三区视频 | 日韩免费一区二区 | 久久33 | 日韩在线视频一区 | 国产精品一区二区在线 | 中文字幕日韩一区二区 | 国产91综合一区在线观看 | 日韩欧美在线播放 | 成人在线h| 国产成人精品一区二区三区网站观看 | 精品九九 | 五月天婷婷狠狠 | 成人小视频在线 | 国产精品视频网 | 日韩精品免费播放 | 91在线视频一区 | 韩日一区二区三区 | 欧美一区二区三区视频在线观看 | 91在线最新 | 欧美1区2区 | 午夜影院在线免费观看视频 | 欧美日韩一二三区 |