![]() |
發(fā)布時間: 2020-5-30 17:30
正文摘要://用計數(shù)器統(tǒng)計的數(shù)量,用定時器在數(shù)碼管上顯示數(shù)量,用外部中斷清空 //師傅的意思是想讓我們把顯示函數(shù)丟到中斷里邊好從delay中解脫出來,可樓主太菜了,悟不到555 #include<reg51.h> #include<stdio.h> ... |
gxslxxm 發(fā)表于 2020-5-30 22:07 謝謝您的回復,我另一個pwm可調(diào)占空比的程序數(shù)碼管確實有閃爍。 |
BilibiliGiao 發(fā)表于 2020-5-30 17:33 沒有必要把顯示程序放在中斷,稍微改一下即可不用delay。 ![]()
|
很久項目不用io口掃數(shù)碼管了。有點不知道怎么說。 簡單說: 1:io口掃描數(shù)碼管要注意是掃描的時間間隔。 滿足掃描間隔的前提下,如果主循環(huán)里有ALU占用時間過長的函數(shù),那么數(shù)碼管掃描的程序放到中斷里掃描來滿足掃描時間的間隔。(假設(shè)在突發(fā)情況下,一個模擬iic的流程可能會占用5ms時間,那么,有可能就會因為這個導致數(shù)碼管亮度異常或者閃爍) 2:看了一眼程序,改進的程序中放在中斷中的程序已經(jīng)把每一位的掃描分時出來了。如果時序沒問題是可以的。修改意見:定時器的時間注釋出來;if 改成 siwtch 語句(我覺得相對直觀);電路有問題,一般不這么設(shè)計,至于為什么自己去看看三極管一般怎么用。 |
//按普中的視頻改了改不知道行不行 #include<reg51.h> #include<stdio.h> unsigned char dis; //sbit relay = P1^0; unsigned char code nondis[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//0-9 //定時器1初始化 void timerinit() { TMOD|=0X10; TH1=0xFC; TL1=0x18; ET1=1; EA=1; TR1=1; } void main(void) { P0=0x80; EA = 1; ET0 = 1; EX0 = 1; IT0 = 1; ET0 = 0; TMOD = 0x06; TH0 = 0;//9 TL0 = 0;//9 TR0 = 1; timerinit(); while(1); } void int0() interrupt 0 // 清空 { TL0 = 0 ; } //void counter1() interrupt 1 //{ // relay = ~relay; //} void Time1() interrupt 3 // 清空 { static unsigned short i; unsigned char gewei,shiwei,baiwei; baiwei=TL0/100; gewei=TL0%10; shiwei=(TL0/10)%10; TH1=0xFC; TL1=0x18; i++; if(i==10) { P2=0xff; P2=nondis[gewei];//個位 P0=0x80; } if(i==20) { P2=0xff; P2=nondis[shiwei];//十位 P0=0x40; } if(i==30) { i=0; P2=0xff; P2=nondis[baiwei];//百位 P0=0x20; } } |
Powered by 單片機教程網(wǎng)