|
2黑幣
捕獲.PNG (189.94 KB, 下載次數(shù): 109)
下載附件
仿真圖
2018-6-9 20:50 上傳
捕獲2.PNG (15.45 KB, 下載次數(shù): 120)
下載附件
按鍵的效果
2018-6-9 20:50 上傳
要求加一個(gè)串口直接設(shè)置定時(shí)時(shí)間,并實(shí)時(shí)顯示剩余時(shí)間。 感覺(jué)改動(dòng)的難度有點(diǎn)大。 現(xiàn)在P3.1是修改時(shí)分秒,修改標(biāo)志就是dp。p3.2加p3.3
減 現(xiàn)在在圖的基礎(chǔ)上加新串口實(shí)現(xiàn)定時(shí)的倒計(jì)時(shí)功能。 倒計(jì)時(shí)的不知道怎么去弄了。
現(xiàn)在的代碼如下:
- #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; //開(kāi)定時(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; //用來(lái)調(diào)小時(shí),分,秒
- if(dis>7) //調(diào)小時(shí),在小時(shí)位顯示小數(shù)點(diǎn)
- {
- dis=0; //滅小數(shù)點(diǎn)
- t0n=0; //調(diào)時(shí)結(jié)束,開(kāi)始計(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; //重寫(xiě)時(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;
- }
- }
復(fù)制代碼
|
-
捕獲.PNG
(189.94 KB, 下載次數(shù): 122)
下載附件
2018-6-9 20:49 上傳
仿真圖
-
捕獲2.PNG
(15.45 KB, 下載次數(shù): 120)
下載附件
2018-6-9 20:49 上傳
按鍵顯示的效果
|