![]() |
發布時間: 2020-7-12 17:51
正文摘要:大佬們好,我是一位新手,目前我需要實現: 采用兩個按鍵和一位數碼顯示的單片機秒表設計的實物制作,其功能是:上電時顯示提示符。按 A 鍵再按 B 鍵后,顯示兩鍵按下之間的時間 t(t <60s),單位為 ... |
用AD就可以了 |
另外我這程序不知道哪里不對,顯示的時間好像是亂的 #include<reg51.h> #define uchar unsigned char #define uint unsigned int uint m=0; sbit A1=P3^4; sbit A2=P3^5; uint count,t; uchar d,e,f; uchar code table[]={0x14,0xde,0x38,0x1a,0xd2,0x13,0x11,0x9e,0x10,0x12}; uchar code cnt[]={10000,1000,100,10,1}; void delay(void) //誤差 0us { unsigned char a,b,c; for(c=67;c>0;c--) for(b=124;b>0;b--) for(a=167;a>0;a--); } void start() { TMOD=0x01; //T0 使用工作方式 1 TH0=(65536-1000)/256; //1ms 定時 TL0=(65536-1000)%256; EA=1; ET0=1; TR0=0; } void time0(void) interrupt 1 //T0 中斷服務子程序 { TH0=(65536-1000)/256; TL0=(65536-1000)%256; count++; if(count>=1) {count=0; t++; if(t>=60000) {t=0;} } } void display(uint t) //顯示子程序,從第一位開始逐位顯示 { uint k=0,v; for(;k<5;k++) { v=t/cnt[k]%10 ; P0=table[v]; delay(); {for(f=23;f>0;f--) for(e=152;e>0;e--) for(d=70;d>0;d--) P0=0xFF; } } } void main(void) { start(); while(1) { P0=0xb7; P3=0x30; if(P3!=0x30) {if(A1==0) //按鍵掃描 {TR0=1;} if(A2==0) { TR0=0; while(!A2); while(P3==0x30) { display(t); } } } } } |
odfggf 發表于 2020-7-13 20:14 噢噢,要求是共陽數碼管,那可以接1.6K的限流電阻和10K上拉電阻嗎 |
Irvingzong 發表于 2020-7-13 20:05 接共陰的話,1-10電阻可以不用,但是RP1是一定要的,而且Rp1上拉阻值要在680歐左右,否則亮度會非常低。 相比之下,還是用共陽數碼管,這樣可以省去RP1上拉電阻,R4---R10限流電阻還是接一個的好 |
xianfajushi 發表于 2020-7-13 06:31 可是師傅要求加限流電阻R4-10而且數碼管工作電流是1.8毫安,那計算得到限流電阻是1.6K,可是仿真的時候不亮了,要降低阻值才能亮,實物也是這樣嗎 |
哈哈,緊盯單個數碼管變換的時間數字眼睛會覺得很累 |
按實際電路也一樣不需要1-10電阻,數碼管選用共陰,這樣焊接電路元件少,花錢也少,電路顯得精簡得當。 |
R1,R2,RP1可以不需要。 |
xianfajushi 發表于 2020-7-12 18:22 那在焊接的時候需要加上這些電阻嗎,其他的元件參數仿真正常那焊接的時候也沒問題嗎? |
按仿真電路來論R1-10統統多余,按實際電路論,復位電路參數按手冊要求。 |