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

標(biāo)題: 新人課程設(shè)計(jì)。單片機(jī)電子時(shí)鐘問題。 [打印本頁]

作者: 恩比德大帝@@    時(shí)間: 2018-6-9 21:13
標(biāo)題: 新人課程設(shè)計(jì)。單片機(jī)電子時(shí)鐘問題。


本來已經(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;

}

}







作者: 小貓貓愛吃魚    時(shí)間: 2018-6-9 22:56
你好!用你現(xiàn)在的數(shù)碼管顯示,顯然位數(shù)不夠了,建議換成液晶顯示;
但是這樣程序都要重新寫了,如果需要幫忙,看我頭像。。。
作者: jizi    時(shí)間: 2018-6-10 14:38
串口是什么串口是通訊還是什么?
你要的是倒計(jì)時(shí)在數(shù)碼管上顯示嗎?
還是增加多一個(gè)模式?

作者: 恩比德大帝@@    時(shí)間: 2018-6-10 16:46
jizi 發(fā)表于 2018-6-10 14:38
串口是什么串口是通訊還是什么?
你要的是倒計(jì)時(shí)在數(shù)碼管上顯示嗎?
還是增加多一個(gè)模式?

多加一個(gè)模式,在數(shù)碼管顯示倒計(jì)時(shí)。  倒計(jì)時(shí)時(shí)間可以設(shè)置的。
作者: 優(yōu)雅的刺猬    時(shí)間: 2018-6-13 13:43
你這個(gè)的具體功能是什么
作者: 漫步經(jīng)心    時(shí)間: 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è)人愚見
作者: a2474766286    時(shí)間: 2018-6-13 17:30
多加一個(gè)顯示倒計(jì)時(shí)
作者: hedianzi    時(shí)間: 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


作者: hedianzi    時(shí)間: 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






歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 中文字幕免费视频 | 99免费看| 6996成人影院网在线播放 | 日本一区二区三区视频在线 | 欧美成人激情 | 久久午夜精品福利一区二区 | 中文字幕一区二区三区四区五区 | 中文字幕在线观看一区 | 亚洲毛片一区二区 | 亚洲高清一区二区三区 | 亚洲国产中文在线 | 大学生a级毛片免费视频 | 狠狠做深爱婷婷综合一区 | 一区二区国产精品 | 91精品国产欧美一区二区 | 精品视频一区二区三区在线观看 | 黄色综合 | 日韩电影一区 | 欧美日韩视频在线第一区 | 81精品国产乱码久久久久久 | 国产精品美女久久久久久免费 | 国产欧美精品区一区二区三区 | 日韩毛片在线视频 | 成人午夜免费视频 | 中文字幕 在线观看 | 午夜在线观看视频 | 国产精品久久久久久中文字 | 久久精品欧美一区二区三区不卡 | 久久久久成人精品 | 国产精品综合色区在线观看 | 亚洲国产精品成人 | 国产精品国产精品国产专区不蜜 | 日韩一区欧美一区 | 99re视频 | 成人午夜在线视频 | 国产在线精品一区二区 | 精品国产色 | 91福利在线观看视频 | 97视频久久 | 久久久久久久久久影视 | 欧美日韩亚洲成人 |