熱門: 51單片機(jī) | 24小時(shí)必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂園 | Arduino | 嵌入式OS | 程序設(shè)計(jì)
![]() |
zl2168 發(fā)表于 2018-6-7 20:47 謝謝幫助 |
wulin 發(fā)表于 2018-6-7 15:51 大神 你這是直接幫我寫出了嗎 辛苦了 還打好了備注 ![]() |
liyongan_1985 發(fā)表于 2018-6-7 18:09 額 第一次發(fā)帖見諒見諒 謝謝大佬的幫助 |
本帖最后由 zl2168 于 2018-6-7 20:49 編輯 介紹你一個(gè)參考案例 實(shí)例96 能預(yù)置初值的倒計(jì)時(shí)秒表 ![]() 先Proteus仿真一下,確認(rèn)有效。 ![]() 以上摘自張志良編著《80C51單片機(jī)仿真設(shè)計(jì)實(shí)例教程——基于Keil C和Proteus》清華大學(xué)出版社ISBN 978-7-302-41682-1,內(nèi)有常用的單片機(jī)應(yīng)用100案例,用于仿真實(shí)驗(yàn)操作,書中電路和程序設(shè)計(jì)有詳細(xì)說明,電路與程序真實(shí)可靠可信可行,程序語(yǔ)句條條有注解。 |
啥問題也沒有說明白。再說這是你的全部程序嗎?如果是,你的程序計(jì)時(shí)是不會(huì)對(duì)的,因?yàn)槟愕亩〞r(shí)器在初始化的時(shí)候就已經(jīng)開始計(jì)數(shù)了,會(huì)產(chǎn)生計(jì)時(shí)不準(zhǔn)確的。 |
這個(gè)論壇沒人的嗎 |
#include <AT89X52.H> #define uchar unsigned char #define uint unsigned int sbit key1=P2^0; sbit key2=P2^1; uchar code table[]={ //共陽(yáng)數(shù)碼管段碼"0~f-." 0xc0,0xf9,0xa4,0xb0, 0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83, 0xc6,0xa1,0x86,0x8e,0xbf,0x7f}; uchar Cnt50ms = 0; uchar Cnt1s = 24; void display()//顯示程序 { static uchar count=0; //計(jì)數(shù)變量 static uchar count1=0; count1++; //動(dòng)態(tài)顯示計(jì)數(shù)延時(shí) if(count1>=50) { count1=0; P1=0xff; //消隱 switch(count) { case 0: P3=0x01; //秒十位位碼 P1=table[Cnt1s/10];//秒十位段碼 count=1; break; case 1: P3=0x02; //秒個(gè)位位碼 P1=table[Cnt1s%10];//秒個(gè)位段碼 count=0; break; } } } void Timer0Init() //50毫秒@12.000MHz { TMOD= 0x01; //設(shè)置定時(shí)器模式 TL0 = 0xB0; //設(shè)置定時(shí)初值 TH0 = 0x3C; //設(shè)置定時(shí)初值 TF0 = 0; //清除TF0標(biāo)志 // TR0 = 1; //定時(shí)器0開始計(jì)時(shí) EA=1; //開總中斷 ET0=1; //開定時(shí)器0中斷 } void keyscan() //按鍵掃描 { static uchar count1=0,count2=0; //計(jì)數(shù)變量 static bit key_sign1=0,key_sign2=0; //按鍵狀態(tài)標(biāo)志 if(key1==0) //檢測(cè)輸入如果為0 { count1++; //計(jì)數(shù)延時(shí)消抖 if((count1>=250)&&(key_sign1==0)) { key_sign1=1; //按鍵狀態(tài)標(biāo)志置1,防止重復(fù)響應(yīng) TR0 = 1; //定時(shí)器0開始計(jì)時(shí) } } else //按鍵抬起 { count1=0; //計(jì)數(shù)變量清0 key_sign1=0; //按鍵狀態(tài)標(biāo)志清0 } if(key2==0) //檢測(cè)輸入如果為0 { count2++; //計(jì)數(shù)延時(shí)消抖 if((count2>=250)&&(key_sign2==0)) { key_sign2=1; //按鍵狀態(tài)標(biāo)志置1,防止重復(fù)響應(yīng) Cnt1s=24; TR0 = 0; //定時(shí)器0停止計(jì)時(shí) } } else //按鍵抬起 { count2=0; //計(jì)數(shù)變量清0 key_sign2=0; //按鍵狀態(tài)標(biāo)志清0 } } /***************主程序****************/ void main() { Timer0Init(); //定時(shí)器初始化 while(1) { keyscan(); //按鍵掃描 display(); //顯示程序 } } /**************中斷服務(wù)程序*****************/ void timer0() interrupt 1 { TL0 = 0xB0; //設(shè)置定時(shí)初值 TH0 = 0x3C; //設(shè)置定時(shí)初值 Cnt50ms++; if(Cnt50ms>=20) //1s { Cnt50ms=0; Cnt1s--; if(Cnt1s==0) { Cnt1s=0; TR0 = 0; //定時(shí)器0停止計(jì)時(shí) } } } |
Powered by 單片機(jī)教程網(wǎng)